@ngocsangairvds/vsaf 4.1.7 → 4.1.9

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 (1063) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/skill.js +1 -1
  3. package/packages/cli/dist/commands/skill.js.map +1 -1
  4. package/skills/vds-skill/_shared/config-check.js +0 -76
  5. package/skills/vds-skill/_shared/credentials.js +0 -139
  6. package/skills/vds-skill/create-bitbucket-pr/SKILL.md +0 -57
  7. package/skills/vds-skill/create-bitbucket-pr/scripts/create-pr.js +0 -125
  8. package/skills/vds-skill/create-jira-epic/SKILL.md +0 -55
  9. package/skills/vds-skill/create-jira-epic/scripts/create-epic.js +0 -120
  10. package/skills/vds-skill/install-deps.mjs +0 -410
  11. package/skills/vds-skill/pack.yaml +0 -24
  12. package/skills/vds-skill/pull/SKILL.md +0 -38
  13. package/skills/vds-skill/pull/scripts/pull.js +0 -59
  14. package/skills/vds-skill/push-prd/SKILL.md +0 -227
  15. package/skills/vds-skill/push-srs/SKILL.md +0 -116
  16. package/skills/vds-skill/search-confluence/SKILL.md +0 -53
  17. package/skills/vds-skill/search-confluence/scripts/search.js +0 -114
  18. package/skills/vds-skill/vds-scripts/.claude/phase7-CLOSURE.md +0 -100
  19. package/skills/vds-skill/vds-scripts/.dockerignore +0 -62
  20. package/skills/vds-skill/vds-scripts/.github/ISSUE_TEMPLATE/cli-change.md +0 -92
  21. package/skills/vds-skill/vds-scripts/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -48
  22. package/skills/vds-skill/vds-scripts/.github/workflows/chaos-smoke.yml +0 -266
  23. package/skills/vds-skill/vds-scripts/.github/workflows/confluence-sync.yml +0 -44
  24. package/skills/vds-skill/vds-scripts/.github/workflows/docs-confluence-evidence.yml +0 -170
  25. package/skills/vds-skill/vds-scripts/.github/workflows/docs-quality.yml +0 -59
  26. package/skills/vds-skill/vds-scripts/.github/workflows/lint-and-test.yml +0 -90
  27. package/skills/vds-skill/vds-scripts/.github/workflows/scheduler-load-smoke.yml +0 -104
  28. package/skills/vds-skill/vds-scripts/.github/workflows/telegram-bridge-ci.yml +0 -131
  29. package/skills/vds-skill/vds-scripts/.graphifyignore +0 -29
  30. package/skills/vds-skill/vds-scripts/.importlinter +0 -86
  31. package/skills/vds-skill/vds-scripts/.mcp.json +0 -11
  32. package/skills/vds-skill/vds-scripts/.pre-commit-config.yaml +0 -62
  33. package/skills/vds-skill/vds-scripts/.ruffignore +0 -3
  34. package/skills/vds-skill/vds-scripts/.secrets.baseline +0 -133
  35. package/skills/vds-skill/vds-scripts/AGENTS.md +0 -250
  36. package/skills/vds-skill/vds-scripts/AGENTS.vi.md +0 -92
  37. package/skills/vds-skill/vds-scripts/ECOSYSTEM-CHANGELOG.md +0 -52
  38. package/skills/vds-skill/vds-scripts/ECOSYSTEM-DOCS.md +0 -602
  39. package/skills/vds-skill/vds-scripts/ECOSYSTEM_ALIGNMENT.md +0 -133
  40. package/skills/vds-skill/vds-scripts/Makefile +0 -119
  41. package/skills/vds-skill/vds-scripts/README.md +0 -103
  42. package/skills/vds-skill/vds-scripts/bitbucket_manifest_mapping.toml +0 -34
  43. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +0 -258
  44. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +0 -393
  45. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +0 -61
  46. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/FEATURES.md +0 -908
  47. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/README.md +0 -817
  48. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/pyproject.toml +0 -49
  49. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +0 -50
  50. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +0 -641
  51. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +0 -2271
  52. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +0 -2693
  53. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +0 -186
  54. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +0 -34
  55. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +0 -185
  56. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/parsers.py +0 -113
  57. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +0 -244
  58. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/repo_ops.py +0 -325
  59. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/__init__.py +0 -8
  60. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/conftest.py +0 -65
  61. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +0 -155
  62. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +0 -505
  63. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +0 -172
  64. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +0 -113
  65. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli_archive.py +0 -122
  66. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli_clone.py +0 -131
  67. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client.py +0 -207
  68. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_archive.py +0 -73
  69. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +0 -101
  70. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +0 -180
  71. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +0 -33
  72. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +0 -193
  73. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +0 -163
  74. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +0 -171
  75. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +0 -118
  76. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +0 -155
  77. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code.py +0 -98
  78. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +0 -279
  79. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +0 -334
  80. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +0 -149
  81. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_config.py +0 -297
  82. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +0 -352
  83. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_errors.py +0 -67
  84. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +0 -352
  85. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +0 -203
  86. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +0 -262
  87. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +0 -265
  88. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +0 -206
  89. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +0 -336
  90. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_archive.py +0 -169
  91. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_clone.py +0 -115
  92. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_parsing.py +0 -149
  93. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +0 -336
  94. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +0 -266
  95. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +0 -188
  96. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +0 -234
  97. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/unit/__init__.py +0 -0
  98. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/unit/test_parsers.py +0 -254
  99. package/skills/vds-skill/vds-scripts/brd_orchestrator/README.md +0 -29
  100. package/skills/vds-skill/vds-scripts/brd_orchestrator/pyproject.toml +0 -63
  101. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/__init__.py +0 -17
  102. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/cli.py +0 -187
  103. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/validator.py +0 -121
  104. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/__init__.py +0 -0
  105. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/test_cli.py +0 -62
  106. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/test_validator.py +0 -33
  107. package/skills/vds-skill/vds-scripts/code/code_evidence_pack.json +0 -435
  108. package/skills/vds-skill/vds-scripts/confluence_orchestrator/Dockerfile +0 -19
  109. package/skills/vds-skill/vds-scripts/confluence_orchestrator/README.md +0 -479
  110. package/skills/vds-skill/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +0 -127
  111. package/skills/vds-skill/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +0 -108
  112. package/skills/vds-skill/vds-scripts/confluence_orchestrator/pyproject.toml +0 -50
  113. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +0 -56
  114. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/async_client.py +0 -100
  115. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +0 -3160
  116. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +0 -215
  117. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +0 -368
  118. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +0 -144
  119. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +0 -1833
  120. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +0 -44
  121. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +0 -111
  122. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +0 -1850
  123. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +0 -166
  124. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/protocols.py +0 -61
  125. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +0 -78
  126. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +0 -122
  127. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree_copier.py +0 -431
  128. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +0 -203
  129. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +0 -299
  130. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_png_attachments.py +0 -299
  131. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/conftest.py +0 -46
  132. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +0 -252
  133. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +0 -193
  134. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_async_client.py +0 -104
  135. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +0 -246
  136. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_cli.py +0 -716
  137. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_config.py +0 -130
  138. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content.py +0 -192
  139. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +0 -27
  140. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content_labels.py +0 -94
  141. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +0 -2252
  142. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_degraded_write_safety.py +0 -176
  143. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +0 -225
  144. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_errors.py +0 -75
  145. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing.py +0 -73
  146. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +0 -37
  147. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +0 -44
  148. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +0 -49
  149. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_export.py +0 -231
  150. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_history.py +0 -217
  151. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_http.py +0 -375
  152. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +0 -93
  153. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_reporting.py +0 -24
  154. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +0 -36
  155. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_space_management.py +0 -236
  156. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +0 -384
  157. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_tree_copier.py +0 -644
  158. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_tree_copier_remap.py +0 -289
  159. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +0 -387
  160. package/skills/vds-skill/vds-scripts/diagram_generator/README.md +0 -663
  161. package/skills/vds-skill/vds-scripts/diagram_generator/ci_validate.sh +0 -16
  162. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-component.png +0 -0
  163. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-component.puml +0 -23
  164. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-sequence.png +0 -0
  165. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-sequence.puml +0 -21
  166. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-usecase.png +0 -0
  167. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-usecase.puml +0 -14
  168. package/skills/vds-skill/vds-scripts/diagram_generator/examples/github-actions-validate.yml +0 -39
  169. package/skills/vds-skill/vds-scripts/diagram_generator/generate_all_diagrams.py +0 -827
  170. package/skills/vds-skill/vds-scripts/diagram_generator/generate_insurance_c4_diagrams.py +0 -261
  171. package/skills/vds-skill/vds-scripts/diagram_generator/generate_insurance_c4_quick.py +0 -486
  172. package/skills/vds-skill/vds-scripts/diagram_generator/pyproject.toml +0 -28
  173. package/skills/vds-skill/vds-scripts/diagram_generator/render_png.py +0 -59
  174. package/skills/vds-skill/vds-scripts/diagram_generator/src/vds_diagram_generator/__init__.py +0 -3
  175. package/skills/vds-skill/vds-scripts/diagram_generator/src/vds_diagram_generator/cli.py +0 -50
  176. package/skills/vds-skill/vds-scripts/diagram_generator/test_c4_hierarchical.py +0 -142
  177. package/skills/vds-skill/vds-scripts/diagram_generator/test_c4_quick.py +0 -131
  178. package/skills/vds-skill/vds-scripts/diagram_generator/tests/__init__.py +0 -0
  179. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_analyzer_completeness.py +0 -260
  180. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_c4_syntax_correctness.py +0 -138
  181. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_component_coverage.py +0 -182
  182. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_mermaid_output.py +0 -80
  183. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_png_generation.py +0 -112
  184. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_scenario_templates.py +0 -15
  185. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_sequence_accuracy.py +0 -93
  186. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_structurizr_export.py +0 -177
  187. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_style_consistency.py +0 -174
  188. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_usecase_generator.py +0 -201
  189. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_usecase_integration.py +0 -124
  190. package/skills/vds-skill/vds-scripts/docker/.dockerignore +0 -38
  191. package/skills/vds-skill/vds-scripts/docker/ADR.md +0 -392
  192. package/skills/vds-skill/vds-scripts/docker/Dockerfile +0 -68
  193. package/skills/vds-skill/vds-scripts/docker/MIGRATION.md +0 -453
  194. package/skills/vds-skill/vds-scripts/docker/README.md +0 -347
  195. package/skills/vds-skill/vds-scripts/docker/ROLLBACK.md +0 -596
  196. package/skills/vds-skill/vds-scripts/docker/compose.phase2-verification.yml +0 -31
  197. package/skills/vds-skill/vds-scripts/docker/docker-compose.cli.yml +0 -206
  198. package/skills/vds-skill/vds-scripts/docker/docker-compose.infra.yml +0 -276
  199. package/skills/vds-skill/vds-scripts/docker/docker-compose.services.yml +0 -425
  200. package/skills/vds-skill/vds-scripts/docker/infrastructure/init-schemas.sql +0 -177
  201. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/pgbouncer.ini +0 -75
  202. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/userlist.txt +0 -50
  203. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/userlist.txt.template +0 -36
  204. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/.gitkeep +0 -0
  205. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/PREFLIGHT.md +0 -132
  206. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/README.md +0 -84
  207. package/skills/vds-skill/vds-scripts/docs/.confluence.yaml +0 -157
  208. package/skills/vds-skill/vds-scripts/docs/.freshness.yaml +0 -54
  209. package/skills/vds-skill/vds-scripts/docs/README.md +0 -235
  210. package/skills/vds-skill/vds-scripts/docs/agents/README.md +0 -33
  211. package/skills/vds-skill/vds-scripts/docs/agents/explanation/data-flow.md +0 -132
  212. package/skills/vds-skill/vds-scripts/docs/agents/explanation/development-roadmap.md +0 -49
  213. package/skills/vds-skill/vds-scripts/docs/agents/explanation/features-overview.md +0 -62
  214. package/skills/vds-skill/vds-scripts/docs/agents/explanation/index.md +0 -36
  215. package/skills/vds-skill/vds-scripts/docs/agents/explanation/runtime-verification-and-gap-reporting.md +0 -127
  216. package/skills/vds-skill/vds-scripts/docs/agents/explanation/system-architecture.md +0 -139
  217. package/skills/vds-skill/vds-scripts/docs/agents/explanation/whats-new.md +0 -75
  218. package/skills/vds-skill/vds-scripts/docs/agents/explanation/who-ecosystem-introduction.md +0 -65
  219. package/skills/vds-skill/vds-scripts/docs/agents/explanation/who-ecosystem-model.md +0 -41
  220. package/skills/vds-skill/vds-scripts/docs/agents/how-to/02-using-vds-ai-memory.md +0 -98
  221. package/skills/vds-skill/vds-scripts/docs/agents/how-to/03-memory-cross-agent.md +0 -241
  222. package/skills/vds-skill/vds-scripts/docs/agents/how-to/04-using-progress-reports.md +0 -240
  223. package/skills/vds-skill/vds-scripts/docs/agents/how-to/08-semantic-search.md +0 -46
  224. package/skills/vds-skill/vds-scripts/docs/agents/how-to/apply-phase3-migration.md +0 -148
  225. package/skills/vds-skill/vds-scripts/docs/agents/how-to/choose-the-right-command-or-skill.md +0 -34
  226. package/skills/vds-skill/vds-scripts/docs/agents/how-to/contribute-new-orchestrator.md +0 -149
  227. package/skills/vds-skill/vds-scripts/docs/agents/how-to/decision-tree.md +0 -63
  228. package/skills/vds-skill/vds-scripts/docs/agents/how-to/first-audit-run.md +0 -83
  229. package/skills/vds-skill/vds-scripts/docs/agents/how-to/index.md +0 -49
  230. package/skills/vds-skill/vds-scripts/docs/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +0 -314
  231. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +0 -165
  232. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +0 -138
  233. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +0 -130
  234. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +0 -142
  235. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +0 -140
  236. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +0 -135
  237. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-all-project-preparation.md +0 -211
  238. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-bounded-parallel-analysis.md +0 -123
  239. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-confluence-upload-recovery.md +0 -204
  240. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase132-department-preparation.md +0 -144
  241. package/skills/vds-skill/vds-scripts/docs/agents/how-to/run-ecosystem-daily-report.md +0 -213
  242. package/skills/vds-skill/vds-scripts/docs/agents/how-to/tips-and-tricks.md +0 -138
  243. package/skills/vds-skill/vds-scripts/docs/agents/how-to/troubleshooting-guide.md +0 -221
  244. package/skills/vds-skill/vds-scripts/docs/agents/reference/agent-operational-contract.md +0 -162
  245. package/skills/vds-skill/vds-scripts/docs/agents/reference/alignment-phase179-report.md +0 -144
  246. package/skills/vds-skill/vds-scripts/docs/agents/reference/audit-triage-playbook.md +0 -256
  247. package/skills/vds-skill/vds-scripts/docs/agents/reference/backup-restore.md +0 -132
  248. package/skills/vds-skill/vds-scripts/docs/agents/reference/bitbucket-orchestrator.md +0 -56
  249. package/skills/vds-skill/vds-scripts/docs/agents/reference/brd-orchestrator.md +0 -52
  250. package/skills/vds-skill/vds-scripts/docs/agents/reference/capability-coverage-review.md +0 -51
  251. package/skills/vds-skill/vds-scripts/docs/agents/reference/ci-workflows.md +0 -98
  252. package/skills/vds-skill/vds-scripts/docs/agents/reference/circular-dependency-orchestrator.md +0 -55
  253. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-commands.md +0 -583
  254. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-development-standards.md +0 -41
  255. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-help-matrix.md +0 -84
  256. package/skills/vds-skill/vds-scripts/docs/agents/reference/common-errors.md +0 -126
  257. package/skills/vds-skill/vds-scripts/docs/agents/reference/configuration-reference.md +0 -128
  258. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-orchestrator.md +0 -56
  259. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-sync-target.md +0 -111
  260. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-sync.md +0 -46
  261. package/skills/vds-skill/vds-scripts/docs/agents/reference/db-query-orchestrator.md +0 -93
  262. package/skills/vds-skill/vds-scripts/docs/agents/reference/diagrams-orchestrator.md +0 -52
  263. package/skills/vds-skill/vds-scripts/docs/agents/reference/ecosystem-daily-report.md +0 -229
  264. package/skills/vds-skill/vds-scripts/docs/agents/reference/elastic-orchestrator.md +0 -57
  265. package/skills/vds-skill/vds-scripts/docs/agents/reference/env-git-helper.md +0 -216
  266. package/skills/vds-skill/vds-scripts/docs/agents/reference/evolution-orchestrator.md +0 -113
  267. package/skills/vds-skill/vds-scripts/docs/agents/reference/excel-orchestrator.md +0 -51
  268. package/skills/vds-skill/vds-scripts/docs/agents/reference/git-orchestrator.md +0 -62
  269. package/skills/vds-skill/vds-scripts/docs/agents/reference/google-sheets-orchestrator.md +0 -51
  270. package/skills/vds-skill/vds-scripts/docs/agents/reference/grafana-orchestrator.md +0 -52
  271. package/skills/vds-skill/vds-scripts/docs/agents/reference/hexagonal-orchestrator.md +0 -64
  272. package/skills/vds-skill/vds-scripts/docs/agents/reference/index.md +0 -36
  273. package/skills/vds-skill/vds-scripts/docs/agents/reference/infrastructure-v2.15.md +0 -67
  274. package/skills/vds-skill/vds-scripts/docs/agents/reference/intellij-orchestrator.md +0 -50
  275. package/skills/vds-skill/vds-scripts/docs/agents/reference/jira-orchestrator.md +0 -60
  276. package/skills/vds-skill/vds-scripts/docs/agents/reference/links-orchestrator.md +0 -57
  277. package/skills/vds-skill/vds-scripts/docs/agents/reference/lint-cli.md +0 -99
  278. package/skills/vds-skill/vds-scripts/docs/agents/reference/lsp-orchestrator.md +0 -51
  279. package/skills/vds-skill/vds-scripts/docs/agents/reference/markdown-orchestrator.md +0 -53
  280. package/skills/vds-skill/vds-scripts/docs/agents/reference/mcp-orchestrator.md +0 -88
  281. package/skills/vds-skill/vds-scripts/docs/agents/reference/memory-orchestrator.md +0 -53
  282. package/skills/vds-skill/vds-scripts/docs/agents/reference/metabase-orchestrator.md +0 -51
  283. package/skills/vds-skill/vds-scripts/docs/agents/reference/migration-playbook.md +0 -71
  284. package/skills/vds-skill/vds-scripts/docs/agents/reference/multi-agent-orchestrator.md +0 -52
  285. package/skills/vds-skill/vds-scripts/docs/agents/reference/openapi-orchestrator.md +0 -57
  286. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-architecture.md +0 -194
  287. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-comparison-matrix.md +0 -79
  288. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-index.md +0 -73
  289. package/skills/vds-skill/vds-scripts/docs/agents/reference/pdf-orchestrator.md +0 -57
  290. package/skills/vds-skill/vds-scripts/docs/agents/reference/portable-paths-and-config.md +0 -0
  291. package/skills/vds-skill/vds-scripts/docs/agents/reference/portable-paths-validation-matrix.md +0 -129
  292. package/skills/vds-skill/vds-scripts/docs/agents/reference/progress-orchestrator.md +0 -51
  293. package/skills/vds-skill/vds-scripts/docs/agents/reference/progress-report-cli.md +0 -215
  294. package/skills/vds-skill/vds-scripts/docs/agents/reference/public-interface-orchestrator.md +0 -73
  295. package/skills/vds-skill/vds-scripts/docs/agents/reference/research-orchestrator.md +0 -53
  296. package/skills/vds-skill/vds-scripts/docs/agents/reference/schema-orchestrator.md +0 -57
  297. package/skills/vds-skill/vds-scripts/docs/agents/reference/search-tools.md +0 -34
  298. package/skills/vds-skill/vds-scripts/docs/agents/reference/skills-commands.md +0 -256
  299. package/skills/vds-skill/vds-scripts/docs/agents/reference/skills-reference.md +0 -32
  300. package/skills/vds-skill/vds-scripts/docs/agents/reference/sonarqube-orchestrator.md +0 -62
  301. package/skills/vds-skill/vds-scripts/docs/agents/reference/spec-orchestrator.md +0 -56
  302. package/skills/vds-skill/vds-scripts/docs/agents/reference/structure-orchestrator.md +0 -69
  303. package/skills/vds-skill/vds-scripts/docs/agents/reference/system-requirements.md +0 -76
  304. package/skills/vds-skill/vds-scripts/docs/agents/reference/tasks-orchestrator.md +0 -53
  305. package/skills/vds-skill/vds-scripts/docs/agents/reference/validation-and-sync-notes.md +0 -54
  306. package/skills/vds-skill/vds-scripts/docs/agents/reference/vds-ai-memory-api.md +0 -51
  307. package/skills/vds-skill/vds-scripts/docs/agents/reference/vds-cli-reference.md +0 -34
  308. package/skills/vds-skill/vds-scripts/docs/agents/reference/who-capability-inventory.md +0 -96
  309. package/skills/vds-skill/vds-scripts/docs/agents/reference/who-capability-routing-matrix.md +0 -14
  310. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/feature-progression-guide.md +0 -112
  311. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/index.md +0 -36
  312. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/quick-start.md +0 -50
  313. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/who-skills-and-scripts-onboarding.md +0 -47
  314. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/zero-to-productive-developer.md +0 -339
  315. package/skills/vds-skill/vds-scripts/docs/confluence/IMPLEMENTATION-SUMMARY.md +0 -78
  316. package/skills/vds-skill/vds-scripts/docs/confluence/SYNC-GUIDE.md +0 -47
  317. package/skills/vds-skill/vds-scripts/docs/deployment/offline-docker-image-load.md +0 -59
  318. package/skills/vds-skill/vds-scripts/docs/evolution-auto-run-rollout.md +0 -325
  319. package/skills/vds-skill/vds-scripts/docs/evolution-loop-deep-integration.md +0 -496
  320. package/skills/vds-skill/vds-scripts/docs/evolution-loop-integration-guide.md +0 -359
  321. package/skills/vds-skill/vds-scripts/docs/openspace-schema-snapshot.md +0 -73
  322. package/skills/vds-skill/vds-scripts/docs/operations/sla-mttr-policy.md +0 -44
  323. package/skills/vds-skill/vds-scripts/docs/p0-closure-evidence/SUMMARY.md +0 -58
  324. package/skills/vds-skill/vds-scripts/docs/p4-closure-evidence/.gitkeep +0 -0
  325. package/skills/vds-skill/vds-scripts/docs/p4-closure-evidence/smoke-20260427T024137Z-b95b586b.json +0 -15
  326. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/alembic-and-runtime-advisory-locks.md +0 -45
  327. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/dbos-listen-notify.md +0 -54
  328. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/pgbouncer-search-path-empirical.md +0 -110
  329. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/pgvector-set-local-audit.md +0 -51
  330. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/topology-decision-session-mode.md +0 -57
  331. package/skills/vds-skill/vds-scripts/docs/phases/CHANGELOG.md +0 -103
  332. package/skills/vds-skill/vds-scripts/docs/phases/PHASE_125_COMPLETION_AND_MERGE.md +0 -212
  333. package/skills/vds-skill/vds-scripts/docs/phases/phase125/IMPLEMENTATION_REPORT.md +0 -227
  334. package/skills/vds-skill/vds-scripts/docs/phases/phase125/TSK-125.10-11-implementation-summary.md +0 -196
  335. package/skills/vds-skill/vds-scripts/docs/phases/phase125/profile-patch-ollama-local-anthropic.md +0 -122
  336. package/skills/vds-skill/vds-scripts/docs/phases/phase125_completion_summary.md +0 -369
  337. package/skills/vds-skill/vds-scripts/docs/phases/phase125_llm_analysis_skill.md +0 -164
  338. package/skills/vds-skill/vds-scripts/docs/phases/phase125_merge_complete.md +0 -147
  339. package/skills/vds-skill/vds-scripts/docs/phases/phase125_skill_runtime_closure_20260321.md +0 -91
  340. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/closure-handoff-summary-2026-03-23.md +0 -290
  341. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/remaining-risk-register-2026-03-25.md +0 -143
  342. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/verification-evidence-2026-03-23.md +0 -135
  343. package/skills/vds-skill/vds-scripts/docs/v0-sunset-known-issues.md +0 -88
  344. package/skills/vds-skill/vds-scripts/docs/vi/TRANSLATION-BACKLOG.md +0 -72
  345. package/skills/vds-skill/vds-scripts/docs/vi/agents/README.md +0 -41
  346. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/features-overview.md +0 -29
  347. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/index.md +0 -14
  348. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/runtime-verification-and-gap-reporting.md +0 -129
  349. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/whats-new.md +0 -37
  350. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/who-ecosystem-introduction.md +0 -21
  351. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/who-ecosystem-model.md +0 -36
  352. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/02-using-vds-ai-memory.md +0 -100
  353. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/03-memory-cross-agent.md +0 -243
  354. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/04-using-progress-reports.md +0 -242
  355. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/08-semantic-search.md +0 -16
  356. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/choose-the-right-command-or-skill.md +0 -36
  357. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/decision-tree.md +0 -77
  358. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/first-audit-run.md +0 -85
  359. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/index.md +0 -21
  360. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +0 -156
  361. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +0 -174
  362. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +0 -147
  363. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +0 -139
  364. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +0 -151
  365. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +0 -149
  366. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +0 -144
  367. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-all-project-preparation.md +0 -213
  368. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-bounded-parallel-analysis.md +0 -125
  369. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-confluence-upload-recovery.md +0 -206
  370. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase132-department-preparation.md +0 -146
  371. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/tips-and-tricks.md +0 -34
  372. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/troubleshooting-guide.md +0 -36
  373. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/agent-operational-contract.md +0 -98
  374. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/audit-triage-playbook.md +0 -258
  375. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/bitbucket-orchestrator.md +0 -30
  376. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/brd-orchestrator.md +0 -29
  377. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/capability-coverage-review.md +0 -46
  378. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/circular-dependency-orchestrator.md +0 -29
  379. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-commands.md +0 -409
  380. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-development-standards.md +0 -19
  381. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-help-matrix.md +0 -71
  382. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/common-errors.md +0 -133
  383. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/configuration-reference.md +0 -25
  384. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/confluence-orchestrator.md +0 -30
  385. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/db-query-orchestrator.md +0 -34
  386. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/diagrams-orchestrator.md +0 -31
  387. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/elastic-orchestrator.md +0 -30
  388. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/evolution-orchestrator.md +0 -31
  389. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/excel-orchestrator.md +0 -60
  390. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/git-orchestrator.md +0 -31
  391. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/google-sheets-orchestrator.md +0 -60
  392. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/grafana-orchestrator.md +0 -30
  393. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/hexagonal-orchestrator.md +0 -73
  394. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/index.md +0 -25
  395. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/intellij-orchestrator.md +0 -59
  396. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/jira-orchestrator.md +0 -32
  397. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/links-orchestrator.md +0 -66
  398. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/lsp-orchestrator.md +0 -60
  399. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/markdown-orchestrator.md +0 -62
  400. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/mcp-orchestrator.md +0 -34
  401. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/memory-orchestrator.md +0 -45
  402. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/metabase-orchestrator.md +0 -30
  403. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/multi-agent-orchestrator.md +0 -61
  404. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/openapi-orchestrator.md +0 -66
  405. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/orchestrator-architecture.md +0 -24
  406. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/orchestrator-index.md +0 -73
  407. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/pdf-orchestrator.md +0 -30
  408. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/portable-paths-and-config.md +0 -123
  409. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/portable-paths-validation-matrix.md +0 -131
  410. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/progress-orchestrator.md +0 -43
  411. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/progress-report-cli.md +0 -217
  412. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/public-interface-orchestrator.md +0 -82
  413. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/research-orchestrator.md +0 -45
  414. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/schema-orchestrator.md +0 -66
  415. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/search-tools.md +0 -19
  416. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/skills-reference.md +0 -27
  417. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/sonarqube-orchestrator.md +0 -71
  418. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/spec-orchestrator.md +0 -56
  419. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/structure-orchestrator.md +0 -78
  420. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/system-requirements.md +0 -30
  421. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/tasks-orchestrator.md +0 -45
  422. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/validation-and-sync-notes.md +0 -26
  423. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/vds-ai-memory-api.md +0 -53
  424. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/vds-cli-reference.md +0 -34
  425. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/who-capability-inventory.md +0 -98
  426. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/who-capability-routing-matrix.md +0 -16
  427. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/feature-progression-guide.md +0 -124
  428. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/index.md +0 -13
  429. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/quick-start.md +0 -30
  430. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/who-skills-and-scripts-onboarding.md +0 -42
  431. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/zero-to-productive-developer.md +0 -137
  432. package/skills/vds-skill/vds-scripts/elastic_orchestrator/README.md +0 -450
  433. package/skills/vds-skill/vds-scripts/elastic_orchestrator/pyproject.toml +0 -97
  434. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/__init__.py +0 -81
  435. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/cli.py +0 -652
  436. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/client.py +0 -743
  437. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/config.py +0 -208
  438. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/errors.py +0 -34
  439. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/py.typed +0 -0
  440. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/__init__.py +0 -0
  441. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/conftest.py +0 -227
  442. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_client.py +0 -990
  443. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_config.py +0 -268
  444. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_e2e_verification.py +0 -272
  445. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_errors.py +0 -78
  446. package/skills/vds-skill/vds-scripts/excel_orchestrator/README.md +0 -288
  447. package/skills/vds-skill/vds-scripts/excel_orchestrator/RESEARCH_BASED_UPDATES_REPORT.md +0 -261
  448. package/skills/vds-skill/vds-scripts/excel_orchestrator/add_essential_missing_effort.py +0 -255
  449. package/skills/vds-skill/vds-scripts/excel_orchestrator/adjust_effort_complexity.py +0 -184
  450. package/skills/vds-skill/vds-scripts/excel_orchestrator/brd_analysis_and_task_breakdown.py +0 -632
  451. package/skills/vds-skill/vds-scripts/excel_orchestrator/brd_analysis_comprehensive.py +0 -1029
  452. package/skills/vds-skill/vds-scripts/excel_orchestrator/check_overlaps_and_brd_coverage.py +0 -570
  453. package/skills/vds-skill/vds-scripts/excel_orchestrator/clean_remarks_column.py +0 -127
  454. package/skills/vds-skill/vds-scripts/excel_orchestrator/comprehensive_brd_check.py +0 -322
  455. package/skills/vds-skill/vds-scripts/excel_orchestrator/create_buffered_summary.py +0 -119
  456. package/skills/vds-skill/vds-scripts/excel_orchestrator/create_service_totals_sheet.py +0 -118
  457. package/skills/vds-skill/vds-scripts/excel_orchestrator/examples/basic_operations.py +0 -85
  458. package/skills/vds-skill/vds-scripts/excel_orchestrator/expand_all_tasks.py +0 -341
  459. package/skills/vds-skill/vds-scripts/excel_orchestrator/expand_tasks.py +0 -304
  460. package/skills/vds-skill/vds-scripts/excel_orchestrator/fill_brd_references.py +0 -347
  461. package/skills/vds-skill/vds-scripts/excel_orchestrator/fill_remarks_and_colors.py +0 -132
  462. package/skills/vds-skill/vds-scripts/excel_orchestrator/finalize_brd_and_cleanup.py +0 -295
  463. package/skills/vds-skill/vds-scripts/excel_orchestrator/finalize_brd_coverage.py +0 -327
  464. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_all_formulas.py +0 -99
  465. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_detail_presentation.py +0 -113
  466. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_presentation_and_effort.py +0 -116
  467. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_presentation_consistency.py +0 -231
  468. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_remarks_matching.py +0 -179
  469. package/skills/vds-skill/vds-scripts/excel_orchestrator/group_tasks_by_service_id.py +0 -210
  470. package/skills/vds-skill/vds-scripts/excel_orchestrator/increase_brd_coverage.py +0 -497
  471. package/skills/vds-skill/vds-scripts/excel_orchestrator/increase_effort_complexity.py +0 -155
  472. package/skills/vds-skill/vds-scripts/excel_orchestrator/organize_and_deduplicate.py +0 -273
  473. package/skills/vds-skill/vds-scripts/excel_orchestrator/pyproject.toml +0 -64
  474. package/skills/vds-skill/vds-scripts/excel_orchestrator/rebuild_all_formulas.py +0 -146
  475. package/skills/vds-skill/vds-scripts/excel_orchestrator/remove_base_multiplier_and_check_duplicates.py +0 -310
  476. package/skills/vds-skill/vds-scripts/excel_orchestrator/remove_duplicate_brd_tasks.py +0 -137
  477. package/skills/vds-skill/vds-scripts/excel_orchestrator/research_based_updates.py +0 -457
  478. package/skills/vds-skill/vds-scripts/excel_orchestrator/restore_e_values.py +0 -172
  479. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/__init__.py +0 -5
  480. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/cli.py +0 -746
  481. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/config.py +0 -74
  482. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/converters.py +0 -226
  483. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/errors.py +0 -88
  484. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/excel_client.py +0 -443
  485. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/formatters.py +0 -211
  486. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/logging.py +0 -57
  487. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/source_contract.py +0 -29
  488. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/target_state_status.py +0 -837
  489. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/ulnc_alignment.py +0 -1291
  490. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/validators.py +0 -164
  491. package/skills/vds-skill/vds-scripts/excel_orchestrator/sync_detail_and_total_sheets.py +0 -211
  492. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/__init__.py +0 -1
  493. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/conftest.py +0 -36
  494. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_cli.py +0 -383
  495. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_excel_client.py +0 -129
  496. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_ulnc_alignment.py +0 -373
  497. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_validators.py +0 -64
  498. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_api_database_effort.py +0 -261
  499. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_buffers_inline.py +0 -115
  500. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_complex_services_and_add_new.py +0 -336
  501. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_responsibility_and_fix_rows.py +0 -208
  502. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_task_breakdown_vietnamese.py +0 -309
  503. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_vietnamese_and_responsibility.py +0 -415
  504. package/skills/vds-skill/vds-scripts/excel_orchestrator/verify_brd_coverage_comprehensive.py +0 -401
  505. package/skills/vds-skill/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +0 -119
  506. package/skills/vds-skill/vds-scripts/git_orchestrator/README.md +0 -286
  507. package/skills/vds-skill/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +0 -152
  508. package/skills/vds-skill/vds-scripts/git_orchestrator/pyproject.toml +0 -37
  509. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +0 -30
  510. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +0 -4
  511. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/branch_probe.py +0 -271
  512. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +0 -892
  513. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +0 -63
  514. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +0 -249
  515. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +0 -1647
  516. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/protocols.py +0 -35
  517. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +0 -55
  518. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
  519. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_cli_settings.py +0 -19
  520. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_integration.py +0 -79
  521. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_manifest.py +0 -79
  522. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_orchestrator.py +0 -207
  523. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_public_api.py +0 -235
  524. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_resilience.py +0 -343
  525. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/__init__.py +0 -0
  526. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/test_branch_probe.py +0 -327
  527. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/test_protocols.py +0 -132
  528. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/README.md +0 -241
  529. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/pyproject.toml +0 -45
  530. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/__init__.py +0 -69
  531. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/cli.py +0 -568
  532. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/client.py +0 -186
  533. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/config.py +0 -46
  534. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/errors.py +0 -41
  535. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/__init__.py +0 -1
  536. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/conftest.py +0 -1
  537. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/__init__.py +0 -1
  538. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_cli.py +0 -212
  539. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_client.py +0 -24
  540. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_config.py +0 -16
  541. package/skills/vds-skill/vds-scripts/grafana_orchestrator/README.md +0 -572
  542. package/skills/vds-skill/vds-scripts/grafana_orchestrator/pyproject.toml +0 -102
  543. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/__init__.py +0 -78
  544. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/cli.py +0 -455
  545. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/client.py +0 -700
  546. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/config.py +0 -243
  547. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/errors.py +0 -34
  548. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/py.typed +0 -1
  549. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/__init__.py +0 -1
  550. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/conftest.py +0 -308
  551. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_client.py +0 -458
  552. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_config.py +0 -203
  553. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_errors.py +0 -78
  554. package/skills/vds-skill/vds-scripts/jira_orchestrator/README.md +0 -864
  555. package/skills/vds-skill/vds-scripts/jira_orchestrator/pyproject.toml +0 -43
  556. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +0 -65
  557. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +0 -1685
  558. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +0 -2806
  559. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +0 -168
  560. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +0 -34
  561. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +0 -66
  562. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/__init__.py +0 -1
  563. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/conftest.py +0 -86
  564. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +0 -54
  565. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +0 -91
  566. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +0 -56
  567. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +0 -45
  568. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +0 -119
  569. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +0 -53
  570. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +0 -41
  571. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +0 -42
  572. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +0 -75
  573. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +0 -90
  574. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +0 -116
  575. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +0 -181
  576. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +0 -43
  577. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +0 -179
  578. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_agile.py +0 -304
  579. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_application_properties.py +0 -243
  580. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_backlog.py +0 -91
  581. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +0 -403
  582. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_cli.py +0 -108
  583. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_components.py +0 -119
  584. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_config.py +0 -166
  585. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_dashboard.py +0 -122
  586. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +0 -207
  587. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_errors.py +0 -72
  588. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_filter_management.py +0 -411
  589. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +0 -179
  590. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_links.py +0 -257
  591. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +0 -189
  592. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_link_types.py +0 -407
  593. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_parse_set.py +0 -37
  594. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_permissions.py +0 -343
  595. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_reindex.py +0 -81
  596. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_remote_links.py +0 -269
  597. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +0 -202
  598. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +0 -109
  599. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_user_management.py +0 -246
  600. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_version_management.py +0 -503
  601. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_watchers.py +0 -116
  602. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_worklog.py +0 -243
  603. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/README.md +0 -864
  604. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/pyproject.toml +0 -43
  605. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/__init__.py +0 -65
  606. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/adapter.py +0 -1689
  607. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/cli.py +0 -2799
  608. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/config.py +0 -137
  609. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/errors.py +0 -34
  610. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/reporting.py +0 -65
  611. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/__init__.py +0 -1
  612. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/conftest.py +0 -86
  613. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_agile_list_payloads.py +0 -54
  614. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_bulk_operations.py +0 -101
  615. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_components.py +0 -64
  616. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_createmeta.py +0 -45
  617. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_dashboard.py +0 -135
  618. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_issue_properties.py +0 -63
  619. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_permissions_compat.py +0 -42
  620. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_reindex.py +0 -42
  621. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_remote_links.py +0 -89
  622. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_transitions.py +0 -91
  623. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_user_management.py +0 -130
  624. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_version_management.py +0 -189
  625. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_watchers.py +0 -49
  626. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_advanced_search.py +0 -213
  627. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_agile.py +0 -334
  628. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_application_properties.py +0 -261
  629. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_backlog.py +0 -91
  630. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_bulk_operations.py +0 -443
  631. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_cli.py +0 -106
  632. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_components.py +0 -133
  633. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_config.py +0 -166
  634. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_dashboard.py +0 -130
  635. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_discover_fields.py +0 -207
  636. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_errors.py +0 -61
  637. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_filter_management.py +0 -478
  638. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_archiving.py +0 -181
  639. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_links.py +0 -257
  640. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_properties.py +0 -203
  641. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_link_types.py +0 -426
  642. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_parse_set.py +0 -37
  643. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_permissions.py +0 -358
  644. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_reindex.py +0 -81
  645. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_remote_links.py +0 -292
  646. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_security_schemes.py +0 -218
  647. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_transitions_changelog.py +0 -121
  648. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_user_management.py +0 -283
  649. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_version_management.py +0 -561
  650. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_watchers.py +0 -128
  651. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_worklog.py +0 -265
  652. package/skills/vds-skill/vds-scripts/llms.txt +0 -159
  653. package/skills/vds-skill/vds-scripts/markdown_orchestrator/README.md +0 -72
  654. package/skills/vds-skill/vds-scripts/markdown_orchestrator/pyproject.toml +0 -39
  655. package/skills/vds-skill/vds-scripts/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.py +0 -5
  656. package/skills/vds-skill/vds-scripts/markdown_orchestrator/src/vds_markdown_orchestrator/cli.py +0 -102
  657. package/skills/vds-skill/vds-scripts/mcp_server/Dockerfile +0 -63
  658. package/skills/vds-skill/vds-scripts/mcp_server/README.md +0 -140
  659. package/skills/vds-skill/vds-scripts/mcp_server/pyproject.toml +0 -41
  660. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +0 -3
  661. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/config.py +0 -36
  662. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/server.py +0 -111
  663. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +0 -15
  664. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +0 -47
  665. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +0 -53
  666. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +0 -71
  667. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +0 -63
  668. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/vidp_tools.py +0 -64
  669. package/skills/vds-skill/vds-scripts/mcp_server/tests/__init__.py +0 -1
  670. package/skills/vds-skill/vds-scripts/mcp_server/tests/conftest.py +0 -31
  671. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/__init__.py +0 -1
  672. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +0 -28
  673. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +0 -28
  674. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_git_tools.py +0 -35
  675. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +0 -35
  676. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/__init__.py +0 -6
  677. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/conftest.py +0 -51
  678. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +0 -40
  679. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +0 -39
  680. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +0 -50
  681. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.dockerignore +0 -93
  682. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.env.example +0 -40
  683. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.ruff_rules.py +0 -350
  684. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.yamllint.yml +0 -43
  685. package/skills/vds-skill/vds-scripts/pdf_orchestrator/DEVELOPMENT_PLAN.md +0 -80
  686. package/skills/vds-skill/vds-scripts/pdf_orchestrator/Dockerfile +0 -87
  687. package/skills/vds-skill/vds-scripts/pdf_orchestrator/README.md +0 -608
  688. package/skills/vds-skill/vds-scripts/pdf_orchestrator/cli_verification_test/test.md +0 -6
  689. package/skills/vds-skill/vds-scripts/pdf_orchestrator/cli_verification_test/test.pdf +0 -0
  690. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/alertmanager.yml +0 -83
  691. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/prometheus.prod.yml +0 -98
  692. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/prometheus.yml +0 -40
  693. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/redis.conf +0 -78
  694. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/COMPETITIVE_ANALYSIS_REPORT.md +0 -309
  695. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/FEATURES_GUIDE.md +0 -518
  696. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/MULTI_USER_DEPLOYMENT_GUIDE.md +0 -615
  697. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/USER_GUIDE.md +0 -829
  698. package/skills/vds-skill/vds-scripts/pdf_orchestrator/pyproject.toml +0 -87
  699. package/skills/vds-skill/vds-scripts/pdf_orchestrator/pytest.ini +0 -71
  700. package/skills/vds-skill/vds-scripts/pdf_orchestrator/ruff.toml +0 -6
  701. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/debug_security_report.py +0 -59
  702. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/demo_library_selector.py +0 -109
  703. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/generate_project_stats.py +0 -52
  704. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/generate_styled_pdf.py +0 -95
  705. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/migrate_render_pdfs.py +0 -285
  706. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/setup_team.bat +0 -283
  707. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/setup_team.sh +0 -324
  708. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/__init__.py +0 -5
  709. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/cli.py +0 -542
  710. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/config.py +0 -33
  711. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/README.md +0 -650
  712. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/__init__.py +0 -0
  713. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/conftest.py +0 -520
  714. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/requirements.txt +0 -51
  715. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/run_tests.py +0 -659
  716. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/test_config.py +0 -36
  717. package/skills/vds-skill/vds-scripts/platform_core/pyproject.toml +0 -49
  718. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/__init__.py +0 -16
  719. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/alembic/__init__.py +0 -18
  720. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/alembic/runtime.py +0 -139
  721. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/config.py +0 -88
  722. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/credentials.py +0 -40
  723. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/env.py +0 -24
  724. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/errors.py +0 -127
  725. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/__init__.py +0 -18
  726. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/auth.py +0 -32
  727. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/errors.py +0 -47
  728. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/pagination.py +0 -65
  729. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/retry.py +0 -62
  730. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/stack.py +0 -61
  731. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/logging.py +0 -132
  732. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/protocols.py +0 -77
  733. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/serialization.py +0 -80
  734. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/severity.py +0 -175
  735. package/skills/vds-skill/vds-scripts/platform_core/tests/__init__.py +0 -0
  736. package/skills/vds-skill/vds-scripts/platform_core/tests/conftest.py +0 -1
  737. package/skills/vds-skill/vds-scripts/platform_core/tests/test_alembic_runtime.py +0 -300
  738. package/skills/vds-skill/vds-scripts/platform_core/tests/test_auth.py +0 -84
  739. package/skills/vds-skill/vds-scripts/platform_core/tests/test_config.py +0 -83
  740. package/skills/vds-skill/vds-scripts/platform_core/tests/test_credentials.py +0 -73
  741. package/skills/vds-skill/vds-scripts/platform_core/tests/test_env.py +0 -56
  742. package/skills/vds-skill/vds-scripts/platform_core/tests/test_errors.py +0 -201
  743. package/skills/vds-skill/vds-scripts/platform_core/tests/test_errors_http.py +0 -74
  744. package/skills/vds-skill/vds-scripts/platform_core/tests/test_http_settings.py +0 -116
  745. package/skills/vds-skill/vds-scripts/platform_core/tests/test_logging.py +0 -148
  746. package/skills/vds-skill/vds-scripts/platform_core/tests/test_pagination.py +0 -153
  747. package/skills/vds-skill/vds-scripts/platform_core/tests/test_protocols.py +0 -132
  748. package/skills/vds-skill/vds-scripts/platform_core/tests/test_retry.py +0 -151
  749. package/skills/vds-skill/vds-scripts/platform_core/tests/test_serialization.py +0 -92
  750. package/skills/vds-skill/vds-scripts/platform_core/tests/test_severity.py +0 -178
  751. package/skills/vds-skill/vds-scripts/platform_core/tests/test_stack.py +0 -130
  752. package/skills/vds-skill/vds-scripts/platform_core/uv.lock +0 -341
  753. package/skills/vds-skill/vds-scripts/pyproject.toml +0 -145
  754. package/skills/vds-skill/vds-scripts/pyrightconfig.json +0 -82
  755. package/skills/vds-skill/vds-scripts/repo-manifest.yaml +0 -380
  756. package/skills/vds-skill/vds-scripts/repo-manifest.yaml.example +0 -25
  757. package/skills/vds-skill/vds-scripts/ruff.toml +0 -100
  758. package/skills/vds-skill/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +0 -706
  759. package/skills/vds-skill/vds-scripts/scripts/BRD-Validation-README.md +0 -308
  760. package/skills/vds-skill/vds-scripts/scripts/README.md +0 -271
  761. package/skills/vds-skill/vds-scripts/scripts/_validate_alias_phase2.py +0 -137
  762. package/skills/vds-skill/vds-scripts/scripts/audit-cli-patterns.sh +0 -135
  763. package/skills/vds-skill/vds-scripts/scripts/audit-dashboard.sh +0 -525
  764. package/skills/vds-skill/vds-scripts/scripts/backup.sh +0 -123
  765. package/skills/vds-skill/vds-scripts/scripts/bootstrap_uv.sh +0 -69
  766. package/skills/vds-skill/vds-scripts/scripts/brd-validation-environment.json +0 -51
  767. package/skills/vds-skill/vds-scripts/scripts/brd-validation-test-results.json +0 -13023
  768. package/skills/vds-skill/vds-scripts/scripts/brd_coverage_report.json +0 -276
  769. package/skills/vds-skill/vds-scripts/scripts/check-future-annotations.py +0 -22
  770. package/skills/vds-skill/vds-scripts/scripts/check-invalid-symlinks.py +0 -183
  771. package/skills/vds-skill/vds-scripts/scripts/check-no-debug-markers.py +0 -21
  772. package/skills/vds-skill/vds-scripts/scripts/check-no-unittest.py +0 -21
  773. package/skills/vds-skill/vds-scripts/scripts/ci/assert_no_openspace_commits.sh +0 -37
  774. package/skills/vds-skill/vds-scripts/scripts/ci/verify_branch_protection.sh +0 -64
  775. package/skills/vds-skill/vds-scripts/scripts/closure/phase1_check.sh +0 -483
  776. package/skills/vds-skill/vds-scripts/scripts/closure/phase2_check.sh +0 -500
  777. package/skills/vds-skill/vds-scripts/scripts/create_memory_session.py +0 -36
  778. package/skills/vds-skill/vds-scripts/scripts/deploy-bootstrap.sh +0 -201
  779. package/skills/vds-skill/vds-scripts/scripts/deployment/load_docker_images_offline.sh +0 -90
  780. package/skills/vds-skill/vds-scripts/scripts/dev/cli_smoke.sh +0 -259
  781. package/skills/vds-skill/vds-scripts/scripts/final_completion_report.md +0 -139
  782. package/skills/vds-skill/vds-scripts/scripts/folder_structure_report.json +0 -321
  783. package/skills/vds-skill/vds-scripts/scripts/generate_completion_report.py +0 -132
  784. package/skills/vds-skill/vds-scripts/scripts/generate_intellij_modules.py +0 -154
  785. package/skills/vds-skill/vds-scripts/scripts/init-pgbouncer-userlist.sh +0 -154
  786. package/skills/vds-skill/vds-scripts/scripts/link_integrity_report.json +0 -807
  787. package/skills/vds-skill/vds-scripts/scripts/move_audit_artifact_pages.py +0 -252
  788. package/skills/vds-skill/vds-scripts/scripts/move_audit_artifact_pages_rest.py +0 -165
  789. package/skills/vds-skill/vds-scripts/scripts/move_wrong_dept_pages.py +0 -235
  790. package/skills/vds-skill/vds-scripts/scripts/openspace_bootstrap.sh +0 -56
  791. package/skills/vds-skill/vds-scripts/scripts/openspace_common.sh +0 -75
  792. package/skills/vds-skill/vds-scripts/scripts/openspace_doctor.sh +0 -61
  793. package/skills/vds-skill/vds-scripts/scripts/openspace_sync_shadow.sh +0 -65
  794. package/skills/vds-skill/vds-scripts/scripts/phase7-baseline.sh +0 -77
  795. package/skills/vds-skill/vds-scripts/scripts/preflight/env_check.sh +0 -102
  796. package/skills/vds-skill/vds-scripts/scripts/repair_autopay_reports.sh +0 -173
  797. package/skills/vds-skill/vds-scripts/scripts/rollback_drill.sh +0 -659
  798. package/skills/vds-skill/vds-scripts/scripts/run-audit-in-tmux.sh +0 -286
  799. package/skills/vds-skill/vds-scripts/scripts/run-department-audit.sh +0 -495
  800. package/skills/vds-skill/vds-scripts/scripts/run-project-audit.sh +0 -267
  801. package/skills/vds-skill/vds-scripts/scripts/save_intellij_memories.py +0 -112
  802. package/skills/vds-skill/vds-scripts/scripts/save_memories_to_vds_ai.py +0 -81
  803. package/skills/vds-skill/vds-scripts/scripts/save_memories_vds_style.py +0 -133
  804. package/skills/vds-skill/vds-scripts/scripts/search_intellij_memories.py +0 -48
  805. package/skills/vds-skill/vds-scripts/scripts/setup_intellij_workspace.py +0 -71
  806. package/skills/vds-skill/vds-scripts/scripts/smoke-test-deploy.sh +0 -137
  807. package/skills/vds-skill/vds-scripts/scripts/smoke_deploy_lib.py +0 -205
  808. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/README.md +0 -89
  809. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +0 -27
  810. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/coordination.sh +0 -114
  811. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +0 -25
  812. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/docs_root.sh +0 -22
  813. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +0 -22
  814. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +0 -25
  815. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +0 -17
  816. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +0 -25
  817. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/sync_confluence.sh +0 -30
  818. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/update_dependencies.sh +0 -19
  819. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_links.sh +0 -86
  820. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_markdown.sh +0 -52
  821. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_schemas.sh +0 -26
  822. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_structure.sh +0 -98
  823. package/skills/vds-skill/vds-scripts/scripts/tests/__init__.py +0 -1
  824. package/skills/vds-skill/vds-scripts/scripts/tests/test_dockerfile_correctness.py +0 -815
  825. package/skills/vds-skill/vds-scripts/scripts/tests/test_makefile_loadouts.py +0 -560
  826. package/skills/vds-skill/vds-scripts/scripts/tests/test_smoke_deploy.py +0 -313
  827. package/skills/vds-skill/vds-scripts/scripts/tests/test_verify_alembic.py +0 -581
  828. package/skills/vds-skill/vds-scripts/scripts/tests/test_verify_infra_topology.py +0 -254
  829. package/skills/vds-skill/vds-scripts/scripts/update_modules_xml.py +0 -194
  830. package/skills/vds-skill/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +0 -128
  831. package/skills/vds-skill/vds-scripts/scripts/uv-workspace-alignment-verification-2026-04-18.md +0 -100
  832. package/skills/vds-skill/vds-scripts/scripts/validate-cli-standardization.sh +0 -188
  833. package/skills/vds-skill/vds-scripts/scripts/validate_brd_coverage.py +0 -197
  834. package/skills/vds-skill/vds-scripts/scripts/validate_folder_structure.py +0 -234
  835. package/skills/vds-skill/vds-scripts/scripts/validate_link_integrity.py +0 -274
  836. package/skills/vds-skill/vds-scripts/scripts/vami017-caller-compat-report.md +0 -62
  837. package/skills/vds-skill/vds-scripts/scripts/vami017-phase-b-scaffold-notes.md +0 -79
  838. package/skills/vds-skill/vds-scripts/scripts/vds_sh_helpers.sh +0 -180
  839. package/skills/vds-skill/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +0 -26
  840. package/skills/vds-skill/vds-scripts/scripts/verify-infra-topology.py +0 -868
  841. package/skills/vds-skill/vds-scripts/scripts/verify-memory-cli-e2e.sh +0 -598
  842. package/skills/vds-skill/vds-scripts/scripts/verify-worktree-features.sh +0 -306
  843. package/skills/vds-skill/vds-scripts/scripts/worktree-add.sh +0 -128
  844. package/skills/vds-skill/vds-scripts/scripts/worktree-remove.sh +0 -112
  845. package/skills/vds-skill/vds-scripts/scripts/worktree_compose.sh +0 -269
  846. package/skills/vds-skill/vds-scripts/scripts/worktree_uv.sh +0 -77
  847. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/IMPLEMENTATION_AUDIT.md +0 -376
  848. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/README.md +0 -507
  849. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/pyproject.toml +0 -106
  850. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/scripts/ensure_symlink.sh +0 -38
  851. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/__init__.py +0 -164
  852. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/batch.py +0 -212
  853. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/cli.py +0 -1407
  854. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/client.py +0 -608
  855. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/config.py +0 -260
  856. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/diff.py +0 -220
  857. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/errors.py +0 -34
  858. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/external_sca.py +0 -932
  859. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/portfolio.py +0 -225
  860. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/pr.py +0 -505
  861. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/reports.py +0 -342
  862. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/scanner.py +0 -351
  863. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/webhooks.py +0 -269
  864. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/__init__.py +0 -0
  865. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/conftest.py +0 -134
  866. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_batch.py +0 -419
  867. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_config.py +0 -145
  868. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_errors.py +0 -78
  869. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_external_sca.py +0 -466
  870. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_pr.py +0 -471
  871. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_reports.py +0 -511
  872. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_webhooks.py +0 -660
  873. package/skills/vds-skill/vds-scripts/uv.lock +0 -5046
  874. package/skills/vds-skill/vds-scripts/vds_agent_core/CHANGELOG.md +0 -36
  875. package/skills/vds-skill/vds-scripts/vds_agent_core/README.md +0 -453
  876. package/skills/vds-skill/vds-scripts/vds_agent_core/docs/PHASE9A_ASSESSMENT.md +0 -50
  877. package/skills/vds-skill/vds-scripts/vds_agent_core/docs/embedding.md +0 -468
  878. package/skills/vds-skill/vds-scripts/vds_agent_core/pyproject.toml +0 -51
  879. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/__init__.py +0 -29
  880. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/__init__.py +0 -26
  881. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/hooks.py +0 -119
  882. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/loop.py +0 -864
  883. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/tools.py +0 -41
  884. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/config.py +0 -252
  885. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/__init__.py +0 -55
  886. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/_cascade.py +0 -143
  887. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/budget.py +0 -353
  888. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/cache.py +0 -373
  889. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/embedding.py +0 -815
  890. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/provider.py +0 -173
  891. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/schemas.py +0 -45
  892. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/__init__.py +0 -77
  893. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/decorators.py +0 -258
  894. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/jsonl_exporter.py +0 -236
  895. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/tracer.py +0 -497
  896. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/profiles.py +0 -2015
  897. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/runtime/__init__.py +0 -0
  898. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/runtime/agent_id.py +0 -60
  899. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/security/__init__.py +0 -13
  900. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/security/credentials.py +0 -106
  901. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/__init__.py +0 -1
  902. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/executor.py +0 -238
  903. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/manager.py +0 -381
  904. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/policy.py +0 -568
  905. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/__init__.py +0 -19
  906. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/langgraph_runner.py +0 -102
  907. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/protocols.py +0 -81
  908. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/__init__.py +0 -0
  909. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/conftest.py +0 -62
  910. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/__init__.py +0 -0
  911. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_audit_loop_hooks_integration.py +0 -135
  912. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_audit_observability_integration.py +0 -246
  913. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_public_api_stability.py +0 -91
  914. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/__init__.py +0 -0
  915. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/__init__.py +0 -0
  916. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_call_site_parallelism.py +0 -30
  917. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_dimension_guardrail.py +0 -25
  918. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_drop_in_provider_extensibility.py +0 -76
  919. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding.py +0 -393
  920. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_cache.py +0 -302
  921. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_extra.py +0 -696
  922. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_subclass.py +0 -49
  923. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_no_provider_leakage_in_env.py +0 -34
  924. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_provider_auto_route.py +0 -48
  925. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_runtime_log_clean.py +0 -111
  926. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_w7_logic_fixes.py +0 -219
  927. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/__init__.py +0 -0
  928. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_embedding_block_parser.py +0 -194
  929. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_env_resolver_allowlist.py +0 -141
  930. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_profile_authorization.py +0 -158
  931. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_profiles_w3_extra.py +0 -547
  932. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_real_audit_profile_compat.py +0 -129
  933. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/__init__.py +0 -0
  934. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/test_for_agent.py +0 -322
  935. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/test_w9_cascade_edges.py +0 -369
  936. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/security/__init__.py +0 -0
  937. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/security/test_credentials.py +0 -132
  938. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agent_loop.py +0 -663
  939. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agent_loop_coverage.py +0 -429
  940. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agents_hooks_defaults.py +0 -22
  941. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget.py +0 -155
  942. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget_coverage.py +0 -264
  943. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget_tracking_only.py +0 -71
  944. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_cache.py +0 -251
  945. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_cache_context.py +0 -62
  946. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_config.py +0 -155
  947. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_langgraph_runner.py +0 -45
  948. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_langgraph_runner_coverage.py +0 -98
  949. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_llm_cache_deep.py +0 -113
  950. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_decorators.py +0 -697
  951. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_hooks.py +0 -217
  952. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_jsonl_exporter.py +0 -542
  953. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_jsonl_wiring.py +0 -313
  954. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_tracer.py +0 -896
  955. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_profiles.py +0 -1571
  956. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_profiles_coverage.py +0 -444
  957. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_provider.py +0 -316
  958. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_schemas.py +0 -63
  959. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_executor.py +0 -297
  960. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_manager.py +0 -370
  961. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_manager_coverage.py +0 -364
  962. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_policy.py +0 -402
  963. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_rubric.py +0 -47
  964. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_tools.py +0 -51
  965. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_workflow_protocols.py +0 -136
  966. package/skills/vds-skill/vds-scripts/vds_cli/README.md +0 -201
  967. package/skills/vds-skill/vds-scripts/vds_cli/VERIFICATION_REPORT.md +0 -41
  968. package/skills/vds-skill/vds-scripts/vds_cli/pyproject.toml +0 -50
  969. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/__init__.py +0 -3
  970. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/assets/git-credential-helper.py +0 -235
  971. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/cli.py +0 -1126
  972. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/commands/__init__.py +0 -1
  973. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/commands/lint_cli.py +0 -389
  974. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/confluence_sync.py +0 -846
  975. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/__init__.py +0 -7
  976. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/funnel.py +0 -105
  977. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/scanner.py +0 -211
  978. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/freshness/report.py +0 -90
  979. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/types.py +0 -27
  980. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_cmd.py +0 -672
  981. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_metrics.py +0 -75
  982. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +0 -1171
  983. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem/__init__.py +0 -39
  984. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem/report.py +0 -439
  985. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem_docs.py +0 -164
  986. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/env.py +0 -111
  987. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/env_git_helper.py +0 -281
  988. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +0 -3
  989. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +0 -173
  990. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/router.py +0 -232
  991. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/skills_cmd.py +0 -274
  992. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/sync_api.py +0 -613
  993. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/sync_service.py +0 -283
  994. package/skills/vds-skill/vds-scripts/vds_cli/tests/conftest.py +0 -62
  995. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_env_git_helper_lifecycle.py +0 -261
  996. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_git_credential_helper.py +0 -240
  997. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_router_help_proxy.py +0 -43
  998. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_cli.py +0 -241
  999. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_cli_DOC004.py +0 -110
  1000. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_confluence_sync.py +0 -315
  1001. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_confluence_sync_wave7.py +0 -375
  1002. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_consumption_funnel.py +0 -106
  1003. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_consumption_scanner.py +0 -144
  1004. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_cmd.py +0 -89
  1005. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_cmd_wave8.py +0 -161
  1006. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_metrics.py +0 -16
  1007. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_quality_score.py +0 -61
  1008. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +0 -417
  1009. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_cli_dashboard.py +0 -667
  1010. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_cli_dashboard_rendering.py +0 -143
  1011. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_docs.py +0 -63
  1012. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_env.py +0 -85
  1013. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_freshness_report.py +0 -125
  1014. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_lint_cli.py +0 -224
  1015. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_router.py +0 -101
  1016. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_skills_cmd.py +0 -419
  1017. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_sync_api.py +0 -357
  1018. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_sync_service.py +0 -170
  1019. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/conftest.py +0 -51
  1020. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +0 -32
  1021. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +0 -32
  1022. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_jira_real.py +0 -40
  1023. package/skills/vds-skill/vds-scripts/vds_cli_common/README.md +0 -190
  1024. package/skills/vds-skill/vds-scripts/vds_cli_common/pyproject.toml +0 -96
  1025. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +0 -36
  1026. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/app.py +0 -55
  1027. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +0 -139
  1028. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +0 -201
  1029. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +0 -163
  1030. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +0 -440
  1031. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +0 -284
  1032. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +0 -78
  1033. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +0 -211
  1034. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +0 -85
  1035. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/__init__.py +0 -0
  1036. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_app.py +0 -126
  1037. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_completers.py +0 -148
  1038. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_context.py +0 -192
  1039. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_env.py +0 -235
  1040. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_errors.py +0 -275
  1041. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_output.py +0 -229
  1042. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_paths.py +0 -61
  1043. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_testing.py +0 -138
  1044. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_version.py +0 -64
  1045. package/skills/vds-skill/vds-scripts/vidp_orchestrator/README.md +0 -31
  1046. package/skills/vds-skill/vds-scripts/vidp_orchestrator/pyproject.toml +0 -50
  1047. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/__init__.py +0 -26
  1048. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/cli.py +0 -246
  1049. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/client.py +0 -104
  1050. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/config.py +0 -82
  1051. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.json +0 -3
  1052. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.py +0 -130
  1053. package/skills/vds-skill/vds-scripts-skill/.openskills.json +0 -6
  1054. package/skills/vds-skill/vds-scripts-skill/QUALITY.md +0 -44
  1055. package/skills/vds-skill/vds-scripts-skill/SKILL.md +0 -132
  1056. package/skills/vds-skill/vds-scripts-skill/references/audit-commands.md +0 -171
  1057. package/skills/vds-skill/vds-scripts-skill/references/capability-index.md +0 -34
  1058. package/skills/vds-skill/vds-scripts-skill/references/development-commands.md +0 -12
  1059. package/skills/vds-skill/vds-scripts-skill/references/google-sheets.md +0 -71
  1060. package/skills/vds-skill/vds-scripts-skill/references/integration-commands.md +0 -17
  1061. package/skills/vds-skill/vds-scripts-skill/references/platform-bootstrap.md +0 -31
  1062. package/skills/vds-skill/vds-scripts-skill/references/specialist-routing.md +0 -14
  1063. package/skills/vds-skill/vds-scripts-skill/references/validation-commands.md +0 -15
@@ -1,1291 +0,0 @@
1
- """ULNC alignment helpers for VDS-owned ULNC output generation."""
2
-
3
- from __future__ import annotations
4
-
5
- import json
6
- import math
7
- import shutil
8
- from collections import Counter
9
- from copy import copy
10
- from dataclasses import dataclass
11
- from pathlib import Path
12
- from typing import Any
13
-
14
- from openpyxl import load_workbook
15
- from openpyxl.cell.cell import MergedCell
16
- from openpyxl.formula.translate import Translator
17
- from openpyxl.utils import get_column_letter
18
- from openpyxl.worksheet.worksheet import Worksheet
19
-
20
- from .errors import ExcelValidationError
21
- from .target_state_status import resolve_insurance_docs_root, resolve_repo_root
22
- from .validators import ExcelValidator
23
-
24
- REQUIRED_ULNL_SHEETS = ("Tong hop", "NL Chuc nang", "NL Phi CN", "NL QTDL")
25
- DEFAULT_OUTPUT_NAME = "vds-ulnc-aligned.xlsx"
26
- DEFAULT_MAPPING_VERSION = "ulnc-align-v1"
27
- BUFFER_MULTIPLIERS = {
28
- "base": 1.00,
29
- "phase1": 1.35,
30
- "phase1+2": 1.50,
31
- "phase1+2+3": 1.54,
32
- "all-in": 1.59,
33
- }
34
- NFR_CATEGORIES = (
35
- ("security", "Bảo mật", "Công việc bảo mật và an toàn thông tin"),
36
- ("performance", "Hiệu năng", "Công việc tối ưu hiệu năng và dung lượng"),
37
- ("observability", "Giám sát vận hành", "Công việc giám sát, logging, cảnh báo"),
38
- ("compliance", "Tuân thủ", "Công việc tuân thủ và kiểm soát quy định"),
39
- ("deployment/devops", "Triển khai/DevOps", "Công việc triển khai, CI/CD và vận hành"),
40
- ("integration", "Tích hợp", "Công việc tích hợp liên hệ thống và liên dịch vụ"),
41
- )
42
- QTDL_DEFAULT_ROWS = (
43
- ("Lập kế hoạch", "Hoạt động lập kế hoạch và phân rã công việc QTDL"),
44
- ("Theo dõi và báo cáo", "Hoạt động theo dõi tiến độ và báo cáo định kỳ QTDL"),
45
- ("Quản lý rủi ro và vấn đề", "Hoạt động quản lý rủi ro, vấn đề và phương án xử lý QTDL"),
46
- )
47
- NFR_TOTAL_RATIO = 0.12
48
- QTDL_TOTAL_RATIO = 0.03
49
- NFR_KEYWORDS: dict[str, tuple[str, ...]] = {
50
- "security": ("bảo mật", "security", "oauth", "jwt", "secrets", "xác thực", "ủy quyền"),
51
- "performance": ("hiệu năng", "performance", "tối ưu", "throughput", "latency", "capacity"),
52
- "observability": (
53
- "giám sát",
54
- "observability",
55
- "logging",
56
- "log",
57
- "metrics",
58
- "alert",
59
- "grafana",
60
- "prometheus",
61
- "jaeger",
62
- "tracing",
63
- ),
64
- "compliance": ("tuân thủ", "compliance", "regulator", "audit", "kiểm soát", "policy"),
65
- "deployment/devops": ("triển khai", "devops", "ci/cd", "helm", "rollout", "migrations", "pipeline"),
66
- "integration": ("tích hợp", "integration", "kafka", "api", "spi", "gateway", "cross-service", "phụ thuộc"),
67
- }
68
-
69
-
70
- @dataclass(frozen=True)
71
- class SourceRow:
72
- service: str
73
- task_id: str
74
- phase: str
75
- description: str
76
- effort_hours: float
77
- service_sheet_alias: str = ""
78
- source_row_index: int = 0
79
-
80
-
81
- @dataclass(frozen=True)
82
- class PresentationSummary:
83
- required_sheet_order_ok: bool
84
- merge_topology_ok: bool
85
- header_style_parity_pct: float
86
- strict_mode: bool
87
- failures: list[str]
88
-
89
-
90
- @dataclass(frozen=True)
91
- class WriteWindow:
92
- primary_start_row: int
93
- primary_end_row: int
94
- continuation_start_row: int
95
-
96
-
97
- ULNL_WRITE_WINDOWS: dict[str, WriteWindow] = {
98
- # Reviewer-visible functional input block in reference template.
99
- "NL Chuc nang": WriteWindow(primary_start_row=8, primary_end_row=32, continuation_start_row=44),
100
- # Reviewer-visible NFR input block before total row.
101
- "NL Phi CN": WriteWindow(primary_start_row=10, primary_end_row=13, continuation_start_row=16),
102
- # Reviewer-visible QTDL input block before total row.
103
- "NL QTDL": WriteWindow(primary_start_row=10, primary_end_row=13, continuation_start_row=16),
104
- }
105
-
106
-
107
- def resolve_alignment_paths(
108
- current_ulnc: Path | None,
109
- reference_ulnl: Path | None,
110
- output: Path | None,
111
- ) -> tuple[Path, Path, Path]:
112
- """Resolve default input/output paths for ULNC alignment."""
113
- root = resolve_repo_root(Path(__file__).resolve())
114
- docs_root = resolve_insurance_docs_root(root)
115
- if current_ulnc is None:
116
- current_ulnc = docs_root / "projects/INSURANCE/analysis/target-state/target-ulnc/target-state-status-vi.xlsx"
117
- if reference_ulnl is None:
118
- reference_ulnl = docs_root / "projects/INSURANCE/analysis/reference/ulnc/ULNL_SAVING_CORE_Jan 2026.xlsx"
119
- if output is None:
120
- output = docs_root / "projects/INSURANCE/analysis/target-state/target-ulnc" / DEFAULT_OUTPUT_NAME
121
- return current_ulnc, reference_ulnl, output
122
-
123
-
124
- def _validate_required_sheets(path: Path) -> None:
125
- wb = load_workbook(path, read_only=True, data_only=False)
126
- try:
127
- missing = [s for s in REQUIRED_ULNL_SHEETS if s not in wb.sheetnames]
128
- if missing:
129
- raise ExcelValidationError(
130
- "Reference workbook missing required ULNL sheets",
131
- context={"missing_sheets": missing, "path": str(path)},
132
- )
133
- finally:
134
- wb.close()
135
-
136
-
137
- def _enforce_output_policy(output_path: Path, reference_path: Path) -> None:
138
- resolved_output = output_path.resolve()
139
- resolved_reference = reference_path.resolve()
140
-
141
- if resolved_output == resolved_reference:
142
- raise ExcelValidationError(
143
- "Output path must not overwrite reference workbook",
144
- context={"output": str(output_path), "reference": str(reference_path)},
145
- )
146
-
147
- if "/analysis/reference/" in str(resolved_output).replace("\\", "/"):
148
- raise ExcelValidationError(
149
- "Output path must not be inside reference directory",
150
- context={"output": str(output_path)},
151
- )
152
-
153
-
154
- def _first_header_row(path: Path, sheet_name: str, max_scan: int = 60) -> int:
155
- wb = load_workbook(path, read_only=True, data_only=False)
156
- try:
157
- ws = wb[sheet_name]
158
- max_col = min(ws.max_column, 30)
159
- for row in range(1, max_scan + 1):
160
- vals = [ws.cell(row, c).value for c in range(1, max_col + 1)]
161
- non_empty = sum(1 for value in vals if value not in (None, ""))
162
- text_cells = sum(1 for value in vals if isinstance(value, str) and value.strip())
163
- if non_empty >= 3 and text_cells >= 3:
164
- return row
165
- return 1
166
- finally:
167
- wb.close()
168
-
169
-
170
- def _extract_profile(path: Path) -> dict[str, Any]:
171
- wb = load_workbook(path, read_only=False, data_only=False)
172
- try:
173
- sheet_positions = {name: idx for idx, name in enumerate(wb.sheetnames)}
174
- profile: dict[str, Any] = {"sheet_positions": sheet_positions, "sheets": {}}
175
- for sheet_name in REQUIRED_ULNL_SHEETS:
176
- ws = wb[sheet_name]
177
- header_row = _first_header_row(path, sheet_name)
178
- top_merges = sorted(str(merge) for merge in ws.merged_cells.ranges if merge.min_row <= 20)
179
- anchors: list[dict[str, Any]] = []
180
- for col in range(1, min(ws.max_column, 10) + 1):
181
- cell = ws.cell(header_row, col)
182
- anchors.append(
183
- {
184
- "col": col,
185
- "style_id": int(cell.style_id),
186
- "fill_type": cell.fill.fill_type,
187
- "align": cell.alignment.horizontal,
188
- "number_format": cell.number_format,
189
- "font_bold": bool(cell.font.bold),
190
- }
191
- )
192
- profile["sheets"][sheet_name] = {
193
- "header_row": header_row,
194
- "top_merges": top_merges,
195
- "anchors": anchors,
196
- }
197
- return profile
198
- finally:
199
- wb.close()
200
-
201
-
202
- def _compare_presentation(reference: dict[str, Any], output: dict[str, Any], strict_mode: bool) -> PresentationSummary:
203
- failures: list[str] = []
204
- expected_order = sorted(REQUIRED_ULNL_SHEETS, key=lambda name: reference["sheet_positions"].get(name, 10_000))
205
- actual_order = sorted(REQUIRED_ULNL_SHEETS, key=lambda name: output["sheet_positions"].get(name, 10_000))
206
- required_sheet_order_ok = expected_order == actual_order
207
- if not required_sheet_order_ok:
208
- failures.append("required_sheet_order_mismatch")
209
-
210
- merge_topology_ok = True
211
- for sheet_name in REQUIRED_ULNL_SHEETS:
212
- ref_merges = reference["sheets"][sheet_name]["top_merges"]
213
- out_merges = output["sheets"][sheet_name]["top_merges"]
214
- if ref_merges != out_merges:
215
- merge_topology_ok = False
216
- failures.append(f"merge_topology_mismatch:{sheet_name}")
217
-
218
- total_checks = 0
219
- matched_checks = 0
220
- fields = ("style_id", "fill_type", "align", "number_format", "font_bold")
221
- for sheet_name in REQUIRED_ULNL_SHEETS:
222
- ref_anchors = reference["sheets"][sheet_name]["anchors"]
223
- out_anchors = output["sheets"][sheet_name]["anchors"]
224
- for ref_cell, out_cell in zip(ref_anchors, out_anchors, strict=False):
225
- for field in fields:
226
- total_checks += 1
227
- if ref_cell[field] == out_cell[field]:
228
- matched_checks += 1
229
- parity = round((matched_checks / total_checks) * 100, 2) if total_checks else 100.0
230
- if parity < 95.0:
231
- failures.append("header_style_parity_below_threshold")
232
-
233
- return PresentationSummary(
234
- required_sheet_order_ok=required_sheet_order_ok,
235
- merge_topology_ok=merge_topology_ok,
236
- header_style_parity_pct=parity,
237
- strict_mode=strict_mode,
238
- failures=failures,
239
- )
240
-
241
-
242
- def _find_dashboard_column(header: list[Any], aliases: tuple[str, ...]) -> int:
243
- for idx, value in enumerate(header, start=1):
244
- if not isinstance(value, str):
245
- continue
246
- normalized = value.strip().lower()
247
- for alias in aliases:
248
- if alias in normalized:
249
- return idx
250
- return 0
251
-
252
-
253
- def _normalize_text_cell(value: Any) -> str:
254
- if isinstance(value, str):
255
- return value.strip()
256
- return ""
257
-
258
-
259
- def _allocate_hours_by_weights(total_hours: float, weights: list[float]) -> list[float]:
260
- if total_hours <= 0 or not weights:
261
- return [0.0 for _ in weights]
262
- normalized = [max(weight, 0.0) for weight in weights]
263
- if sum(normalized) <= 0:
264
- normalized = [1.0 for _ in weights]
265
- total_weight = sum(normalized)
266
- raw = [total_hours * (weight / total_weight) for weight in normalized]
267
- rounded = [round(value, 2) for value in raw]
268
- delta = round(total_hours - sum(rounded), 2)
269
- if rounded:
270
- rounded[-1] = round(rounded[-1] + delta, 2)
271
- return rounded
272
-
273
-
274
- def _phase_effort_distribution(phase: str, effort_hours: float) -> tuple[float, float, float, float]:
275
- normalized = phase.strip().lower()
276
- if "thiết kế" in normalized:
277
- return effort_hours, 0.0, 0.0, 0.0
278
- if "triển khai" in normalized:
279
- return 0.0, effort_hours, 0.0, 0.0
280
- if "kiểm thử" in normalized:
281
- return 0.0, 0.0, effort_hours, 0.0
282
- if "tích hợp" in normalized:
283
- return 0.0, 0.0, 0.0, effort_hours
284
- return 0.0, effort_hours, 0.0, 0.0
285
-
286
-
287
- def _build_required_work_coverage(source_snapshot: dict[str, Any]) -> dict[str, Any]:
288
- rows = source_snapshot.get("rows", [])
289
- signals: dict[str, dict[str, Any]] = {}
290
- for category_code, category_label, _ in NFR_CATEGORIES:
291
- keywords = NFR_KEYWORDS.get(category_code, ())
292
- matched_rows = 0
293
- matched_hours = 0.0
294
- for row in rows:
295
- description = str(row.get("description", "")).strip().lower()
296
- if description and any(keyword in description for keyword in keywords):
297
- matched_rows += 1
298
- matched_hours += float(row.get("effort_hours", 0.0))
299
- signals[category_code] = {
300
- "label": category_label,
301
- "matched_rows": matched_rows,
302
- "matched_hours": round(matched_hours, 2),
303
- }
304
-
305
- phase_counts = Counter(str(row.get("phase", "")).strip() or "unspecified" for row in rows)
306
- qtdl_factors = {
307
- "service_count": int(source_snapshot.get("service_count", 0)),
308
- "dependency_rows": int(source_snapshot.get("dependency_rows", 0)),
309
- "phase_coverage_count": sum(
310
- 1 for phase in ("Thiết kế", "Triển khai", "Kiểm thử", "Tích hợp") if phase_counts.get(phase, 0) > 0
311
- ),
312
- }
313
- return {
314
- "nfr_signals": signals,
315
- "qtdl_factors": qtdl_factors,
316
- }
317
-
318
-
319
- def extract_source_contract(current_ulnc: Path) -> dict[str, Any]:
320
- """Extract source contract snapshot from current ULNC workbook."""
321
- wb = load_workbook(current_ulnc, read_only=True, data_only=True)
322
- try:
323
- if "Executive Dashboard" not in wb.sheetnames:
324
- raise ExcelValidationError(
325
- "Current ULNC workbook missing Executive Dashboard sheet",
326
- context={"path": str(current_ulnc)},
327
- )
328
- ws = wb["Executive Dashboard"]
329
- header = [ws.cell(1, c).value for c in range(1, ws.max_column + 1)]
330
- service_col = _find_dashboard_column(header, ("service name", "tên dịch vụ"))
331
- sheet_col = _find_dashboard_column(header, ("sheet name", "tên sheet"))
332
- days_col = _find_dashboard_column(header, ("effort estimate (days)", "ước tính công (ngày)"))
333
-
334
- missing_headers: list[str] = []
335
- if service_col == 0:
336
- missing_headers.append("Service Name/Tên dịch vụ")
337
- if days_col == 0:
338
- missing_headers.append("Effort Estimate (Days)/Ước tính công (ngày)")
339
-
340
- source_rows: list[SourceRow] = []
341
- service_sheets = [
342
- name for name in wb.sheetnames if name not in {"Executive Dashboard", "Cross-Service Dependencies"}
343
- ]
344
- dashboard_services: list[dict[str, Any]] = []
345
- canonical_by_sheet: dict[str, str] = {}
346
- if service_col > 0:
347
- for row in range(2, ws.max_row + 1):
348
- canonical_name = _normalize_text_cell(ws.cell(row, service_col).value)
349
- sheet_alias = _normalize_text_cell(ws.cell(row, sheet_col).value) if sheet_col > 0 else ""
350
- if not canonical_name and not sheet_alias:
351
- continue
352
- if not canonical_name:
353
- canonical_name = sheet_alias
354
- if not sheet_alias:
355
- sheet_alias = canonical_name
356
-
357
- dashboard_services.append(
358
- {
359
- "dashboard_row_index": row,
360
- "canonical_name": canonical_name,
361
- "sheet_alias": sheet_alias,
362
- }
363
- )
364
- if sheet_alias and sheet_alias not in canonical_by_sheet:
365
- canonical_by_sheet[sheet_alias] = canonical_name
366
- if canonical_name and canonical_name not in canonical_by_sheet:
367
- canonical_by_sheet[canonical_name] = canonical_name
368
-
369
- ordered_service_sheets: list[str] = []
370
- seen_sheet_names: set[str] = set()
371
- service_sheet_set = set(service_sheets)
372
- for entry in dashboard_services:
373
- sheet_alias = entry["sheet_alias"]
374
- if sheet_alias in service_sheet_set and sheet_alias not in seen_sheet_names:
375
- ordered_service_sheets.append(sheet_alias)
376
- seen_sheet_names.add(sheet_alias)
377
-
378
- for sheet_name in sorted(service_sheets, key=str.casefold):
379
- if sheet_name not in seen_sheet_names:
380
- ordered_service_sheets.append(sheet_name)
381
- seen_sheet_names.add(sheet_name)
382
-
383
- for sheet_name in ordered_service_sheets:
384
- sheet = wb[sheet_name]
385
- for row in range(2, sheet.max_row + 1):
386
- task_id = sheet.cell(row, 1).value
387
- phase = sheet.cell(row, 2).value
388
- description = sheet.cell(row, 3).value
389
- effort = sheet.cell(row, 6).value
390
- if not isinstance(task_id, str) or not task_id.strip().startswith("T-"):
391
- continue
392
- effort_hours = float(effort) if isinstance(effort, (int, float)) else 0.0
393
- source_rows.append(
394
- SourceRow(
395
- # Keep source sheet identity as primary service key to preserve
396
- # target-state content 1:1 in trace fields (service::task).
397
- service=sheet_name,
398
- task_id=task_id.strip(),
399
- phase=phase.strip() if isinstance(phase, str) else "",
400
- description=description.strip() if isinstance(description, str) else "",
401
- effort_hours=effort_hours,
402
- service_sheet_alias=sheet_name,
403
- source_row_index=row,
404
- )
405
- )
406
-
407
- if not source_rows:
408
- dashboard_row_index: dict[tuple[str, str], int] = {
409
- (entry["canonical_name"], entry["sheet_alias"]): int(entry["dashboard_row_index"])
410
- for entry in dashboard_services
411
- }
412
- for row in range(2, ws.max_row + 1):
413
- if service_col == 0:
414
- break
415
- service_value = ws.cell(row, service_col).value
416
- if not isinstance(service_value, str) or not service_value.strip():
417
- continue
418
- canonical_name = service_value.strip()
419
- sheet_alias = _normalize_text_cell(ws.cell(row, sheet_col).value) if sheet_col > 0 else canonical_name
420
- if not sheet_alias:
421
- sheet_alias = canonical_name
422
- effort_days = 0.0
423
- if days_col > 0 and isinstance(ws.cell(row, days_col).value, (int, float)):
424
- effort_days = float(ws.cell(row, days_col).value)
425
- source_rows.append(
426
- SourceRow(
427
- service=canonical_name,
428
- task_id=f"SVC-{row}",
429
- phase="",
430
- description=f"Khối lượng công việc tổng hợp cho dịch vụ {canonical_name}",
431
- effort_hours=round(effort_days * 8.0, 2),
432
- service_sheet_alias=sheet_alias,
433
- source_row_index=dashboard_row_index.get((canonical_name, sheet_alias), row),
434
- )
435
- )
436
-
437
- dependency_rows = 0
438
- if "Cross-Service Dependencies" in wb.sheetnames:
439
- dep_ws = wb["Cross-Service Dependencies"]
440
- for row in range(2, dep_ws.max_row + 1):
441
- if any(dep_ws.cell(row, c).value not in (None, "") for c in range(1, 6)):
442
- dependency_rows += 1
443
-
444
- base_hours = round(sum(row.effort_hours for row in source_rows), 2)
445
- base_days = round(base_hours / 8.0, 2)
446
- return {
447
- "service_count": len({row.service for row in source_rows}),
448
- "source_rows": len(source_rows),
449
- "dependency_rows": dependency_rows,
450
- "missing_headers": missing_headers,
451
- "base_days": base_days,
452
- "base_hours": base_hours,
453
- "rows": [
454
- {
455
- "service": row.service,
456
- "service_canonical": canonical_by_sheet.get(
457
- row.service_sheet_alias or row.service,
458
- row.service,
459
- ),
460
- "service_sheet_alias": row.service_sheet_alias,
461
- "task_id": row.task_id,
462
- "phase": row.phase,
463
- "description": row.description,
464
- "effort_hours": row.effort_hours,
465
- "source_row_index": row.source_row_index,
466
- }
467
- for row in source_rows
468
- ],
469
- }
470
- finally:
471
- wb.close()
472
-
473
-
474
- def _first_appendable_row(ws: Worksheet) -> int:
475
- row = ws.max_row + 2
476
- while isinstance(ws.cell(row, 2), MergedCell):
477
- row += 1
478
- return row
479
-
480
-
481
- def _resolve_write_window(sheet_name: str) -> WriteWindow:
482
- window = ULNL_WRITE_WINDOWS.get(sheet_name)
483
- if window is None:
484
- raise ExcelValidationError(
485
- "Missing ULNL write window configuration",
486
- context={"sheet_name": sheet_name, "configured_sheets": sorted(ULNL_WRITE_WINDOWS)},
487
- )
488
- return window
489
-
490
-
491
- def _iter_primary_rows(ws: Worksheet, *, start_row: int, end_row: int, id_col: int = 2) -> list[int]:
492
- rows: list[int] = []
493
- for row in range(start_row, end_row + 1):
494
- if isinstance(ws.cell(row, id_col), MergedCell):
495
- continue
496
- rows.append(row)
497
- return rows
498
-
499
-
500
- def _next_continuation_row(ws: Worksheet, *, start_row: int, columns: tuple[int, ...]) -> int:
501
- cursor = max(start_row, 1)
502
- while True:
503
- if any(isinstance(ws.cell(cursor, col), MergedCell) for col in columns):
504
- cursor += 1
505
- continue
506
- if any(ws.cell(cursor, col).value not in (None, "") for col in columns):
507
- cursor += 1
508
- continue
509
- return cursor
510
-
511
-
512
- def _allocate_target_rows(
513
- ws: Worksheet,
514
- *,
515
- sheet_name: str,
516
- row_count: int,
517
- writable_columns: tuple[int, ...],
518
- ) -> tuple[list[int], dict[str, Any]]:
519
- window = _resolve_write_window(sheet_name)
520
- primary_rows = _iter_primary_rows(
521
- ws,
522
- start_row=window.primary_start_row,
523
- end_row=window.primary_end_row,
524
- )
525
- primary_capacity = len(primary_rows)
526
- placement_mode = "primary_then_continuation"
527
- if sheet_name == "NL Phi CN" and row_count > primary_capacity:
528
- # Keep NL Phi CN categories contiguous below total row to avoid split display.
529
- primary_used = 0
530
- continuation_needed = row_count
531
- placement_mode = "continuation_only_no_total_split"
532
- else:
533
- primary_used = min(row_count, primary_capacity)
534
- continuation_needed = max(row_count - primary_capacity, 0)
535
- continuation_rows: list[int] = []
536
- cursor = window.continuation_start_row
537
- for _ in range(continuation_needed):
538
- next_row = _next_continuation_row(
539
- ws,
540
- start_row=cursor,
541
- columns=writable_columns,
542
- )
543
- continuation_rows.append(next_row)
544
- cursor = next_row + 1
545
-
546
- continuation_preview_limit = 50
547
- continuation_preview = continuation_rows[:continuation_preview_limit]
548
- return primary_rows[:primary_used] + continuation_rows, {
549
- "sheet": sheet_name,
550
- "strategy": "primary_window_then_continuation",
551
- "placement_mode": placement_mode,
552
- "primary_window": {
553
- "start_row": window.primary_start_row,
554
- "end_row": window.primary_end_row,
555
- "capacity": primary_capacity,
556
- },
557
- "primary_rows_used": primary_used,
558
- "continuation_start_row": window.continuation_start_row,
559
- "continuation_rows_used": len(continuation_rows),
560
- "continuation_rows_preview": continuation_preview,
561
- "continuation_rows_preview_limit": continuation_preview_limit,
562
- "continuation_rows_truncated": len(continuation_rows) > continuation_preview_limit,
563
- "overflowed": len(continuation_rows) > 0,
564
- }
565
-
566
-
567
- def _apply_functional_computed_presentation(
568
- ws: Worksheet,
569
- *,
570
- continuation_rows: list[int],
571
- template_row: int,
572
- computed_columns: tuple[int, ...] = (7, 8, 9, 10),
573
- ) -> None:
574
- """Replicate computed-column formula/style behavior for continuation rows."""
575
- if not continuation_rows:
576
- return
577
-
578
- for target_row in continuation_rows:
579
- for col in computed_columns:
580
- template_cell = ws.cell(template_row, col)
581
- target_cell = ws.cell(target_row, col)
582
- target_cell._style = copy(template_cell._style)
583
- value = template_cell.value
584
- if isinstance(value, str) and value.startswith("="):
585
- target_cell.value = Translator(value, origin=template_cell.coordinate).translate_formula(
586
- target_cell.coordinate
587
- )
588
- else:
589
- target_cell.value = value
590
-
591
-
592
- def _clear_cells(ws: Worksheet, *, rows: list[int], columns: tuple[int, ...]) -> None:
593
- for row in rows:
594
- for col in columns:
595
- ws.cell(row, col).value = None
596
-
597
-
598
- def _cleanup_qtdl_formula_artifacts(
599
- ws: Worksheet,
600
- *,
601
- start_row: int,
602
- end_row: int,
603
- work_item_code_col: int = 2,
604
- clear_columns: tuple[int, ...] = (1, 2, 3, 4, 5),
605
- ) -> list[int]:
606
- cleaned_rows: list[int] = []
607
- for row in range(start_row, end_row + 1):
608
- code_value = ws.cell(row, work_item_code_col).value
609
- has_code = isinstance(code_value, str) and bool(code_value.strip())
610
- if has_code:
611
- continue
612
- if _normalize_text_cell(ws.cell(row, 4).value).casefold() == "tổng":
613
- continue
614
- has_formula_artifact = any(
615
- isinstance(ws.cell(row, col).value, str) and ws.cell(row, col).value.startswith("=")
616
- for col in clear_columns
617
- )
618
- if not has_formula_artifact:
619
- continue
620
- for col in clear_columns:
621
- ws.cell(row, col).value = None
622
- cleaned_rows.append(row)
623
- return cleaned_rows
624
-
625
-
626
- def _max_line_length(value: Any) -> int:
627
- if value in (None, ""):
628
- return 0
629
- text = str(value)
630
- return max((len(line) for line in text.splitlines()), default=0)
631
-
632
-
633
- def _estimate_wrapped_lines(value: Any, width_chars: float) -> int:
634
- if value in (None, ""):
635
- return 1
636
- text = str(value)
637
- effective_width = max(int(width_chars) - 2, 8)
638
- lines = 0
639
- for line in text.splitlines() or [""]:
640
- lines += max(1, math.ceil(len(line) / effective_width))
641
- return max(lines, 1)
642
-
643
-
644
- def _fit_sheet_dimensions(
645
- ws: Worksheet,
646
- *,
647
- target_rows: list[int],
648
- column_bounds: dict[int, tuple[float, float]],
649
- wrap_columns: tuple[int, ...],
650
- row_height_columns: tuple[int, ...],
651
- top_align_columns: tuple[int, ...] = (),
652
- min_row_height: float = 15.0,
653
- max_row_height: float = 180.0,
654
- line_height: float = 15.0,
655
- ) -> None:
656
- if not target_rows:
657
- return
658
-
659
- rows = sorted(set(target_rows))
660
-
661
- # Adjust column widths with bounded auto-fit and keep existing wider widths.
662
- for col, (min_width, max_width) in column_bounds.items():
663
- observed_max = 0
664
- for row in rows:
665
- observed_max = max(observed_max, _max_line_length(ws.cell(row, col).value))
666
- candidate = max(min_width, min(max_width, float(observed_max + 2)))
667
- letter = get_column_letter(col)
668
- current = ws.column_dimensions[letter].width
669
- current_width = float(current) if isinstance(current, (int, float)) else 0.0
670
- ws.column_dimensions[letter].width = round(max(current_width, candidate), 2)
671
-
672
- width_cache = {
673
- col: (
674
- float(ws.column_dimensions[get_column_letter(col)].width)
675
- if isinstance(ws.column_dimensions[get_column_letter(col)].width, (int, float))
676
- else 20.0
677
- )
678
- for col in row_height_columns
679
- }
680
-
681
- for row in rows:
682
- max_lines = 1
683
- for col in wrap_columns:
684
- cell = ws.cell(row, col)
685
- align = copy(cell.alignment)
686
- align.wrap_text = True
687
- if align.vertical in (None, ""):
688
- align.vertical = "top"
689
- cell.alignment = align
690
- for col in top_align_columns:
691
- cell = ws.cell(row, col)
692
- align = copy(cell.alignment)
693
- align.vertical = "top"
694
- cell.alignment = align
695
- for col in row_height_columns:
696
- max_lines = max(max_lines, _estimate_wrapped_lines(ws.cell(row, col).value, width_cache[col]))
697
- ws.row_dimensions[row].height = round(
698
- min(max_row_height, max(min_row_height, max_lines * line_height)),
699
- 2,
700
- )
701
-
702
-
703
- def _collect_functional_rows(ws: Worksheet) -> list[int]:
704
- rows: list[int] = []
705
- for row in range(1, ws.max_row + 1):
706
- trace = ws.cell(row, 5).value
707
- if isinstance(trace, str) and "::" in trace:
708
- rows.append(row)
709
- return rows
710
-
711
-
712
- def _collect_categorized_rows(ws: Worksheet, labels: set[str]) -> list[int]:
713
- rows: list[int] = []
714
- for row in range(1, ws.max_row + 1):
715
- label = ws.cell(row, 3).value
716
- code = ws.cell(row, 2).value
717
- if isinstance(label, str) and label.strip() in labels and code not in (None, ""):
718
- rows.append(row)
719
- return rows
720
-
721
-
722
- def _apply_functional_summary_formulas(ws: Worksheet, mapped_rows: list[int]) -> None:
723
- """Keep summary block (rows 36-43) formula-driven while including continuation rows."""
724
- if not mapped_rows:
725
- return
726
- primary_start = 8
727
- primary_end = 32
728
- continuation_start = 44
729
- max_row = max(mapped_rows)
730
- has_continuation = max_row >= continuation_start
731
- for col in range(6, 11): # F..J
732
- letter = get_column_letter(col)
733
- if has_continuation:
734
- ws.cell(36, col).value = (
735
- f"=SUM({letter}{primary_start}:{letter}{primary_end},{letter}{continuation_start}:{letter}{max_row})"
736
- )
737
- else:
738
- ws.cell(36, col).value = f"=SUM({letter}{primary_start}:{letter}{primary_end})"
739
-
740
-
741
- def _evaluate_readability(
742
- ws: Worksheet,
743
- *,
744
- target_rows: list[int],
745
- row_height_columns: tuple[int, ...],
746
- ) -> dict[str, Any]:
747
- if not target_rows:
748
- return {
749
- "checked_rows": 0,
750
- "clipping_risk_rows": 0,
751
- "clipping_risk_preview": [],
752
- "max_height_rows": 0,
753
- }
754
-
755
- clipping: list[int] = []
756
- max_height_rows = 0
757
- for row in target_rows:
758
- row_height = float(ws.row_dimensions[row].height or 15.0)
759
- if row_height >= 180.0:
760
- max_height_rows += 1
761
- needed_lines = 1
762
- for col in row_height_columns:
763
- letter = get_column_letter(col)
764
- width = ws.column_dimensions[letter].width
765
- width_chars = float(width) if isinstance(width, (int, float)) else 20.0
766
- needed_lines = max(
767
- needed_lines,
768
- _estimate_wrapped_lines(ws.cell(row, col).value, width_chars),
769
- )
770
- needed_height = needed_lines * 15.0
771
- if row_height + 1.0 < needed_height:
772
- clipping.append(row)
773
-
774
- return {
775
- "checked_rows": len(target_rows),
776
- "clipping_risk_rows": len(clipping),
777
- "clipping_risk_preview": clipping[:20],
778
- "max_height_rows": max_height_rows,
779
- }
780
-
781
-
782
- def _populate_functional_sheet(ws: Worksheet, source_rows: list[dict[str, Any]]) -> tuple[int, dict[str, Any]]:
783
- window = _resolve_write_window(ws.title)
784
- primary_rows = _iter_primary_rows(
785
- ws,
786
- start_row=window.primary_start_row,
787
- end_row=window.primary_end_row,
788
- )
789
-
790
- if not source_rows:
791
- _allocated_rows, overflow = _allocate_target_rows(
792
- ws,
793
- sheet_name=ws.title,
794
- row_count=0,
795
- writable_columns=(2, 3, 4, 5, 6),
796
- )
797
- return 0, overflow
798
-
799
- target_rows, overflow = _allocate_target_rows(
800
- ws,
801
- sheet_name=ws.title,
802
- row_count=len(source_rows),
803
- writable_columns=(2, 3, 4, 5, 6),
804
- )
805
- written = 0
806
- template_row = primary_rows[0] if primary_rows else target_rows[0]
807
- for idx, (target_row, row) in enumerate(zip(target_rows, source_rows, strict=False), start=1):
808
- effort_hours = round(float(row.get("effort_hours", 0.0)), 2)
809
- phase = str(row.get("phase", "Phát triển mới") or "Phát triển mới")
810
- service_name = str(row.get("service", "")).strip()
811
- service_alias = str(row.get("service_sheet_alias", "")).strip()
812
- task_id = str(row.get("task_id", "")).strip()
813
- description = row.get("description", f"Triển khai hạng mục cho dịch vụ {service_name}")
814
- trace = f"{service_name}::{task_id}".strip(":")
815
- fn_code = "NVJ1-NC"
816
- unit_test_flag = "Có" if "kiểm thử" in phase.strip().lower() else "Không"
817
- solution_h, dev_h, unit_test_h, test_h = _phase_effort_distribution(phase, effort_hours)
818
- total_post_reuse = round(solution_h + dev_h + unit_test_h + test_h, 2)
819
- o, p, q, r = solution_h, dev_h, unit_test_h, test_h
820
- total_pre_reuse = round(o + p + q + r, 2)
821
-
822
- # Keep row style consistent with reference template row.
823
- for col in range(1, 27):
824
- ws.cell(target_row, col)._style = copy(ws.cell(template_row, col)._style)
825
- ws.cell(target_row, col).value = None
826
-
827
- ws.cell(target_row, 1, idx) # TT
828
- ws.cell(target_row, 2, service_name or service_alias) # Yêu cầu nâng cấp
829
- ws.cell(target_row, 3, phase) # Tên chức năng (phase label)
830
- ws.cell(
831
- target_row,
832
- 4,
833
- description,
834
- )
835
- ws.cell(target_row, 5, trace) # Loại xử lý/trace
836
- ws.cell(target_row, 6, solution_h) # Giải pháp
837
- ws.cell(target_row, 7, dev_h) # Phát triển
838
- ws.cell(target_row, 8, unit_test_h) # Unit test
839
- ws.cell(target_row, 9, test_h) # Kiểm thử
840
- ws.cell(target_row, 10, total_post_reuse) # Tổng nỗ lực (manhours)
841
- ws.cell(target_row, 11, fn_code) # Mã chức năng
842
- ws.cell(target_row, 12, row.get("source_row_index", 0)) # source row id
843
- ws.cell(target_row, 13, "Nâng cấp chức năng") # Tên loại chức năng
844
- ws.cell(target_row, 14, unit_test_flag) # Có unit test hay không?
845
- ws.cell(target_row, 15, o)
846
- ws.cell(target_row, 16, p)
847
- ws.cell(target_row, 17, q)
848
- ws.cell(target_row, 18, r)
849
- ws.cell(target_row, 19, total_pre_reuse)
850
- ws.cell(target_row, 20, trace) # Chi tiết tái sử dụng / trace
851
- ws.cell(target_row, 21, 0.0)
852
- ws.cell(target_row, 22, 0.0)
853
- ws.cell(target_row, 23, 0.0)
854
- ws.cell(target_row, 24, "N/A")
855
- ws.cell(target_row, 25, 0.0)
856
- ws.cell(target_row, 26, service_alias or service_name)
857
- written += 1
858
-
859
- return written, overflow
860
-
861
-
862
- def _populate_nonfunctional_sheet(
863
- ws: Worksheet, base_hours: float, required_work: dict[str, Any]
864
- ) -> tuple[int, dict[str, Any]]:
865
- target_rows, overflow = _allocate_target_rows(
866
- ws,
867
- sheet_name=ws.title,
868
- row_count=len(NFR_CATEGORIES),
869
- writable_columns=(2, 3, 4, 5),
870
- )
871
- written = 0
872
- total_nfr_hours = round(base_hours * NFR_TOTAL_RATIO, 2) if base_hours > 0 else 0.0
873
- nfr_signals = required_work.get("nfr_signals", {})
874
- weights = []
875
- for category_code, _, _ in NFR_CATEGORIES:
876
- signal = nfr_signals.get(category_code, {})
877
- matched_hours = float(signal.get("matched_hours", 0.0))
878
- matched_rows = int(signal.get("matched_rows", 0))
879
- weights.append(matched_hours if matched_hours > 0 else float(matched_rows or 1))
880
- category_hours = _allocate_hours_by_weights(total_nfr_hours, weights)
881
-
882
- for idx, (target_row, (category, category_label, description)) in enumerate(
883
- zip(target_rows, NFR_CATEGORIES, strict=False), start=1
884
- ):
885
- signal = nfr_signals.get(category, {})
886
- matched_rows = int(signal.get("matched_rows", 0))
887
- ws.cell(target_row, 2, idx)
888
- ws.cell(target_row, 3, category_label)
889
- ws.cell(target_row, 4, f"{description} (bao phủ {matched_rows} hạng mục từ target-state)")
890
- ws.cell(target_row, 5, category_hours[idx - 1] if idx - 1 < len(category_hours) else 0.0)
891
- written += 1
892
- return written, overflow
893
-
894
-
895
- def _populate_qtdl_sheet(ws: Worksheet, base_hours: float, required_work: dict[str, Any]) -> tuple[int, dict[str, Any]]:
896
- target_rows, overflow = _allocate_target_rows(
897
- ws,
898
- sheet_name=ws.title,
899
- row_count=len(QTDL_DEFAULT_ROWS),
900
- writable_columns=(2, 3, 4, 5),
901
- )
902
- written = 0
903
- total_qtdl_hours = round(base_hours * QTDL_TOTAL_RATIO, 2) if base_hours > 0 else 0.0
904
- qtdl_factors = required_work.get("qtdl_factors", {})
905
- dependency_rows = int(qtdl_factors.get("dependency_rows", 0))
906
- service_count = int(qtdl_factors.get("service_count", 0))
907
- # Planning and risk rows get more share when dependency/services are high.
908
- weights = [
909
- 1.0 + (service_count / 100.0),
910
- 1.0,
911
- 1.0 + (dependency_rows / 200.0),
912
- ]
913
- row_hours = _allocate_hours_by_weights(total_qtdl_hours, weights)
914
- for idx, (target_row, (label, description)) in enumerate(
915
- zip(target_rows, QTDL_DEFAULT_ROWS, strict=False), start=1
916
- ):
917
- ws.cell(target_row, 2, idx)
918
- ws.cell(target_row, 3, label)
919
- ws.cell(
920
- target_row,
921
- 4,
922
- f"{description} (dịch vụ: {service_count}, phụ thuộc: {dependency_rows})",
923
- )
924
- ws.cell(target_row, 5, row_hours[idx - 1] if idx - 1 < len(row_hours) else 0.0)
925
- written += 1
926
- return written, overflow
927
-
928
-
929
- def populate_ulnl_output(output_path: Path, source_snapshot: dict[str, Any]) -> dict[str, Any]:
930
- """Populate required ULNL sheets in the output workbook."""
931
- wb = load_workbook(output_path, read_only=False, data_only=False)
932
- try:
933
- fn_ws = wb["NL Chuc nang"]
934
- nfn_ws = wb["NL Phi CN"]
935
- qtdl_ws = wb["NL QTDL"]
936
- required_work = _build_required_work_coverage(source_snapshot)
937
- functional_rows, functional_overflow = _populate_functional_sheet(fn_ws, source_snapshot["rows"])
938
- nonfunctional_rows, nonfunctional_overflow = _populate_nonfunctional_sheet(
939
- nfn_ws, source_snapshot["base_hours"], required_work
940
- )
941
- qtdl_rows, qtdl_overflow = _populate_qtdl_sheet(qtdl_ws, source_snapshot["base_hours"], required_work)
942
- nfr_rows_cleared: list[int] = []
943
- if nonfunctional_overflow.get("placement_mode") == "continuation_only_no_total_split":
944
- nfr_window = _resolve_write_window("NL Phi CN")
945
- nfr_rows_to_clear = _iter_primary_rows(
946
- nfn_ws,
947
- start_row=nfr_window.primary_start_row,
948
- end_row=nfr_window.primary_end_row,
949
- )
950
- _clear_cells(nfn_ws, rows=nfr_rows_to_clear, columns=(1, 2, 3, 4, 5))
951
- nfr_rows_cleared = nfr_rows_to_clear
952
-
953
- qtdl_window = _resolve_write_window("NL QTDL")
954
- qtdl_rows_cleaned = _cleanup_qtdl_formula_artifacts(
955
- qtdl_ws,
956
- start_row=qtdl_window.primary_start_row,
957
- end_row=qtdl_window.primary_end_row + 1,
958
- )
959
-
960
- functional_rows_to_fit = _collect_functional_rows(fn_ws)
961
- _fit_sheet_dimensions(
962
- fn_ws,
963
- target_rows=functional_rows_to_fit,
964
- column_bounds={
965
- 2: (24.0, 40.0),
966
- 3: (12.0, 24.0),
967
- 4: (45.0, 110.0),
968
- 5: (22.0, 55.0),
969
- 6: (8.0, 14.0),
970
- 7: (8.0, 14.0),
971
- 8: (8.0, 14.0),
972
- 9: (8.0, 14.0),
973
- 10: (10.0, 16.0),
974
- 11: (10.0, 16.0),
975
- 13: (18.0, 30.0),
976
- 20: (22.0, 55.0),
977
- 26: (20.0, 40.0),
978
- },
979
- wrap_columns=(2, 4, 5, 20),
980
- row_height_columns=(2, 4, 5, 20),
981
- top_align_columns=(2, 3, 4, 5, 13, 20, 26),
982
- )
983
- _apply_functional_summary_formulas(fn_ws, functional_rows_to_fit)
984
-
985
- nfr_rows_to_fit = _collect_categorized_rows(
986
- nfn_ws,
987
- labels={label for _, label, _ in NFR_CATEGORIES},
988
- )
989
- _fit_sheet_dimensions(
990
- nfn_ws,
991
- target_rows=nfr_rows_to_fit,
992
- column_bounds={
993
- 2: (6.0, 10.0),
994
- 3: (18.0, 32.0),
995
- 4: (40.0, 95.0),
996
- 5: (10.0, 16.0),
997
- },
998
- wrap_columns=(3, 4),
999
- row_height_columns=(4,),
1000
- top_align_columns=(3, 4),
1001
- )
1002
-
1003
- qtdl_rows_to_fit = _collect_categorized_rows(
1004
- qtdl_ws,
1005
- labels={label for label, _ in QTDL_DEFAULT_ROWS},
1006
- )
1007
- _fit_sheet_dimensions(
1008
- qtdl_ws,
1009
- target_rows=qtdl_rows_to_fit,
1010
- column_bounds={
1011
- 2: (6.0, 10.0),
1012
- 3: (18.0, 34.0),
1013
- 4: (40.0, 95.0),
1014
- 5: (10.0, 16.0),
1015
- },
1016
- wrap_columns=(3, 4),
1017
- row_height_columns=(4,),
1018
- top_align_columns=(3, 4),
1019
- )
1020
-
1021
- readability = {
1022
- "NL Chuc nang": _evaluate_readability(
1023
- fn_ws,
1024
- target_rows=functional_rows_to_fit,
1025
- row_height_columns=(2, 4, 5, 20),
1026
- ),
1027
- "NL Phi CN": _evaluate_readability(
1028
- nfn_ws,
1029
- target_rows=nfr_rows_to_fit,
1030
- row_height_columns=(4,),
1031
- ),
1032
- "NL QTDL": _evaluate_readability(
1033
- qtdl_ws,
1034
- target_rows=qtdl_rows_to_fit,
1035
- row_height_columns=(4,),
1036
- ),
1037
- }
1038
-
1039
- # Keep reference summary anchors aligned with our generated totals.
1040
- nfr_hours = round(source_snapshot["base_hours"] * NFR_TOTAL_RATIO, 2)
1041
- qtdl_hours = round(source_snapshot["base_hours"] * QTDL_TOTAL_RATIO, 2)
1042
- # NL Chuc nang summary block (rows 36-43) remains formula-driven.
1043
- # J36 continues to feed Tong hop!E13 through formula chain.
1044
- nfn_ws.cell(14, 5, nfr_hours) # Preserve explicit total anchor used by D6/E14 chain
1045
- qtdl_ws.cell(15, 5, qtdl_hours) # Preserve explicit total anchor used by Tong hop!E15
1046
-
1047
- wb.save(output_path)
1048
- return {
1049
- "functional_rows": functional_rows,
1050
- "nonfunctional_rows": nonfunctional_rows,
1051
- "qtdl_rows": qtdl_rows,
1052
- "overflow": {
1053
- "NL Chuc nang": functional_overflow,
1054
- "NL Phi CN": nonfunctional_overflow,
1055
- "NL QTDL": qtdl_overflow,
1056
- },
1057
- "cleanup": {
1058
- "NL Phi CN": {
1059
- "cleared_primary_rows": nfr_rows_cleared,
1060
- },
1061
- "NL QTDL": {
1062
- "cleaned_formula_artifact_rows": qtdl_rows_cleaned,
1063
- },
1064
- },
1065
- "required_work_coverage": required_work,
1066
- "readability": readability,
1067
- }
1068
- finally:
1069
- wb.close()
1070
-
1071
-
1072
- def _build_buffer_scenarios(base_hours: float) -> dict[str, dict[str, float]]:
1073
- scenarios: dict[str, dict[str, float]] = {}
1074
- for scenario, multiplier in BUFFER_MULTIPLIERS.items():
1075
- hours = round(base_hours * multiplier, 2)
1076
- scenarios[scenario] = {
1077
- "multiplier": multiplier,
1078
- "total_hours": hours,
1079
- "total_md": round(hours / 8.0, 2),
1080
- }
1081
- return scenarios
1082
-
1083
-
1084
- def _compute_coverage(
1085
- *,
1086
- source_rows: int,
1087
- mapped_functional_rows: int,
1088
- nonfunctional_rows: int,
1089
- qtdl_rows: int,
1090
- min_functional_coverage: float,
1091
- min_nonfunctional_categories: int,
1092
- min_qtdl_rows: int,
1093
- ) -> dict[str, Any]:
1094
- functional_coverage = round((mapped_functional_rows / source_rows) * 100, 2) if source_rows > 0 else 0.0
1095
- checks = {
1096
- "functional_coverage_ok": functional_coverage >= min_functional_coverage,
1097
- "nonfunctional_categories_ok": nonfunctional_rows >= min_nonfunctional_categories,
1098
- "qtdl_rows_ok": qtdl_rows >= min_qtdl_rows,
1099
- }
1100
- return {
1101
- "functional_coverage_pct": functional_coverage,
1102
- "nonfunctional_categories": nonfunctional_rows,
1103
- "qtdl_rows": qtdl_rows,
1104
- "thresholds": {
1105
- "min_functional_coverage_pct": min_functional_coverage,
1106
- "min_nonfunctional_categories": min_nonfunctional_categories,
1107
- "min_qtdl_rows": min_qtdl_rows,
1108
- },
1109
- "checks": checks,
1110
- "passed": all(checks.values()),
1111
- }
1112
-
1113
-
1114
- def run_ulnc_align(
1115
- *,
1116
- current_ulnc: Path,
1117
- reference_ulnl: Path,
1118
- output: Path,
1119
- project_name: str,
1120
- strict_presentation: bool,
1121
- buffer_scenario: str,
1122
- include_tech_buffer: bool,
1123
- apply_sdlc_buffer: bool,
1124
- coverage_policy: str,
1125
- min_functional_coverage: float,
1126
- min_nonfunctional_categories: int,
1127
- min_qtdl_rows: int,
1128
- ) -> dict[str, Any]:
1129
- """Run ULNC alignment using reference template as baseline."""
1130
- if buffer_scenario not in BUFFER_MULTIPLIERS:
1131
- raise ExcelValidationError(
1132
- "Invalid buffer scenario",
1133
- context={"buffer_scenario": buffer_scenario, "allowed": sorted(BUFFER_MULTIPLIERS)},
1134
- )
1135
- if coverage_policy not in {"warn", "error"}:
1136
- raise ExcelValidationError(
1137
- "Invalid coverage policy",
1138
- context={"coverage_policy": coverage_policy, "allowed": ["warn", "error"]},
1139
- )
1140
-
1141
- ExcelValidator.validate_file(current_ulnc)
1142
- ExcelValidator.validate_file(reference_ulnl)
1143
- _validate_required_sheets(reference_ulnl)
1144
- _enforce_output_policy(output, reference_ulnl)
1145
-
1146
- source_snapshot = extract_source_contract(current_ulnc)
1147
- if source_snapshot["missing_headers"]:
1148
- raise ExcelValidationError(
1149
- "Current ULNC workbook is missing required headers",
1150
- context={"missing_headers": source_snapshot["missing_headers"]},
1151
- )
1152
-
1153
- output.parent.mkdir(parents=True, exist_ok=True)
1154
- shutil.copy2(reference_ulnl, output)
1155
- mapping_counts = populate_ulnl_output(output, source_snapshot)
1156
-
1157
- reference_profile = _extract_profile(reference_ulnl)
1158
- output_profile = _extract_profile(output)
1159
- presentation = _compare_presentation(
1160
- reference=reference_profile,
1161
- output=output_profile,
1162
- strict_mode=strict_presentation,
1163
- )
1164
- if strict_presentation and presentation.failures:
1165
- raise ExcelValidationError(
1166
- "Strict presentation validation failed",
1167
- context={
1168
- "failures": presentation.failures,
1169
- "header_style_parity_pct": presentation.header_style_parity_pct,
1170
- },
1171
- )
1172
-
1173
- coverage = _compute_coverage(
1174
- source_rows=source_snapshot["source_rows"],
1175
- mapped_functional_rows=mapping_counts["functional_rows"],
1176
- nonfunctional_rows=mapping_counts["nonfunctional_rows"],
1177
- qtdl_rows=mapping_counts["qtdl_rows"],
1178
- min_functional_coverage=min_functional_coverage,
1179
- min_nonfunctional_categories=min_nonfunctional_categories,
1180
- min_qtdl_rows=min_qtdl_rows,
1181
- )
1182
- coverage_failures = [name for name, passed in coverage["checks"].items() if not passed]
1183
- phase_counts = Counter(row.get("phase", "").strip() or "unspecified" for row in source_snapshot["rows"])
1184
- required_phases = {"Thiết kế", "Triển khai", "Kiểm thử", "Tích hợp"}
1185
- missing_phases = sorted(phase for phase in required_phases if phase_counts.get(phase, 0) == 0)
1186
- phase_coverage = {
1187
- "phase_counts": dict(phase_counts),
1188
- "required_phases_present": len(missing_phases) == 0,
1189
- "missing_required_phases": missing_phases,
1190
- }
1191
- if not phase_coverage["required_phases_present"]:
1192
- coverage_failures.append("required_phase_coverage_missing")
1193
-
1194
- if coverage_policy == "error" and coverage_failures:
1195
- raise ExcelValidationError(
1196
- "Coverage policy failed",
1197
- context={"coverage_failures": coverage_failures, "coverage": coverage},
1198
- )
1199
-
1200
- scenarios = _build_buffer_scenarios(source_snapshot["base_hours"])
1201
- selected_scenario = scenarios[buffer_scenario]
1202
- buffer_guidance = {
1203
- "minimum": "phase1",
1204
- "recommended": "phase1+2+3",
1205
- "upper_reserve": "all-in",
1206
- "notes": [
1207
- "phase1 dùng cho mức dự phòng tối thiểu khi chốt kế hoạch triển khai",
1208
- "phase1+2+3 dùng cho kế hoạch an toàn với dư địa cho rủi ro và phát sinh",
1209
- "all-in dùng cho bối cảnh có độ bất định cao hoặc thay đổi liên tục",
1210
- ],
1211
- }
1212
-
1213
- report = {
1214
- "project_name": project_name,
1215
- "mapping_version": DEFAULT_MAPPING_VERSION,
1216
- "output_file": str(output),
1217
- "source_file": str(current_ulnc),
1218
- "reference_file": str(reference_ulnl),
1219
- "required_sheets": list(REQUIRED_ULNL_SHEETS),
1220
- "settings": {
1221
- "strict_presentation": strict_presentation,
1222
- "buffer_scenario": buffer_scenario,
1223
- "include_tech_buffer": include_tech_buffer,
1224
- "apply_sdlc_buffer": apply_sdlc_buffer,
1225
- "coverage_policy": coverage_policy,
1226
- },
1227
- "source_snapshot": {
1228
- "service_count": source_snapshot["service_count"],
1229
- "source_rows": source_snapshot["source_rows"],
1230
- "dependency_rows": source_snapshot["dependency_rows"],
1231
- "base_days": source_snapshot["base_days"],
1232
- "base_hours": source_snapshot["base_hours"],
1233
- },
1234
- "mapping": {
1235
- "mapped_rows": mapping_counts["functional_rows"],
1236
- "unmapped_rows": max(source_snapshot["source_rows"] - mapping_counts["functional_rows"], 0),
1237
- "unmapped_items": [],
1238
- "functional_rows": mapping_counts["functional_rows"],
1239
- "nonfunctional_rows": mapping_counts["nonfunctional_rows"],
1240
- "qtdl_rows": mapping_counts["qtdl_rows"],
1241
- "overflow": mapping_counts.get("overflow", {}),
1242
- "cleanup": mapping_counts.get("cleanup", {}),
1243
- "required_work_coverage": mapping_counts.get("required_work_coverage", {}),
1244
- "readability": mapping_counts.get("readability", {}),
1245
- },
1246
- "coverage": coverage,
1247
- "phase_coverage": phase_coverage,
1248
- "selected_scenario": selected_scenario,
1249
- "scenarios": scenarios,
1250
- "buffer_guidance": buffer_guidance,
1251
- "presentation": {
1252
- "required_sheet_order_ok": presentation.required_sheet_order_ok,
1253
- "merge_topology_ok": presentation.merge_topology_ok,
1254
- "header_style_parity_pct": presentation.header_style_parity_pct,
1255
- "strict_mode": presentation.strict_mode,
1256
- "failures": presentation.failures,
1257
- },
1258
- "warnings": [],
1259
- }
1260
-
1261
- if coverage_failures and coverage_policy == "warn":
1262
- report["warnings"].append({"code": "coverage_policy_warn", "details": coverage_failures})
1263
- overflow_sheets = [
1264
- sheet_name for sheet_name, overflow in mapping_counts.get("overflow", {}).items() if overflow.get("overflowed")
1265
- ]
1266
- if overflow_sheets:
1267
- report["warnings"].append(
1268
- {
1269
- "code": "write_window_overflow",
1270
- "details": {
1271
- "sheets": overflow_sheets,
1272
- "strategy": "primary_window_then_continuation",
1273
- },
1274
- }
1275
- )
1276
- if buffer_scenario != "base":
1277
- report["warnings"].append(
1278
- {
1279
- "code": "buffer_applied_non_base",
1280
- "details": {
1281
- "buffer_scenario": buffer_scenario,
1282
- "multiplier": selected_scenario["multiplier"],
1283
- "note": "Effort output is scaled from source base effort due to selected buffer scenario.",
1284
- },
1285
- }
1286
- )
1287
-
1288
- report_path = output.with_suffix(".alignment-report.json")
1289
- report_path.write_text(json.dumps(report, indent=2, ensure_ascii=False), encoding="utf-8")
1290
- report["report_file"] = str(report_path)
1291
- return report