@ngocsangairvds/vsaf 3.1.27 ā 3.2.1
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.
- package/package.json +2 -2
- package/src/global.js +70 -10
- package/tools/skills/vds-scripts-skill/.openskills.json +6 -0
- package/tools/skills/vds-scripts-skill/QUALITY.md +44 -0
- package/tools/skills/vds-scripts-skill/SKILL.md +135 -0
- package/tools/skills/vds-scripts-skill/references/audit-commands.md +171 -0
- package/tools/skills/vds-scripts-skill/references/capability-index.md +34 -0
- package/tools/skills/vds-scripts-skill/references/development-commands.md +12 -0
- package/tools/skills/vds-scripts-skill/references/google-sheets.md +73 -0
- package/tools/skills/vds-scripts-skill/references/integration-commands.md +17 -0
- package/tools/skills/vds-scripts-skill/references/platform-bootstrap.md +31 -0
- package/tools/skills/vds-scripts-skill/references/specialist-routing.md +14 -0
- package/tools/skills/vds-scripts-skill/references/validation-commands.md +15 -0
- package/tools/skills/vsaf-build/SKILL.md +32 -2
- package/tools/skills/vsaf-ship/SKILL.md +41 -10
- package/tools/skills/vsaf-test/SKILL.md +8 -0
- package/tools/vds-scripts/.mcp.json +11 -0
- package/tools/vds-scripts/.secrets.baseline +133 -0
- package/tools/vds-scripts/AGENTS.md +152 -0
- package/tools/vds-scripts/CLAUDE.md +101 -0
- package/tools/vds-scripts/CLI_COMMAND_OPTIMIZATION.md +156 -0
- package/tools/vds-scripts/PACKAGE_P125B_IMPLEMENTATION_SUMMARY.md +131 -0
- package/tools/vds-scripts/PROJECT_COMPLETION_SUMMARY.md +45 -0
- package/tools/vds-scripts/README.md +97 -0
- package/tools/vds-scripts/bitbucket_manifest_mapping.toml +34 -0
- package/tools/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +258 -0
- package/tools/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +393 -0
- package/tools/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +61 -0
- package/tools/vds-scripts/bitbucket_orchestrator/FEATURES.md +908 -0
- package/tools/vds-scripts/bitbucket_orchestrator/README.md +687 -0
- package/tools/vds-scripts/bitbucket_orchestrator/pyproject.toml +40 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +20 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +657 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +2108 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +2534 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +171 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +67 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +185 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +244 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/__init__.py +8 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/conftest.py +65 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +151 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +546 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +145 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +115 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client.py +157 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +79 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +163 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +32 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +194 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +164 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +179 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +119 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +156 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code.py +98 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +282 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +335 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +147 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_config.py +131 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +352 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +371 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +204 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +261 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +270 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +204 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +334 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +343 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +270 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +189 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +233 -0
- package/tools/vds-scripts/bitbucket_orchestrator/uv.lock +742 -0
- package/tools/vds-scripts/confluence_orchestrator/Dockerfile +19 -0
- package/tools/vds-scripts/confluence_orchestrator/README.md +412 -0
- package/tools/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +127 -0
- package/tools/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +108 -0
- package/tools/vds-scripts/confluence_orchestrator/pyproject.toml +48 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +20 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +2532 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +175 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +290 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +94 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +1835 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +80 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +109 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +1114 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +165 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +78 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +121 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +213 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +305 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_png_attachments.py +305 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/__init__.py +0 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/conftest.py +8 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +224 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +188 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +247 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_cli.py +499 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_config.py +83 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_content.py +186 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +27 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +2250 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +223 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing.py +71 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +37 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +44 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +49 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_export.py +230 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_history.py +204 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_http.py +117 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +91 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_reporting.py +24 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +34 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_space_management.py +237 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +332 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +388 -0
- package/tools/vds-scripts/confluence_orchestrator/uv.lock +1023 -0
- package/tools/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +119 -0
- package/tools/vds-scripts/git_orchestrator/README.md +280 -0
- package/tools/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +152 -0
- package/tools/vds-scripts/git_orchestrator/pyproject.toml +35 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +7 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +4 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +847 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +63 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +129 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +819 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +53 -0
- package/tools/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_cli_settings.py +21 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_integration.py +74 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_manifest.py +79 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_orchestrator.py +204 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_public_api.py +236 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_resilience.py +345 -0
- package/tools/vds-scripts/git_orchestrator/uv.lock +271 -0
- package/tools/vds-scripts/jira_orchestrator/README.md +770 -0
- package/tools/vds-scripts/jira_orchestrator/pyproject.toml +39 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +1 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +1320 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +2271 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +138 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +67 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +65 -0
- package/tools/vds-scripts/jira_orchestrator/tests/__init__.py +1 -0
- package/tools/vds-scripts/jira_orchestrator/tests/conftest.py +86 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +69 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +57 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +45 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +117 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +54 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +42 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +42 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +76 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +91 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +110 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +133 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +41 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_agile.py +256 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_application_properties.py +193 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_backlog.py +91 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +277 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_cli.py +106 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_components.py +106 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_config.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_dashboard.py +122 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +207 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_filter_management.py +333 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_links.py +257 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +171 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_link_types.py +314 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_parse_set.py +37 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_permissions.py +273 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_reindex.py +81 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_remote_links.py +254 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +170 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +114 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_user_management.py +226 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_version_management.py +339 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_watchers.py +101 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_worklog.py +223 -0
- package/tools/vds-scripts/jira_orchestrator/uv.lock +738 -0
- package/tools/vds-scripts/mcp_server/Dockerfile +34 -0
- package/tools/vds-scripts/mcp_server/README.md +140 -0
- package/tools/vds-scripts/mcp_server/pyproject.toml +42 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +4 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/config.py +36 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/server.py +66 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +14 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +47 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +59 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +71 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +63 -0
- package/tools/vds-scripts/mcp_server/tests/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/conftest.py +29 -0
- package/tools/vds-scripts/mcp_server/tests/unit/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +25 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +25 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_git_tools.py +32 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +32 -0
- package/tools/vds-scripts/mcp_server/tests/verification/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +40 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +37 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +47 -0
- package/tools/vds-scripts/mcp_server/uv.lock +1032 -0
- package/tools/vds-scripts/mypy.ini +5 -0
- package/tools/vds-scripts/pyproject.toml +29 -0
- package/tools/vds-scripts/repo-manifest.yaml +273 -0
- package/tools/vds-scripts/repo-manifest.yaml.example +25 -0
- package/tools/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +706 -0
- package/tools/vds-scripts/scripts/BRD-Validation-README.md +308 -0
- package/tools/vds-scripts/scripts/README.md +162 -0
- package/tools/vds-scripts/scripts/bootstrap_uv.sh +30 -0
- package/tools/vds-scripts/scripts/brd-validation-environment.json +51 -0
- package/tools/vds-scripts/scripts/brd-validation-test-results.json +13023 -0
- package/tools/vds-scripts/scripts/brd_coverage_report.json +276 -0
- package/tools/vds-scripts/scripts/create_memory_session.py +35 -0
- package/tools/vds-scripts/scripts/deployment/load_docker_images_offline.sh +90 -0
- package/tools/vds-scripts/scripts/final_completion_report.md +139 -0
- package/tools/vds-scripts/scripts/folder_structure_report.json +321 -0
- package/tools/vds-scripts/scripts/generate_completion_report.py +125 -0
- package/tools/vds-scripts/scripts/generate_intellij_modules.py +150 -0
- package/tools/vds-scripts/scripts/link_integrity_report.json +807 -0
- package/tools/vds-scripts/scripts/move_audit_artifact_pages.py +255 -0
- package/tools/vds-scripts/scripts/move_audit_artifact_pages_rest.py +165 -0
- package/tools/vds-scripts/scripts/move_wrong_dept_pages.py +216 -0
- package/tools/vds-scripts/scripts/save_intellij_memories.py +120 -0
- package/tools/vds-scripts/scripts/save_memories_to_vds_ai.py +83 -0
- package/tools/vds-scripts/scripts/save_memories_vds_style.py +129 -0
- package/tools/vds-scripts/scripts/search_intellij_memories.py +50 -0
- package/tools/vds-scripts/scripts/setup_intellij_workspace.py +65 -0
- package/tools/vds-scripts/scripts/target-state-automation/README.md +89 -0
- package/tools/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +27 -0
- package/tools/vds-scripts/scripts/target-state-automation/coordination.sh +114 -0
- package/tools/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/docs_root.sh +22 -0
- package/tools/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +22 -0
- package/tools/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +17 -0
- package/tools/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/sync_confluence.sh +30 -0
- package/tools/vds-scripts/scripts/target-state-automation/update_dependencies.sh +19 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_links.sh +86 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_markdown.sh +52 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_schemas.sh +26 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_structure.sh +98 -0
- package/tools/vds-scripts/scripts/update_modules_xml.py +190 -0
- package/tools/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +128 -0
- package/tools/vds-scripts/scripts/validate_brd_coverage.py +179 -0
- package/tools/vds-scripts/scripts/validate_folder_structure.py +240 -0
- package/tools/vds-scripts/scripts/validate_link_integrity.py +272 -0
- package/tools/vds-scripts/scripts/vds_sh_helpers.sh +180 -0
- package/tools/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +26 -0
- package/tools/vds-scripts/scripts/worktree_uv.sh +48 -0
- package/tools/vds-scripts/uv.lock +8 -0
- package/tools/vds-scripts/vds_cli/README.md +126 -0
- package/tools/vds-scripts/vds_cli/VERIFICATION_REPORT.md +41 -0
- package/tools/vds-scripts/vds_cli/pyproject.toml +38 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/__init__.py +3 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/cli.py +173 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +1203 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/env.py +41 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +3 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +198 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/router.py +93 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/sync_api.py +647 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/sync_service.py +266 -0
- package/tools/vds-scripts/vds_cli/tests/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/conftest.py +49 -0
- package/tools/vds-scripts/vds_cli/tests/unit/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_cli.py +143 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +422 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_env.py +51 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_router.py +72 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_sync_api.py +357 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_sync_service.py +160 -0
- package/tools/vds-scripts/vds_cli/tests/verification/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +33 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +35 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_jira_real.py +41 -0
- package/tools/vds-scripts/vds_cli/uv.lock +524 -0
- package/tools/vds-scripts/vds_cli_common/README.md +190 -0
- package/tools/vds-scripts/vds_cli_common/pyproject.toml +92 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +34 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +139 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +201 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +119 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +318 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +284 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +78 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +213 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +85 -0
- package/tools/vds-scripts/vds_cli_common/tests/__init__.py +1 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_completers.py +148 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_context.py +192 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_env.py +102 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_errors.py +186 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_output.py +229 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_paths.py +61 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_testing.py +138 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_version.py +64 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Script to update the IntelliJ IDEA modules.xml file with all VDS projects.
|
|
4
|
+
This makes it easier to work with the monorepo as a multi-project workspace.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import xml.etree.ElementTree as ET
|
|
9
|
+
|
|
10
|
+
# Define the project structure
|
|
11
|
+
PROJECT_GROUPS = {
|
|
12
|
+
"LEP-Project": [
|
|
13
|
+
"document-management",
|
|
14
|
+
"document-mgmt",
|
|
15
|
+
"file-management",
|
|
16
|
+
"lending-application-service",
|
|
17
|
+
"lending-basecode",
|
|
18
|
+
"lending-channel-mgmt",
|
|
19
|
+
"lending-cms-be",
|
|
20
|
+
"lending-cms-fe",
|
|
21
|
+
"lending-customer-screening-service",
|
|
22
|
+
"lending-customer-service",
|
|
23
|
+
"lending-decision-service",
|
|
24
|
+
"lending-ekyc-business",
|
|
25
|
+
"lending-ekyc-service",
|
|
26
|
+
"lending-event-backbone",
|
|
27
|
+
"lending-lender-process",
|
|
28
|
+
"lending-lender-service",
|
|
29
|
+
"lending-limit-mgmt",
|
|
30
|
+
"lending-miniapp-fe",
|
|
31
|
+
"lending-notification-service",
|
|
32
|
+
"lending-payment-service",
|
|
33
|
+
"lending-product-mgmt",
|
|
34
|
+
"lending-reconcile-service",
|
|
35
|
+
"lending-refund-service",
|
|
36
|
+
"lending-reminder-process"
|
|
37
|
+
],
|
|
38
|
+
"INSURANCE-Project": [
|
|
39
|
+
"insurance-authentication-sync-process",
|
|
40
|
+
"insurance-auto-underwriting-process",
|
|
41
|
+
"insurance-centralized-sync-service",
|
|
42
|
+
"insurance-claim-business",
|
|
43
|
+
"insurance-cms-be",
|
|
44
|
+
"insurance-common",
|
|
45
|
+
"insurance-customer-business",
|
|
46
|
+
"insurance-customer-webview",
|
|
47
|
+
"insurance-insurer-service",
|
|
48
|
+
"insurance-job-scheduler",
|
|
49
|
+
"insurance-notification-spi",
|
|
50
|
+
"insurance-ocr-service",
|
|
51
|
+
"insurance-payment-service",
|
|
52
|
+
"insurance-payment-service-v2",
|
|
53
|
+
"insurance-policy-business",
|
|
54
|
+
"insurance-promotion-business",
|
|
55
|
+
"insurance-proposal-business",
|
|
56
|
+
"insurance-reconcile-process",
|
|
57
|
+
"insurance-renewal-process",
|
|
58
|
+
"insurance-socialized-insurance-service",
|
|
59
|
+
"insurance-timeout-process"
|
|
60
|
+
],
|
|
61
|
+
"SAVING-Project": [
|
|
62
|
+
"saving-account",
|
|
63
|
+
"saving-business",
|
|
64
|
+
"saving-features-management",
|
|
65
|
+
"saving-job-management",
|
|
66
|
+
"saving-order",
|
|
67
|
+
"saving-promotion",
|
|
68
|
+
"saving-refund-process",
|
|
69
|
+
"saving-spi",
|
|
70
|
+
"saving-timeout-process",
|
|
71
|
+
"saving-transaction"
|
|
72
|
+
],
|
|
73
|
+
"EKYC-Project": [
|
|
74
|
+
"ekyc-business",
|
|
75
|
+
"ekyc-service"
|
|
76
|
+
],
|
|
77
|
+
"Infrastructure": [
|
|
78
|
+
"VDS-AI-Memory",
|
|
79
|
+
"vds-scripts"
|
|
80
|
+
],
|
|
81
|
+
"Documentation": [
|
|
82
|
+
"docs-nttc"
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
def update_modules_xml(vds_root):
|
|
87
|
+
"""
|
|
88
|
+
Update the IntelliJ IDEA modules.xml file with all projects.
|
|
89
|
+
"""
|
|
90
|
+
# Path to modules.xml
|
|
91
|
+
modules_xml_path = os.path.join(vds_root, ".idea", "modules.xml")
|
|
92
|
+
|
|
93
|
+
# Parse existing modules.xml
|
|
94
|
+
try:
|
|
95
|
+
tree = ET.parse(modules_xml_path)
|
|
96
|
+
root = tree.getroot()
|
|
97
|
+
except FileNotFoundError:
|
|
98
|
+
# Create new modules.xml if it doesn't exist
|
|
99
|
+
root = ET.Element("project", {"version": "4"})
|
|
100
|
+
component = ET.SubElement(root, "component", {"name": "ProjectModuleManager"})
|
|
101
|
+
modules = ET.SubElement(component, "modules")
|
|
102
|
+
tree = ET.ElementTree(root)
|
|
103
|
+
|
|
104
|
+
# Find the modules element
|
|
105
|
+
modules_element = root.find(".//modules")
|
|
106
|
+
if modules_element is None:
|
|
107
|
+
component = root.find(".//component[@name='ProjectModuleManager']")
|
|
108
|
+
if component is None:
|
|
109
|
+
component = ET.SubElement(root, "component", {"name": "ProjectModuleManager"})
|
|
110
|
+
modules_element = ET.SubElement(component, "modules")
|
|
111
|
+
|
|
112
|
+
# Clear existing VDS module entries (but keep the main vds.iml)
|
|
113
|
+
existing_modules = modules_element.findall("module")
|
|
114
|
+
for module in existing_modules:
|
|
115
|
+
file_path = module.get("filepath", "")
|
|
116
|
+
# Remove any existing VDS project module entries to avoid duplicates
|
|
117
|
+
if any(project_dir in file_path for project_dir in [
|
|
118
|
+
"LEP-project", "INSURANCE-project", "SAVING-project", "EKYC-project",
|
|
119
|
+
"VDS-AI-Memory", "vds-scripts", "docs-nttc"
|
|
120
|
+
]):
|
|
121
|
+
modules_element.remove(module)
|
|
122
|
+
|
|
123
|
+
# Add modules for each project
|
|
124
|
+
for group_name, projects in PROJECT_GROUPS.items():
|
|
125
|
+
for project in projects:
|
|
126
|
+
# Construct the module file path
|
|
127
|
+
if project in ["VDS-AI-Memory", "vds-scripts", "docs-nttc"]:
|
|
128
|
+
# These are top-level directories
|
|
129
|
+
module_file_path = f"$PROJECT_DIR$/{project}/.idea/{project}.iml"
|
|
130
|
+
module_file_url = f"file://$PROJECT_DIR$/{project}/.idea/{project}.iml"
|
|
131
|
+
else:
|
|
132
|
+
# These are in project directories
|
|
133
|
+
module_file_path = f"$PROJECT_DIR$/{group_name.split('-')[0]}-project/{project}/{project}.iml"
|
|
134
|
+
module_file_url = f"file://$PROJECT_DIR$/{group_name.split('-')[0]}-project/{project}/{project}.iml"
|
|
135
|
+
|
|
136
|
+
# Check if module entry already exists
|
|
137
|
+
existing = False
|
|
138
|
+
for module in modules_element.findall("module"):
|
|
139
|
+
if module.get("filepath") == module_file_path:
|
|
140
|
+
existing = True
|
|
141
|
+
break
|
|
142
|
+
|
|
143
|
+
# Add module entry if it doesn't exist
|
|
144
|
+
if not existing:
|
|
145
|
+
module_element = ET.SubElement(modules_element, "module", {
|
|
146
|
+
"fileurl": module_file_url,
|
|
147
|
+
"filepath": module_file_path,
|
|
148
|
+
"group": group_name
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
# Write updated modules.xml with proper formatting
|
|
152
|
+
# Create a temporary file with proper formatting
|
|
153
|
+
temp_file = modules_xml_path + ".tmp"
|
|
154
|
+
tree.write(temp_file, encoding="UTF-8", xml_declaration=True)
|
|
155
|
+
|
|
156
|
+
# Read and format the XML properly
|
|
157
|
+
with open(temp_file, 'r') as f:
|
|
158
|
+
content = f.read()
|
|
159
|
+
|
|
160
|
+
# Parse and reformat with proper indentation
|
|
161
|
+
import xml.dom.minidom
|
|
162
|
+
dom = xml.dom.minidom.parseString(content)
|
|
163
|
+
pretty_xml = dom.toprettyxml(indent=" ")
|
|
164
|
+
|
|
165
|
+
# Remove extra blank lines
|
|
166
|
+
lines = [line for line in pretty_xml.split('\n') if line.strip()]
|
|
167
|
+
pretty_xml = '\n'.join(lines)
|
|
168
|
+
|
|
169
|
+
with open(modules_xml_path, 'w') as f:
|
|
170
|
+
f.write(pretty_xml)
|
|
171
|
+
|
|
172
|
+
# Remove temporary file
|
|
173
|
+
os.remove(temp_file)
|
|
174
|
+
|
|
175
|
+
print(f"Updated modules.xml: {modules_xml_path}")
|
|
176
|
+
|
|
177
|
+
def main():
|
|
178
|
+
"""
|
|
179
|
+
Main function to update modules.xml.
|
|
180
|
+
"""
|
|
181
|
+
vds_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
|
|
182
|
+
|
|
183
|
+
print(f"Updating IntelliJ IDEA modules.xml in: {vds_root}")
|
|
184
|
+
|
|
185
|
+
update_modules_xml(vds_root)
|
|
186
|
+
|
|
187
|
+
print("modules.xml update complete!")
|
|
188
|
+
|
|
189
|
+
if __name__ == "__main__":
|
|
190
|
+
main()
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Scripts UV Workspace Alignment Verification Note
|
|
2
|
+
|
|
3
|
+
Date: 2026-03-25
|
|
4
|
+
Branch: `feat/scripts-uv-workspace-alignment`
|
|
5
|
+
Scope: helper/bootstrap/script-shell alignment for `WHO-project/vds-scripts/scripts/`
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
This note records the bounded verification run for the current implementation lane.
|
|
10
|
+
The purpose is to prove that the updated shell contract works across the main
|
|
11
|
+
contexts called out by the spec:
|
|
12
|
+
|
|
13
|
+
- clean shell execution
|
|
14
|
+
- polluted parent environment execution
|
|
15
|
+
- non-standard nested caller path execution
|
|
16
|
+
|
|
17
|
+
It also records one helper portability fix discovered during verification.
|
|
18
|
+
|
|
19
|
+
## Verified contract
|
|
20
|
+
|
|
21
|
+
The current intended contract is:
|
|
22
|
+
|
|
23
|
+
- maintained scripts use `scripts/worktree_uv.sh` through `scripts/vds_sh_helpers.sh`
|
|
24
|
+
- helper-driven invocations bind the workspace explicitly with `--directory <vds-scripts-root>`
|
|
25
|
+
- helper-driven package targeting resolves workspace member directories to uv project names for `--package`
|
|
26
|
+
- canonical integrated bootstrap assumes Python 3.14+
|
|
27
|
+
|
|
28
|
+
## Three-context regression matrix
|
|
29
|
+
|
|
30
|
+
### Context 1 ā clean shell
|
|
31
|
+
|
|
32
|
+
Command class verified:
|
|
33
|
+
- helper-driven spec package help surface
|
|
34
|
+
|
|
35
|
+
Observed result:
|
|
36
|
+
- passed
|
|
37
|
+
|
|
38
|
+
Notes:
|
|
39
|
+
- `vds_uv_run_package spec_orchestrator vds-spec --help` succeeded from the implementation worktree with no inherited environment state.
|
|
40
|
+
|
|
41
|
+
### Context 2 ā polluted parent environment
|
|
42
|
+
|
|
43
|
+
Command class verified:
|
|
44
|
+
- helper-driven routed CLI command with fake parent environment values
|
|
45
|
+
|
|
46
|
+
Injected environment:
|
|
47
|
+
- `VIRTUAL_ENV=/tmp/fake-venv`
|
|
48
|
+
- `UV_PROJECT_ENVIRONMENT=/tmp/fake-project-env`
|
|
49
|
+
- `CONDA_PREFIX=/tmp/fake-conda`
|
|
50
|
+
|
|
51
|
+
Observed result:
|
|
52
|
+
- passed
|
|
53
|
+
|
|
54
|
+
Notes:
|
|
55
|
+
- `vds_uv_run_package vds_cli vds-cli doctor` succeeded.
|
|
56
|
+
- The wrapper/helper path remained functional despite the polluted parent environment.
|
|
57
|
+
|
|
58
|
+
### Context 3 ā non-standard nested caller path
|
|
59
|
+
|
|
60
|
+
Command class verified:
|
|
61
|
+
- targeted sync helper script launched from `scripts/target-state-automation/`
|
|
62
|
+
|
|
63
|
+
Observed result:
|
|
64
|
+
- passed
|
|
65
|
+
|
|
66
|
+
Notes:
|
|
67
|
+
- `UV_SYNC_FLAGS=--dry-run ./update_dependencies.sh` succeeded when launched from the nested target-state-automation directory.
|
|
68
|
+
- This confirms root resolution and wrapper binding do not depend on the older hardcoded 4-level traversal pattern.
|
|
69
|
+
|
|
70
|
+
## Additional bounded verification already passed in this lane
|
|
71
|
+
|
|
72
|
+
Previously verified in this worktree:
|
|
73
|
+
|
|
74
|
+
- helper-driven `vds-spec --help`
|
|
75
|
+
- helper-driven `vds-cli status`
|
|
76
|
+
- helper-driven `vds-cli doctor`
|
|
77
|
+
- helper-driven `vds-markdown --help`
|
|
78
|
+
- targeted bootstrap dry-run
|
|
79
|
+
- full bootstrap dry-run
|
|
80
|
+
- updated shell scripts syntax-check cleanly
|
|
81
|
+
|
|
82
|
+
## Helper portability fix discovered during verification
|
|
83
|
+
|
|
84
|
+
### Issue
|
|
85
|
+
|
|
86
|
+
The initial helper implementation used host `python3` plus `tomllib` to resolve
|
|
87
|
+
workspace member directory names to uv package names.
|
|
88
|
+
|
|
89
|
+
That failed in a shell path where `python3` did not provide `tomllib`.
|
|
90
|
+
|
|
91
|
+
### Fix
|
|
92
|
+
|
|
93
|
+
The helper was updated to parse `[project].name` from member `pyproject.toml`
|
|
94
|
+
using shell/awk logic instead of host Python.
|
|
95
|
+
|
|
96
|
+
### Outcome
|
|
97
|
+
|
|
98
|
+
Package-name resolution no longer depends on a host Python 3.11+ runtime just to
|
|
99
|
+
run the shell helper layer.
|
|
100
|
+
|
|
101
|
+
## Known follow-up outside helper-layer closure
|
|
102
|
+
|
|
103
|
+
### `scripts/target-state-automation/validate_schemas.sh`
|
|
104
|
+
|
|
105
|
+
The script now routes through the helper correctly, but the underlying schema
|
|
106
|
+
command shape appears stale relative to the current `vds-cli schema` /
|
|
107
|
+
`vds-schema-convert` compatibility surface.
|
|
108
|
+
|
|
109
|
+
The script has therefore been updated to fail explicitly and truthfully with a
|
|
110
|
+
clear follow-up message instead of forwarding operators into a stale command and
|
|
111
|
+
producing a confusing CLI option error.
|
|
112
|
+
|
|
113
|
+
This remains classified as:
|
|
114
|
+
- schema-command drift follow-up
|
|
115
|
+
- not a helper-layer regression
|
|
116
|
+
|
|
117
|
+
## Closure assessment for this lane
|
|
118
|
+
|
|
119
|
+
For the shell/uv alignment scope covered by this branch:
|
|
120
|
+
- helper consolidation: complete
|
|
121
|
+
- bootstrap alignment: complete
|
|
122
|
+
- maintained script migration in scope: complete
|
|
123
|
+
- docs alignment in scope: complete
|
|
124
|
+
- three-context regression matrix: complete
|
|
125
|
+
|
|
126
|
+
This branch is ready for review/merge for the intended helper/bootstrap/docs
|
|
127
|
+
alignment scope, with `validate_schemas.sh` command-surface drift explicitly
|
|
128
|
+
left as separate follow-up work.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
BRD Coverage Validation Script
|
|
4
|
+
Validates that all required BRD sections (3.1-3.5 and 4.1-4.11) are mapped to services.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Dict, List, Set
|
|
11
|
+
import json
|
|
12
|
+
|
|
13
|
+
# Required BRD sections
|
|
14
|
+
REQUIRED_BRD_SECTIONS = [
|
|
15
|
+
# Customer features
|
|
16
|
+
"3.1", "3.2", "3.3", "3.4", "3.5",
|
|
17
|
+
# Admin features
|
|
18
|
+
"4.1", "4.2", "4.3", "4.4", "4.5", "4.6", "4.7", "4.8", "4.9", "4.10", "4.11"
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
# High-priority services with known BRD mappings
|
|
22
|
+
HIGH_PRIORITY_SERVICES = {
|
|
23
|
+
"insurance-policy-business": ["3.4", "4.5"],
|
|
24
|
+
"insurance-proposal-business": ["3.3.5", "3.3.6", "3.3.7", "3.3.8"],
|
|
25
|
+
"insurance-claim-business": ["3.5", "4.6"],
|
|
26
|
+
"insurance-customer-business": ["3.1", "3.2", "4.4"],
|
|
27
|
+
"insurance-product-catalog": ["4.3", "4.3.1"],
|
|
28
|
+
"insurance-rating-engine": ["3.3.5", "4.3.3"],
|
|
29
|
+
"insurance-renewal-process": ["3.4.2", "3.4.3", "3.4.4"]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
def find_brd_references_in_file(file_path: Path) -> Set[str]:
|
|
33
|
+
"""Find all BRD section references in a file."""
|
|
34
|
+
brd_refs = set()
|
|
35
|
+
try:
|
|
36
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
37
|
+
content = f.read()
|
|
38
|
+
|
|
39
|
+
# Pattern to match BRD references like "3.1", "4.5", "3.3.5", etc.
|
|
40
|
+
pattern = r'BRD.*?([34]\.\d+(?:\.\d+)*)'
|
|
41
|
+
matches = re.findall(pattern, content, re.IGNORECASE)
|
|
42
|
+
|
|
43
|
+
for match in matches:
|
|
44
|
+
brd_refs.add(match)
|
|
45
|
+
|
|
46
|
+
except Exception as e:
|
|
47
|
+
print(f"Error reading {file_path}: {e}")
|
|
48
|
+
|
|
49
|
+
return brd_refs
|
|
50
|
+
|
|
51
|
+
def scan_documentation_for_brd_refs(docs_root: Path) -> Dict[str, Set[str]]:
|
|
52
|
+
"""Scan all documentation files for BRD references."""
|
|
53
|
+
brd_coverage = {}
|
|
54
|
+
|
|
55
|
+
# Scan markdown files
|
|
56
|
+
for md_file in docs_root.rglob("*.md"):
|
|
57
|
+
if md_file.is_file():
|
|
58
|
+
refs = find_brd_references_in_file(md_file)
|
|
59
|
+
if refs:
|
|
60
|
+
relative_path = str(md_file.relative_to(docs_root))
|
|
61
|
+
brd_coverage[relative_path] = refs
|
|
62
|
+
|
|
63
|
+
return brd_coverage
|
|
64
|
+
|
|
65
|
+
def validate_brd_coverage() -> Dict:
|
|
66
|
+
"""Validate BRD coverage completeness."""
|
|
67
|
+
|
|
68
|
+
# Get the documentation root
|
|
69
|
+
script_dir = Path(__file__).parent
|
|
70
|
+
docs_root = script_dir.parent / "insurance-document"
|
|
71
|
+
|
|
72
|
+
if not docs_root.exists():
|
|
73
|
+
docs_root = script_dir.parent.parent / "insurance-document"
|
|
74
|
+
|
|
75
|
+
if not docs_root.exists():
|
|
76
|
+
print(f"ā Documentation root not found at {docs_root}")
|
|
77
|
+
return {"error": "Documentation root not found"}
|
|
78
|
+
|
|
79
|
+
print(f"š Scanning documentation at: {docs_root}")
|
|
80
|
+
|
|
81
|
+
# Scan for BRD references
|
|
82
|
+
brd_coverage = scan_documentation_for_brd_refs(docs_root)
|
|
83
|
+
|
|
84
|
+
# Collect all found BRD sections
|
|
85
|
+
found_sections = set()
|
|
86
|
+
for file_refs in brd_coverage.values():
|
|
87
|
+
found_sections.update(file_refs)
|
|
88
|
+
|
|
89
|
+
# Check coverage
|
|
90
|
+
required_sections = set(REQUIRED_BRD_SECTIONS)
|
|
91
|
+
covered_sections = set()
|
|
92
|
+
|
|
93
|
+
# Map found sections to required sections
|
|
94
|
+
for found in found_sections:
|
|
95
|
+
for required in required_sections:
|
|
96
|
+
if found.startswith(required):
|
|
97
|
+
covered_sections.add(required)
|
|
98
|
+
|
|
99
|
+
missing_sections = required_sections - covered_sections
|
|
100
|
+
|
|
101
|
+
# Generate report
|
|
102
|
+
report = {
|
|
103
|
+
"total_required": len(required_sections),
|
|
104
|
+
"total_covered": len(covered_sections),
|
|
105
|
+
"coverage_percentage": (len(covered_sections) / len(required_sections)) * 100,
|
|
106
|
+
"covered_sections": sorted(list(covered_sections)),
|
|
107
|
+
"missing_sections": sorted(list(missing_sections)),
|
|
108
|
+
"found_references": dict((k, sorted(list(v))) for k, v in brd_coverage.items()),
|
|
109
|
+
"high_priority_services": HIGH_PRIORITY_SERVICES
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return report
|
|
113
|
+
|
|
114
|
+
def print_coverage_report(report: Dict):
|
|
115
|
+
"""Print a formatted coverage report."""
|
|
116
|
+
|
|
117
|
+
if "error" in report:
|
|
118
|
+
print(f"ā {report['error']}")
|
|
119
|
+
return
|
|
120
|
+
|
|
121
|
+
print("\n" + "="*60)
|
|
122
|
+
print("š BRD COVERAGE VALIDATION REPORT")
|
|
123
|
+
print("="*60)
|
|
124
|
+
|
|
125
|
+
print(f"\nš Coverage Summary:")
|
|
126
|
+
print(f" Total Required Sections: {report['total_required']}")
|
|
127
|
+
print(f" Covered Sections: {report['total_covered']}")
|
|
128
|
+
print(f" Coverage Percentage: {report['coverage_percentage']:.1f}%")
|
|
129
|
+
|
|
130
|
+
if report['coverage_percentage'] >= 100:
|
|
131
|
+
print(" ā
100% BRD coverage achieved!")
|
|
132
|
+
elif report['coverage_percentage'] >= 80:
|
|
133
|
+
print(" ā ļø Good coverage, but some sections missing")
|
|
134
|
+
else:
|
|
135
|
+
print(" ā Insufficient BRD coverage")
|
|
136
|
+
|
|
137
|
+
print(f"\nā
Covered Sections ({len(report['covered_sections'])}):")
|
|
138
|
+
for section in report['covered_sections']:
|
|
139
|
+
print(f" ⢠{section}")
|
|
140
|
+
|
|
141
|
+
if report['missing_sections']:
|
|
142
|
+
print(f"\nā Missing Sections ({len(report['missing_sections'])}):")
|
|
143
|
+
for section in report['missing_sections']:
|
|
144
|
+
print(f" ⢠{section}")
|
|
145
|
+
|
|
146
|
+
print(f"\nš High-Priority Service Mappings:")
|
|
147
|
+
for service, sections in report['high_priority_services'].items():
|
|
148
|
+
print(f" ⢠{service}: {', '.join(sections)}")
|
|
149
|
+
|
|
150
|
+
print(f"\nš Files with BRD References ({len(report['found_references'])}):")
|
|
151
|
+
for file_path, refs in list(report['found_references'].items())[:10]: # Show first 10
|
|
152
|
+
print(f" ⢠{file_path}: {', '.join(refs)}")
|
|
153
|
+
|
|
154
|
+
if len(report['found_references']) > 10:
|
|
155
|
+
print(f" ... and {len(report['found_references']) - 10} more files")
|
|
156
|
+
|
|
157
|
+
if __name__ == "__main__":
|
|
158
|
+
print("š Starting BRD Coverage Validation...")
|
|
159
|
+
report = validate_brd_coverage()
|
|
160
|
+
print_coverage_report(report)
|
|
161
|
+
|
|
162
|
+
# Save report to file
|
|
163
|
+
script_dir = Path(__file__).parent
|
|
164
|
+
report_file = script_dir / "brd_coverage_report.json"
|
|
165
|
+
|
|
166
|
+
with open(report_file, 'w') as f:
|
|
167
|
+
json.dump(report, f, indent=2)
|
|
168
|
+
|
|
169
|
+
print(f"\nš¾ Report saved to: {report_file}")
|
|
170
|
+
|
|
171
|
+
# Exit with appropriate code
|
|
172
|
+
if "error" in report:
|
|
173
|
+
exit(1)
|
|
174
|
+
elif report['coverage_percentage'] < 100:
|
|
175
|
+
print(f"\nā ļø BRD coverage incomplete: {report['coverage_percentage']:.1f}%")
|
|
176
|
+
exit(1)
|
|
177
|
+
else:
|
|
178
|
+
print(f"\nā
BRD coverage validation passed: {report['coverage_percentage']:.1f}%")
|
|
179
|
+
exit(0)
|