@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.
Files changed (303) hide show
  1. package/package.json +2 -2
  2. package/src/global.js +70 -10
  3. package/tools/skills/vds-scripts-skill/.openskills.json +6 -0
  4. package/tools/skills/vds-scripts-skill/QUALITY.md +44 -0
  5. package/tools/skills/vds-scripts-skill/SKILL.md +135 -0
  6. package/tools/skills/vds-scripts-skill/references/audit-commands.md +171 -0
  7. package/tools/skills/vds-scripts-skill/references/capability-index.md +34 -0
  8. package/tools/skills/vds-scripts-skill/references/development-commands.md +12 -0
  9. package/tools/skills/vds-scripts-skill/references/google-sheets.md +73 -0
  10. package/tools/skills/vds-scripts-skill/references/integration-commands.md +17 -0
  11. package/tools/skills/vds-scripts-skill/references/platform-bootstrap.md +31 -0
  12. package/tools/skills/vds-scripts-skill/references/specialist-routing.md +14 -0
  13. package/tools/skills/vds-scripts-skill/references/validation-commands.md +15 -0
  14. package/tools/skills/vsaf-build/SKILL.md +32 -2
  15. package/tools/skills/vsaf-ship/SKILL.md +41 -10
  16. package/tools/skills/vsaf-test/SKILL.md +8 -0
  17. package/tools/vds-scripts/.mcp.json +11 -0
  18. package/tools/vds-scripts/.secrets.baseline +133 -0
  19. package/tools/vds-scripts/AGENTS.md +152 -0
  20. package/tools/vds-scripts/CLAUDE.md +101 -0
  21. package/tools/vds-scripts/CLI_COMMAND_OPTIMIZATION.md +156 -0
  22. package/tools/vds-scripts/PACKAGE_P125B_IMPLEMENTATION_SUMMARY.md +131 -0
  23. package/tools/vds-scripts/PROJECT_COMPLETION_SUMMARY.md +45 -0
  24. package/tools/vds-scripts/README.md +97 -0
  25. package/tools/vds-scripts/bitbucket_manifest_mapping.toml +34 -0
  26. package/tools/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +258 -0
  27. package/tools/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +393 -0
  28. package/tools/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +61 -0
  29. package/tools/vds-scripts/bitbucket_orchestrator/FEATURES.md +908 -0
  30. package/tools/vds-scripts/bitbucket_orchestrator/README.md +687 -0
  31. package/tools/vds-scripts/bitbucket_orchestrator/pyproject.toml +40 -0
  32. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +20 -0
  33. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +657 -0
  34. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +2108 -0
  35. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +2534 -0
  36. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +171 -0
  37. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +67 -0
  38. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +185 -0
  39. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +244 -0
  40. package/tools/vds-scripts/bitbucket_orchestrator/tests/__init__.py +8 -0
  41. package/tools/vds-scripts/bitbucket_orchestrator/tests/conftest.py +65 -0
  42. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +151 -0
  43. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +546 -0
  44. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +145 -0
  45. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +115 -0
  46. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client.py +157 -0
  47. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +79 -0
  48. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +163 -0
  49. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +32 -0
  50. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +194 -0
  51. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +164 -0
  52. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +179 -0
  53. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +119 -0
  54. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +156 -0
  55. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code.py +98 -0
  56. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +282 -0
  57. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +335 -0
  58. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +147 -0
  59. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_config.py +131 -0
  60. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +352 -0
  61. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +371 -0
  62. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +204 -0
  63. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +261 -0
  64. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +270 -0
  65. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +204 -0
  66. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +334 -0
  67. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +343 -0
  68. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +270 -0
  69. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +189 -0
  70. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +233 -0
  71. package/tools/vds-scripts/bitbucket_orchestrator/uv.lock +742 -0
  72. package/tools/vds-scripts/confluence_orchestrator/Dockerfile +19 -0
  73. package/tools/vds-scripts/confluence_orchestrator/README.md +412 -0
  74. package/tools/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +127 -0
  75. package/tools/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +108 -0
  76. package/tools/vds-scripts/confluence_orchestrator/pyproject.toml +48 -0
  77. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +20 -0
  78. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +2532 -0
  79. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +175 -0
  80. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +290 -0
  81. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +94 -0
  82. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +1835 -0
  83. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +80 -0
  84. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +109 -0
  85. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +1114 -0
  86. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +165 -0
  87. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +78 -0
  88. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +121 -0
  89. package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +213 -0
  90. package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +305 -0
  91. package/tools/vds-scripts/confluence_orchestrator/sync_png_attachments.py +305 -0
  92. package/tools/vds-scripts/confluence_orchestrator/tests/__init__.py +0 -0
  93. package/tools/vds-scripts/confluence_orchestrator/tests/conftest.py +8 -0
  94. package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +224 -0
  95. package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +188 -0
  96. package/tools/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +247 -0
  97. package/tools/vds-scripts/confluence_orchestrator/tests/test_cli.py +499 -0
  98. package/tools/vds-scripts/confluence_orchestrator/tests/test_config.py +83 -0
  99. package/tools/vds-scripts/confluence_orchestrator/tests/test_content.py +186 -0
  100. package/tools/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +27 -0
  101. package/tools/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +2250 -0
  102. package/tools/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +223 -0
  103. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing.py +71 -0
  104. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +37 -0
  105. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +44 -0
  106. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +49 -0
  107. package/tools/vds-scripts/confluence_orchestrator/tests/test_export.py +230 -0
  108. package/tools/vds-scripts/confluence_orchestrator/tests/test_history.py +204 -0
  109. package/tools/vds-scripts/confluence_orchestrator/tests/test_http.py +117 -0
  110. package/tools/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +91 -0
  111. package/tools/vds-scripts/confluence_orchestrator/tests/test_reporting.py +24 -0
  112. package/tools/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +34 -0
  113. package/tools/vds-scripts/confluence_orchestrator/tests/test_space_management.py +237 -0
  114. package/tools/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +332 -0
  115. package/tools/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +388 -0
  116. package/tools/vds-scripts/confluence_orchestrator/uv.lock +1023 -0
  117. package/tools/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +119 -0
  118. package/tools/vds-scripts/git_orchestrator/README.md +280 -0
  119. package/tools/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +152 -0
  120. package/tools/vds-scripts/git_orchestrator/pyproject.toml +35 -0
  121. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +7 -0
  122. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +4 -0
  123. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +847 -0
  124. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +63 -0
  125. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +129 -0
  126. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +819 -0
  127. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +53 -0
  128. package/tools/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
  129. package/tools/vds-scripts/git_orchestrator/tests/test_cli_settings.py +21 -0
  130. package/tools/vds-scripts/git_orchestrator/tests/test_integration.py +74 -0
  131. package/tools/vds-scripts/git_orchestrator/tests/test_manifest.py +79 -0
  132. package/tools/vds-scripts/git_orchestrator/tests/test_orchestrator.py +204 -0
  133. package/tools/vds-scripts/git_orchestrator/tests/test_public_api.py +236 -0
  134. package/tools/vds-scripts/git_orchestrator/tests/test_resilience.py +345 -0
  135. package/tools/vds-scripts/git_orchestrator/uv.lock +271 -0
  136. package/tools/vds-scripts/jira_orchestrator/README.md +770 -0
  137. package/tools/vds-scripts/jira_orchestrator/pyproject.toml +39 -0
  138. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +1 -0
  139. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +1320 -0
  140. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +2271 -0
  141. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +138 -0
  142. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +67 -0
  143. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +65 -0
  144. package/tools/vds-scripts/jira_orchestrator/tests/__init__.py +1 -0
  145. package/tools/vds-scripts/jira_orchestrator/tests/conftest.py +86 -0
  146. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
  147. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +69 -0
  148. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +57 -0
  149. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +45 -0
  150. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +117 -0
  151. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +54 -0
  152. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +42 -0
  153. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +42 -0
  154. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +76 -0
  155. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +91 -0
  156. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +110 -0
  157. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +133 -0
  158. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +41 -0
  159. package/tools/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +164 -0
  160. package/tools/vds-scripts/jira_orchestrator/tests/test_agile.py +256 -0
  161. package/tools/vds-scripts/jira_orchestrator/tests/test_application_properties.py +193 -0
  162. package/tools/vds-scripts/jira_orchestrator/tests/test_backlog.py +91 -0
  163. package/tools/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +277 -0
  164. package/tools/vds-scripts/jira_orchestrator/tests/test_cli.py +106 -0
  165. package/tools/vds-scripts/jira_orchestrator/tests/test_components.py +106 -0
  166. package/tools/vds-scripts/jira_orchestrator/tests/test_config.py +164 -0
  167. package/tools/vds-scripts/jira_orchestrator/tests/test_dashboard.py +122 -0
  168. package/tools/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +207 -0
  169. package/tools/vds-scripts/jira_orchestrator/tests/test_filter_management.py +333 -0
  170. package/tools/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +164 -0
  171. package/tools/vds-scripts/jira_orchestrator/tests/test_issue_links.py +257 -0
  172. package/tools/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +171 -0
  173. package/tools/vds-scripts/jira_orchestrator/tests/test_link_types.py +314 -0
  174. package/tools/vds-scripts/jira_orchestrator/tests/test_parse_set.py +37 -0
  175. package/tools/vds-scripts/jira_orchestrator/tests/test_permissions.py +273 -0
  176. package/tools/vds-scripts/jira_orchestrator/tests/test_reindex.py +81 -0
  177. package/tools/vds-scripts/jira_orchestrator/tests/test_remote_links.py +254 -0
  178. package/tools/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +170 -0
  179. package/tools/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +114 -0
  180. package/tools/vds-scripts/jira_orchestrator/tests/test_user_management.py +226 -0
  181. package/tools/vds-scripts/jira_orchestrator/tests/test_version_management.py +339 -0
  182. package/tools/vds-scripts/jira_orchestrator/tests/test_watchers.py +101 -0
  183. package/tools/vds-scripts/jira_orchestrator/tests/test_worklog.py +223 -0
  184. package/tools/vds-scripts/jira_orchestrator/uv.lock +738 -0
  185. package/tools/vds-scripts/mcp_server/Dockerfile +34 -0
  186. package/tools/vds-scripts/mcp_server/README.md +140 -0
  187. package/tools/vds-scripts/mcp_server/pyproject.toml +42 -0
  188. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +4 -0
  189. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/config.py +36 -0
  190. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/server.py +66 -0
  191. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +14 -0
  192. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +47 -0
  193. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +59 -0
  194. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +71 -0
  195. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +63 -0
  196. package/tools/vds-scripts/mcp_server/tests/__init__.py +2 -0
  197. package/tools/vds-scripts/mcp_server/tests/conftest.py +29 -0
  198. package/tools/vds-scripts/mcp_server/tests/unit/__init__.py +2 -0
  199. package/tools/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +25 -0
  200. package/tools/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +25 -0
  201. package/tools/vds-scripts/mcp_server/tests/unit/test_git_tools.py +32 -0
  202. package/tools/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +32 -0
  203. package/tools/vds-scripts/mcp_server/tests/verification/__init__.py +2 -0
  204. package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +40 -0
  205. package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +37 -0
  206. package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +47 -0
  207. package/tools/vds-scripts/mcp_server/uv.lock +1032 -0
  208. package/tools/vds-scripts/mypy.ini +5 -0
  209. package/tools/vds-scripts/pyproject.toml +29 -0
  210. package/tools/vds-scripts/repo-manifest.yaml +273 -0
  211. package/tools/vds-scripts/repo-manifest.yaml.example +25 -0
  212. package/tools/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +706 -0
  213. package/tools/vds-scripts/scripts/BRD-Validation-README.md +308 -0
  214. package/tools/vds-scripts/scripts/README.md +162 -0
  215. package/tools/vds-scripts/scripts/bootstrap_uv.sh +30 -0
  216. package/tools/vds-scripts/scripts/brd-validation-environment.json +51 -0
  217. package/tools/vds-scripts/scripts/brd-validation-test-results.json +13023 -0
  218. package/tools/vds-scripts/scripts/brd_coverage_report.json +276 -0
  219. package/tools/vds-scripts/scripts/create_memory_session.py +35 -0
  220. package/tools/vds-scripts/scripts/deployment/load_docker_images_offline.sh +90 -0
  221. package/tools/vds-scripts/scripts/final_completion_report.md +139 -0
  222. package/tools/vds-scripts/scripts/folder_structure_report.json +321 -0
  223. package/tools/vds-scripts/scripts/generate_completion_report.py +125 -0
  224. package/tools/vds-scripts/scripts/generate_intellij_modules.py +150 -0
  225. package/tools/vds-scripts/scripts/link_integrity_report.json +807 -0
  226. package/tools/vds-scripts/scripts/move_audit_artifact_pages.py +255 -0
  227. package/tools/vds-scripts/scripts/move_audit_artifact_pages_rest.py +165 -0
  228. package/tools/vds-scripts/scripts/move_wrong_dept_pages.py +216 -0
  229. package/tools/vds-scripts/scripts/save_intellij_memories.py +120 -0
  230. package/tools/vds-scripts/scripts/save_memories_to_vds_ai.py +83 -0
  231. package/tools/vds-scripts/scripts/save_memories_vds_style.py +129 -0
  232. package/tools/vds-scripts/scripts/search_intellij_memories.py +50 -0
  233. package/tools/vds-scripts/scripts/setup_intellij_workspace.py +65 -0
  234. package/tools/vds-scripts/scripts/target-state-automation/README.md +89 -0
  235. package/tools/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +27 -0
  236. package/tools/vds-scripts/scripts/target-state-automation/coordination.sh +114 -0
  237. package/tools/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +25 -0
  238. package/tools/vds-scripts/scripts/target-state-automation/docs_root.sh +22 -0
  239. package/tools/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +22 -0
  240. package/tools/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +25 -0
  241. package/tools/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +17 -0
  242. package/tools/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +25 -0
  243. package/tools/vds-scripts/scripts/target-state-automation/sync_confluence.sh +30 -0
  244. package/tools/vds-scripts/scripts/target-state-automation/update_dependencies.sh +19 -0
  245. package/tools/vds-scripts/scripts/target-state-automation/validate_links.sh +86 -0
  246. package/tools/vds-scripts/scripts/target-state-automation/validate_markdown.sh +52 -0
  247. package/tools/vds-scripts/scripts/target-state-automation/validate_schemas.sh +26 -0
  248. package/tools/vds-scripts/scripts/target-state-automation/validate_structure.sh +98 -0
  249. package/tools/vds-scripts/scripts/update_modules_xml.py +190 -0
  250. package/tools/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +128 -0
  251. package/tools/vds-scripts/scripts/validate_brd_coverage.py +179 -0
  252. package/tools/vds-scripts/scripts/validate_folder_structure.py +240 -0
  253. package/tools/vds-scripts/scripts/validate_link_integrity.py +272 -0
  254. package/tools/vds-scripts/scripts/vds_sh_helpers.sh +180 -0
  255. package/tools/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +26 -0
  256. package/tools/vds-scripts/scripts/worktree_uv.sh +48 -0
  257. package/tools/vds-scripts/uv.lock +8 -0
  258. package/tools/vds-scripts/vds_cli/README.md +126 -0
  259. package/tools/vds-scripts/vds_cli/VERIFICATION_REPORT.md +41 -0
  260. package/tools/vds-scripts/vds_cli/pyproject.toml +38 -0
  261. package/tools/vds-scripts/vds_cli/src/vds_cli/__init__.py +3 -0
  262. package/tools/vds-scripts/vds_cli/src/vds_cli/cli.py +173 -0
  263. package/tools/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +1203 -0
  264. package/tools/vds-scripts/vds_cli/src/vds_cli/env.py +41 -0
  265. package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +3 -0
  266. package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +198 -0
  267. package/tools/vds-scripts/vds_cli/src/vds_cli/router.py +93 -0
  268. package/tools/vds-scripts/vds_cli/src/vds_cli/sync_api.py +647 -0
  269. package/tools/vds-scripts/vds_cli/src/vds_cli/sync_service.py +266 -0
  270. package/tools/vds-scripts/vds_cli/tests/__init__.py +2 -0
  271. package/tools/vds-scripts/vds_cli/tests/conftest.py +49 -0
  272. package/tools/vds-scripts/vds_cli/tests/unit/__init__.py +2 -0
  273. package/tools/vds-scripts/vds_cli/tests/unit/test_cli.py +143 -0
  274. package/tools/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +422 -0
  275. package/tools/vds-scripts/vds_cli/tests/unit/test_env.py +51 -0
  276. package/tools/vds-scripts/vds_cli/tests/unit/test_router.py +72 -0
  277. package/tools/vds-scripts/vds_cli/tests/unit/test_sync_api.py +357 -0
  278. package/tools/vds-scripts/vds_cli/tests/unit/test_sync_service.py +160 -0
  279. package/tools/vds-scripts/vds_cli/tests/verification/__init__.py +2 -0
  280. package/tools/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +33 -0
  281. package/tools/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +35 -0
  282. package/tools/vds-scripts/vds_cli/tests/verification/test_jira_real.py +41 -0
  283. package/tools/vds-scripts/vds_cli/uv.lock +524 -0
  284. package/tools/vds-scripts/vds_cli_common/README.md +190 -0
  285. package/tools/vds-scripts/vds_cli_common/pyproject.toml +92 -0
  286. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +34 -0
  287. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +139 -0
  288. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +201 -0
  289. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +119 -0
  290. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +318 -0
  291. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +284 -0
  292. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +78 -0
  293. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +213 -0
  294. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +85 -0
  295. package/tools/vds-scripts/vds_cli_common/tests/__init__.py +1 -0
  296. package/tools/vds-scripts/vds_cli_common/tests/test_completers.py +148 -0
  297. package/tools/vds-scripts/vds_cli_common/tests/test_context.py +192 -0
  298. package/tools/vds-scripts/vds_cli_common/tests/test_env.py +102 -0
  299. package/tools/vds-scripts/vds_cli_common/tests/test_errors.py +186 -0
  300. package/tools/vds-scripts/vds_cli_common/tests/test_output.py +229 -0
  301. package/tools/vds-scripts/vds_cli_common/tests/test_paths.py +61 -0
  302. package/tools/vds-scripts/vds_cli_common/tests/test_testing.py +138 -0
  303. package/tools/vds-scripts/vds_cli_common/tests/test_version.py +64 -0
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env bash
2
+ # UV-PATTERN: NO-UV — This script uses only curl and inline python3 to call
3
+ # the multi-agent coordination HTTP API. It has no uv dependency and does not
4
+ # need to be migrated to the worktree wrapper pattern.
5
+ set -euo pipefail
6
+
7
+ BASE_URL="${BASE_URL:-http://localhost:8000}"
8
+ SESSION_ID="${SESSION_ID:-multi_agent_session_$(date +%Y%m%d)}"
9
+ USER_ID="${USER_ID:-multi_agent_coordinator}"
10
+
11
+ if [[ $# -lt 1 ]]; then
12
+ echo "Usage: $0 <command> [args]"
13
+ echo "Commands:"
14
+ echo " init-tasks <tasks.json>"
15
+ echo " register <agent_id> <capabilities_csv>"
16
+ echo " heartbeat <agent_id>"
17
+ echo " acquire <agent_id>"
18
+ echo " progress <agent_id> <task_id> <progress>"
19
+ echo " complete <agent_id> <task_id> <result_json>"
20
+ echo " list-tasks"
21
+ echo " list-agents"
22
+ echo " lock <agent_id> <file_path> <operation>"
23
+ echo " unlock <agent_id> <file_path>"
24
+ exit 1
25
+ fi
26
+
27
+ cmd="$1"
28
+ shift
29
+
30
+ case "$cmd" in
31
+ init-tasks)
32
+ tasks_file="$1"
33
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/initialize" \
34
+ -H "Content-Type: application/json" \
35
+ -d @"$tasks_file"
36
+ ;;
37
+ register)
38
+ agent_id="$1"
39
+ capabilities_csv="$2"
40
+ IFS=',' read -r -a caps <<< "$capabilities_csv"
41
+ payload=$(python3 - <<'PY'
42
+ import json, os
43
+ agent_id = os.environ["AGENT_ID"]
44
+ caps = os.environ["CAPS"].split(",") if os.environ["CAPS"] else []
45
+ payload = {
46
+ "session_id": os.environ["SESSION_ID"],
47
+ "user_id": os.environ["USER_ID"],
48
+ "agent_id": agent_id,
49
+ "capabilities": [c.strip() for c in caps if c.strip()],
50
+ "max_concurrent_tasks": 1,
51
+ "metadata": {"org_id": "vds-internal"},
52
+ }
53
+ print(json.dumps(payload))
54
+ PY
55
+ )
56
+ AGENT_ID="$agent_id" CAPS="$capabilities_csv" SESSION_ID="$SESSION_ID" USER_ID="$USER_ID" \
57
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/agents/register" \
58
+ -H "Content-Type: application/json" \
59
+ -d "$payload"
60
+ ;;
61
+ heartbeat)
62
+ agent_id="$1"
63
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/agents/heartbeat" \
64
+ -H "Content-Type: application/json" \
65
+ -d "{\"session_id\":\"$SESSION_ID\",\"agent_id\":\"$agent_id\"}"
66
+ ;;
67
+ acquire)
68
+ agent_id="$1"
69
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/acquire" \
70
+ -H "Content-Type: application/json" \
71
+ -d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"agent_id\":\"$agent_id\"}"
72
+ ;;
73
+ progress)
74
+ agent_id="$1"
75
+ task_id="$2"
76
+ progress="$3"
77
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/progress" \
78
+ -H "Content-Type: application/json" \
79
+ -d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"task_id\":\"$task_id\",\"agent_id\":\"$agent_id\",\"progress\":$progress}"
80
+ ;;
81
+ complete)
82
+ agent_id="$1"
83
+ task_id="$2"
84
+ result_json="$3"
85
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/complete" \
86
+ -H "Content-Type: application/json" \
87
+ -d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"task_id\":\"$task_id\",\"agent_id\":\"$agent_id\",\"result\":$result_json}"
88
+ ;;
89
+ list-tasks)
90
+ curl -sS "$BASE_URL/api/v1/coordination/tasks?session_id=$SESSION_ID"
91
+ ;;
92
+ list-agents)
93
+ curl -sS "$BASE_URL/api/v1/coordination/agents?session_id=$SESSION_ID"
94
+ ;;
95
+ lock)
96
+ agent_id="$1"
97
+ file_path="$2"
98
+ operation="$3"
99
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/locks/acquire" \
100
+ -H "Content-Type: application/json" \
101
+ -d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"file_path\":\"$file_path\",\"agent_id\":\"$agent_id\",\"operation\":\"$operation\"}"
102
+ ;;
103
+ unlock)
104
+ agent_id="$1"
105
+ file_path="$2"
106
+ curl -sS -X POST "$BASE_URL/api/v1/coordination/locks/release" \
107
+ -H "Content-Type: application/json" \
108
+ -d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"file_path\":\"$file_path\",\"agent_id\":\"$agent_id\"}"
109
+ ;;
110
+ *)
111
+ echo "Unknown command: $cmd"
112
+ exit 1
113
+ ;;
114
+ esac
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ # shellcheck source=scripts/vds_sh_helpers.sh
6
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
7
+
8
+ ROOT="$(vds_resolve_scripts_root)"
9
+ DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
10
+ TARGET_STATE_ARCH_ROOT="$DOCS_ROOT/projects/INSURANCE/analysis/target-state/architecture"
11
+ COORD="$ROOT/scripts/target-state-automation/coordination.sh"
12
+ AGENT_ID="${AGENT_ID:-diagram-agent-01}"
13
+
14
+ if [[ -z "${SERVICES:-}" ]]; then
15
+ SERVICES=$(vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --list | sed -n 's/^ - //p')
16
+ fi
17
+
18
+ for svc in $SERVICES; do
19
+ echo "== $svc =="
20
+ lock_file="$TARGET_STATE_ARCH_ROOT/$svc/${svc}-component.puml"
21
+ "$COORD" lock "$AGENT_ID" "$lock_file" "generate-diagrams" >/dev/null || true
22
+ vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --service "$svc" --use-case
23
+ "$COORD" unlock "$AGENT_ID" "$lock_file" >/dev/null || true
24
+ echo "-- done $svc --"
25
+ done
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+ # docs_root.sh — Backward-compatibility shim.
3
+ #
4
+ # Delegates to scripts/vds_sh_helpers.sh which provides the authoritative
5
+ # implementations. Existing callers that source this file and call
6
+ # resolve_repo_root() or resolve_insurance_docs_root() continue to work
7
+ # without modification.
8
+
9
+ set -euo pipefail
10
+
11
+ _DOCS_ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
+ # shellcheck source=../vds_sh_helpers.sh
13
+ source "$_DOCS_ROOT_DIR/../vds_sh_helpers.sh"
14
+
15
+ # resolve_repo_root — kept for backward compatibility.
16
+ # Returns the vds-scripts workspace root (same as vds_resolve_scripts_root).
17
+ resolve_repo_root() {
18
+ vds_resolve_scripts_root
19
+ }
20
+
21
+ # resolve_insurance_docs_root is already provided by vds_sh_helpers.sh.
22
+ # No re-declaration needed.
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Generate component + sequence + use-case diagrams for all INSURANCE services.
5
+ # Requires: uv, vds_cli project synced.
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ # shellcheck source=scripts/vds_sh_helpers.sh
9
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
10
+
11
+ services=$(vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --list | grep "insurance-")
12
+
13
+ for svc in $services; do
14
+ echo "Generating diagrams for: $svc"
15
+ vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --service "$svc" --component --sequence --use-case
16
+ done
17
+
18
+ echo "Validating diagrams..."
19
+ vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --validate-existing
20
+
21
+ echo "Done."
22
+
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ # shellcheck source=WHO-project/vds-scripts/scripts/vds_sh_helpers.sh
6
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
7
+
8
+ SCRIPTS_ROOT="$(vds_resolve_scripts_root)"
9
+ MONO_ROOT="$(dirname "$(dirname "$SCRIPTS_ROOT")")"
10
+ DOCS_ROOT="$(resolve_insurance_docs_root "$MONO_ROOT")"
11
+ DOC_ROOT="$DOCS_ROOT/projects/INSURANCE/analysis/target-state"
12
+ COORD="$SCRIPTS_ROOT/scripts/target-state-automation/coordination.sh"
13
+ AGENT_ID="${AGENT_ID:-markdown-agent-01}"
14
+
15
+ lock_file="$DOC_ROOT/README.md"
16
+ "$COORD" lock "$AGENT_ID" "$lock_file" "markdown-check" >/dev/null || true
17
+
18
+ cd "$DOC_ROOT"
19
+ vds_uv_run_package markdown_orchestrator -- vds-markdown check \
20
+ architecture/*.md \
21
+ architecture/**/*.md \
22
+ service-specifications/**/*.md \
23
+ *.md
24
+
25
+ "$COORD" unlock "$AGENT_ID" "$lock_file" >/dev/null || true
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ # UV-PATTERN: NO-UV — Delegates entirely to coordination.sh (curl/HTTP calls).
3
+ # No uv invocation needed.
4
+ set -euo pipefail
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ # shellcheck source=scripts/vds_sh_helpers.sh
8
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
9
+
10
+ ROOT="$(vds_resolve_scripts_root)"
11
+ COORD="$ROOT/scripts/target-state-automation/coordination.sh"
12
+
13
+ echo "== Agents =="
14
+ "$COORD" list-agents
15
+
16
+ echo "== Tasks =="
17
+ "$COORD" list-tasks
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ # shellcheck source=scripts/vds_sh_helpers.sh
6
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
7
+
8
+ ROOT="$(vds_resolve_scripts_root)"
9
+ DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
10
+ TARGET_STATE_ARCH_ROOT="$DOCS_ROOT/projects/INSURANCE/analysis/target-state/architecture"
11
+ COORD="$ROOT/scripts/target-state-automation/coordination.sh"
12
+ AGENT_ID="${AGENT_ID:-schema-agent-01}"
13
+
14
+ if [[ -z "${SERVICES:-}" ]]; then
15
+ SERVICES=$(ls -d "$TARGET_STATE_ARCH_ROOT"/insurance-* 2>/dev/null | xargs -n1 basename)
16
+ fi
17
+
18
+ for svc in $SERVICES; do
19
+ echo "== $svc =="
20
+ schema_file="$TARGET_STATE_ARCH_ROOT/$svc/${svc}-database-target-schema.md"
21
+ "$COORD" lock "$AGENT_ID" "$schema_file" "validate-schema" >/dev/null || true
22
+ vds_uv_run_package vds_cli vds-cli schema convert --service "$svc" --format plantuml --validate
23
+ "$COORD" unlock "$AGENT_ID" "$schema_file" >/dev/null || true
24
+ echo "-- done $svc --"
25
+ done
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Sync docs and diagrams to Confluence.
5
+ # Requires: uv, vds_cli project synced, proper tokens in the shared VDS env file
6
+
7
+ PAGE_ID=${1:-166465076} # override with first arg
8
+
9
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ # shellcheck source=scripts/vds_sh_helpers.sh
11
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
12
+
13
+ ROOT="$(vds_resolve_scripts_root)"
14
+ DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
15
+ DOC_DIR="$DOCS_ROOT/projects/INSURANCE/analysis/target-state"
16
+ ARCH_DIR="$DOC_DIR/architecture"
17
+
18
+ echo "Syncing PDFs (docs) to Confluence page $PAGE_ID..."
19
+ vds_uv_run_package vds_cli vds-cli confluence sync pdfs \
20
+ "$PAGE_ID" \
21
+ --dir "$DOC_DIR" \
22
+ --server external
23
+
24
+ echo "Syncing PNG/SVG (diagrams) to Confluence page $PAGE_ID..."
25
+ vds_uv_run_package vds_cli vds-cli confluence sync pngs \
26
+ "$PAGE_ID" \
27
+ --dir "$ARCH_DIR" \
28
+ --server external
29
+
30
+ echo "Done."
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ # shellcheck source=scripts/vds_sh_helpers.sh
6
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
7
+ FLAGS="${UV_SYNC_FLAGS:-}"
8
+
9
+ # Sync a narrow subset of workspace packages for diagram/markdown workflows.
10
+ # This is a targeted helper, not the canonical full-workspace bootstrap path.
11
+ if [[ -n "$FLAGS" ]]; then
12
+ # shellcheck disable=SC2206
13
+ EXTRA_ARGS=( $FLAGS )
14
+ else
15
+ EXTRA_ARGS=()
16
+ fi
17
+
18
+ vds_uv_sync_package vds_cli "${EXTRA_ARGS[@]+"${EXTRA_ARGS[@]}"}"
19
+ vds_uv_sync_package markdown_orchestrator "${EXTRA_ARGS[@]+"${EXTRA_ARGS[@]}"}"
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env bash
2
+ # UV-PATTERN: NO-UV — Uses inline python3 for link validation; no uv invocation.
3
+ # Root resolution goes through docs_root.sh shim (safe marker-based).
4
+ # No migration needed.
5
+ set -euo pipefail
6
+
7
+ # Validate relative markdown links within target-state docs.
8
+
9
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ # shellcheck source=WHO-project/vds-scripts/scripts/target-state-automation/docs_root.sh
11
+ source "$SCRIPT_DIR/docs_root.sh"
12
+
13
+ ROOT="$(resolve_repo_root)"
14
+ TARGET_STATE_ROOT="$(resolve_insurance_docs_root "$ROOT")/projects/INSURANCE/analysis/target-state"
15
+
16
+ TARGET_STATE_ROOT="$TARGET_STATE_ROOT" python3 - <<'PY'
17
+ from __future__ import annotations
18
+
19
+ import os
20
+ import re
21
+ from pathlib import Path
22
+ from urllib.parse import unquote
23
+
24
+ root = Path(os.environ["TARGET_STATE_ROOT"]).resolve()
25
+ md_files = sorted([p for p in root.rglob('*.md') if p.is_file()])
26
+
27
+ link_re = re.compile(r"!?\[[^\]]*\]\(([^)]+)\)")
28
+
29
+ errors: list[str] = []
30
+
31
+ for f in md_files:
32
+ text = f.read_text(encoding='utf-8', errors='ignore')
33
+ for raw in link_re.findall(text):
34
+ link = raw.strip()
35
+ if not link:
36
+ continue
37
+ # strip title part: (path "title")
38
+ if ' ' in link and not link.startswith('http'):
39
+ link = link.split(' ')[0]
40
+ link = unquote(link)
41
+
42
+ # Skip anchors/external links/schemes
43
+ if link.startswith(('#', 'http://', 'https://', 'mailto:')):
44
+ continue
45
+ if '://' in link: # includes file://
46
+ continue
47
+ if link.startswith(('ac:', 'ri:')):
48
+ continue
49
+ if '{' in link or '}' in link: # template placeholders
50
+ continue
51
+
52
+ # strip fragment
53
+ link = link.split('#', 1)[0]
54
+ if not link or link.startswith('data:'):
55
+ continue
56
+ if link.endswith('/'):
57
+ continue # directory navigation links are allowed
58
+
59
+ # Only validate links that look like local files
60
+ allowed_ext = {'.md', '.pdf', '.puml', '.plantuml', '.png', '.svg', '.mmd'}
61
+ if Path(link).suffix and Path(link).suffix.lower() not in allowed_ext:
62
+ continue
63
+ if not Path(link).suffix:
64
+ continue
65
+
66
+ target = (f.parent / link).resolve()
67
+ # Skip links that point outside target-state root
68
+ try:
69
+ target.relative_to(root.resolve())
70
+ except ValueError:
71
+ continue
72
+
73
+ if not target.exists():
74
+ errors.append(f"{f.relative_to(root)} -> {raw}")
75
+
76
+ if errors:
77
+ print('❌ Link validation failed (missing targets)')
78
+ for e in errors[:200]:
79
+ print('-', e)
80
+ if len(errors) > 200:
81
+ print(f"... and {len(errors)-200} more")
82
+ raise SystemExit(1)
83
+
84
+ print('✅ Link validation passed')
85
+ print('Files scanned:', len(md_files))
86
+ PY
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Validate markdown in target-state docs.
5
+ # Requires: uv, markdown_orchestrator project synced.
6
+ #
7
+ # UV-PATTERN EXCEPTION: This script intentionally uses `uv pip install -e .`
8
+ # rather than the standard helper-driven workspace pattern (for example
9
+ # `vds_uv_run_package markdown_orchestrator ...`). Reason: the script is a
10
+ # local-dev helper that installs the package
11
+ # in editable mode so authors can iterate on the markdown_orchestrator source
12
+ # without re-syncing the full workspace. This is a deliberate trade-off for
13
+ # development convenience, not an oversight. Do NOT migrate to the worktree
14
+ # wrapper pattern without first evaluating whether the editable-install
15
+ # semantics are still needed.
16
+ #
17
+ # See scripts/vds_sh_helpers.sh for the canonical UV invocation helpers.
18
+
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ # shellcheck source=WHO-project/vds-scripts/scripts/target-state-automation/docs_root.sh
21
+ source "$SCRIPT_DIR/docs_root.sh"
22
+
23
+ ROOT="$(resolve_repo_root)"
24
+ VDS_SCRIPTS="$ROOT/WHO-project/vds-scripts"
25
+ DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
26
+ TARGET_STATE="$DOCS_ROOT/projects/INSURANCE/analysis/target-state"
27
+
28
+ echo "Validating markdown in target-state..."
29
+ echo "========================================"
30
+
31
+ # Run markdown validation — editable install intentional (see header comment).
32
+ cd "$VDS_SCRIPTS/markdown_orchestrator"
33
+ uv pip install -e . --quiet
34
+ uv run -- vds-markdown check \
35
+ "$TARGET_STATE"/architecture/*.md \
36
+ "$TARGET_STATE"/architecture/**/*.md \
37
+ "$TARGET_STATE"/service-specifications/**/*.md \
38
+ "$TARGET_STATE"/*.md
39
+
40
+ VALIDATION_EXIT_CODE=$?
41
+
42
+ echo ""
43
+ echo "========================================"
44
+ echo "Markdown validation completed with exit code: $VALIDATION_EXIT_CODE"
45
+
46
+ if [ $VALIDATION_EXIT_CODE -eq 0 ]; then
47
+ echo "Markdown validation PASSED"
48
+ else
49
+ echo "Markdown validation FAILED with exit code: $VALIDATION_EXIT_CODE"
50
+ fi
51
+
52
+ echo ""
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Validate/generate PlantUML ERD diagrams for all INSURANCE services.
5
+ # Requires: uv, vds_cli project synced.
6
+ #
7
+ # FOLLOW-UP DRIFT NOTE:
8
+ # This script now routes through the canonical helper contract correctly, but
9
+ # the underlying schema command surface appears to have drifted: the current
10
+ # `vds-cli schema` / `vds-schema-convert` compatibility layer no longer accepts
11
+ # the historical `convert --all --format plantuml --validate-all` shape.
12
+ # Keep this script classified as follow-up schema-command alignment work rather
13
+ # than treating any remaining failure here as a helper-layer regression.
14
+
15
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ # shellcheck source=WHO-project/vds-scripts/scripts/vds_sh_helpers.sh
17
+ source "$SCRIPT_DIR/../vds_sh_helpers.sh"
18
+
19
+ echo "Validating PlantUML ERDs for all services..."
20
+ echo "ERROR: schema validation automation is currently unavailable in this worktree." >&2
21
+ echo "The shell helper migration is complete, but the underlying schema command surface is still a follow-up item." >&2
22
+ echo "Use help-first discovery to inspect the current schema compatibility layer:" >&2
23
+ echo " ./scripts/worktree_uv.sh run --project vds_cli vds-cli schema --help" >&2
24
+ echo " ./scripts/worktree_uv.sh run --project schema_converter vds-schema-convert convert --help" >&2
25
+ exit 2
26
+
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env bash
2
+ # UV-PATTERN: NO-UV — Uses inline python3 for structure validation; no uv invocation.
3
+ # Root resolution goes through docs_root.sh shim (safe marker-based).
4
+ # No migration needed.
5
+ set -euo pipefail
6
+
7
+ # Validate folder/file structure for target-state docs.
8
+ # Checks:
9
+ # - architecture/insurance-*/ required docs exist
10
+ # - service-specifications/**/ required docs exist
11
+ # - each architecture service has a matching service-spec folder
12
+
13
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
14
+ # shellcheck source=WHO-project/vds-scripts/scripts/target-state-automation/docs_root.sh
15
+ source "$SCRIPT_DIR/docs_root.sh"
16
+
17
+ ROOT="$(resolve_repo_root)"
18
+ TARGET_STATE_ROOT="$(resolve_insurance_docs_root "$ROOT")/projects/INSURANCE/analysis/target-state"
19
+
20
+ TARGET_STATE_ROOT="$TARGET_STATE_ROOT" python3 - <<'PY'
21
+ from __future__ import annotations
22
+
23
+ import os
24
+ from pathlib import Path
25
+
26
+ root = Path(os.environ["TARGET_STATE_ROOT"]).resolve()
27
+ arch = root / 'architecture'
28
+ spec = root / 'service-specifications'
29
+
30
+ arch_required = [
31
+ 'architecture.md',
32
+ 'api-contracts.md',
33
+ 'integration-patterns.md',
34
+ 'database-target-schema.md',
35
+ ]
36
+
37
+ # service-spec required (by suffix)
38
+ spec_required_suffixes = [
39
+ '_SERVICE_SPEC.md',
40
+ '_API_SPEC.md',
41
+ '_DATA_MODEL.md',
42
+ '_BUSINESS_LOGIC.md',
43
+ ]
44
+
45
+ errors: list[str] = []
46
+
47
+ excluded_arch_svcs = {
48
+ # Known non-service apps/libs (no target-state schema/spec required)
49
+ 'insurance-common',
50
+ 'insurance-insuremo-common',
51
+ 'insurance-customer-webview',
52
+ }
53
+
54
+ arch_svcs = sorted(
55
+ [
56
+ p
57
+ for p in arch.iterdir()
58
+ if p.is_dir() and p.name.startswith('insurance-') and p.name not in excluded_arch_svcs
59
+ ]
60
+ )
61
+
62
+ # Validate architecture per service
63
+ for svc_dir in arch_svcs:
64
+ svc = svc_dir.name
65
+ for suf in arch_required:
66
+ fname = f"{svc}-{suf}"
67
+ if not (svc_dir / fname).exists():
68
+ errors.append(f"ARCH missing: {svc}/{fname}")
69
+
70
+ # Identify service-spec dirs based on *_SERVICE_SPEC.md
71
+ spec_service_dirs = sorted({p.parent for p in spec.rglob('*_SERVICE_SPEC.md')}, key=lambda p: str(p))
72
+
73
+ # Validate service-spec required docs
74
+ for d in spec_service_dirs:
75
+ if not (d / 'README.md').exists():
76
+ errors.append(f"SPEC missing: {d.relative_to(spec)}/README.md")
77
+ for suf in spec_required_suffixes:
78
+ if not any(p.name.endswith(suf) for p in d.glob('*.md')):
79
+ errors.append(f"SPEC missing: {d.relative_to(spec)}/*{suf}")
80
+
81
+ # Ensure each architecture service has matching spec dir (by last path segment match)
82
+ spec_paths = [str(p.relative_to(spec)) for p in spec_service_dirs]
83
+ for svc_dir in arch_svcs:
84
+ key = svc_dir.name.replace('insurance-', '')
85
+ found = any(s.endswith('/' + key) or s == key for s in spec_paths)
86
+ if not found:
87
+ errors.append(f"SPEC missing for architecture service: {svc_dir.name} (expected folder ending with '{key}')")
88
+
89
+ if errors:
90
+ print('❌ Structure validation failed')
91
+ for e in errors:
92
+ print('-', e)
93
+ raise SystemExit(1)
94
+
95
+ print('✅ Structure validation passed')
96
+ print(f"Architecture services: {len(arch_svcs)}")
97
+ print(f"Service-spec folders: {len(spec_service_dirs)}")
98
+ PY