@trungtamcongnghedigital/vsaf 1.0.0

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 (3476) hide show
  1. package/README.md +887 -0
  2. package/package.json +69 -0
  3. package/packages/cli/dist/commands/apply-pack.d.ts +29 -0
  4. package/packages/cli/dist/commands/apply-pack.d.ts.map +1 -0
  5. package/packages/cli/dist/commands/apply-pack.js +30 -0
  6. package/packages/cli/dist/commands/apply-pack.js.map +1 -0
  7. package/packages/cli/dist/commands/doctor.d.ts +22 -0
  8. package/packages/cli/dist/commands/doctor.d.ts.map +1 -0
  9. package/packages/cli/dist/commands/doctor.js +196 -0
  10. package/packages/cli/dist/commands/doctor.js.map +1 -0
  11. package/packages/cli/dist/commands/init/sdlc-docs.d.ts +11 -0
  12. package/packages/cli/dist/commands/init/sdlc-docs.d.ts.map +1 -0
  13. package/packages/cli/dist/commands/init/sdlc-docs.js +95 -0
  14. package/packages/cli/dist/commands/init/sdlc-docs.js.map +1 -0
  15. package/packages/cli/dist/commands/init.d.ts +51 -0
  16. package/packages/cli/dist/commands/init.d.ts.map +1 -0
  17. package/packages/cli/dist/commands/init.js +392 -0
  18. package/packages/cli/dist/commands/init.js.map +1 -0
  19. package/packages/cli/dist/commands/install/backup.d.ts +11 -0
  20. package/packages/cli/dist/commands/install/backup.d.ts.map +1 -0
  21. package/packages/cli/dist/commands/install/backup.js +34 -0
  22. package/packages/cli/dist/commands/install/backup.js.map +1 -0
  23. package/packages/cli/dist/commands/install/bitbucket.d.ts +53 -0
  24. package/packages/cli/dist/commands/install/bitbucket.d.ts.map +1 -0
  25. package/packages/cli/dist/commands/install/bitbucket.js +278 -0
  26. package/packages/cli/dist/commands/install/bitbucket.js.map +1 -0
  27. package/packages/cli/dist/commands/install/bootstrap-repo.d.ts +205 -0
  28. package/packages/cli/dist/commands/install/bootstrap-repo.d.ts.map +1 -0
  29. package/packages/cli/dist/commands/install/bootstrap-repo.js +687 -0
  30. package/packages/cli/dist/commands/install/bootstrap-repo.js.map +1 -0
  31. package/packages/cli/dist/commands/install/credentials.d.ts +96 -0
  32. package/packages/cli/dist/commands/install/credentials.d.ts.map +1 -0
  33. package/packages/cli/dist/commands/install/credentials.js +265 -0
  34. package/packages/cli/dist/commands/install/credentials.js.map +1 -0
  35. package/packages/cli/dist/commands/install/delegate.d.ts +163 -0
  36. package/packages/cli/dist/commands/install/delegate.d.ts.map +1 -0
  37. package/packages/cli/dist/commands/install/delegate.js +663 -0
  38. package/packages/cli/dist/commands/install/delegate.js.map +1 -0
  39. package/packages/cli/dist/commands/install/ds-registry.d.ts +38 -0
  40. package/packages/cli/dist/commands/install/ds-registry.d.ts.map +1 -0
  41. package/packages/cli/dist/commands/install/ds-registry.js +131 -0
  42. package/packages/cli/dist/commands/install/ds-registry.js.map +1 -0
  43. package/packages/cli/dist/commands/install/engine-range.d.ts +13 -0
  44. package/packages/cli/dist/commands/install/engine-range.d.ts.map +1 -0
  45. package/packages/cli/dist/commands/install/engine-range.js +50 -0
  46. package/packages/cli/dist/commands/install/engine-range.js.map +1 -0
  47. package/packages/cli/dist/commands/install/engine-version.d.ts +16 -0
  48. package/packages/cli/dist/commands/install/engine-version.d.ts.map +1 -0
  49. package/packages/cli/dist/commands/install/engine-version.js +43 -0
  50. package/packages/cli/dist/commands/install/engine-version.js.map +1 -0
  51. package/packages/cli/dist/commands/install/flow-home.d.ts +24 -0
  52. package/packages/cli/dist/commands/install/flow-home.d.ts.map +1 -0
  53. package/packages/cli/dist/commands/install/flow-home.js +63 -0
  54. package/packages/cli/dist/commands/install/flow-home.js.map +1 -0
  55. package/packages/cli/dist/commands/install/flow-script.d.ts +97 -0
  56. package/packages/cli/dist/commands/install/flow-script.d.ts.map +1 -0
  57. package/packages/cli/dist/commands/install/flow-script.js +300 -0
  58. package/packages/cli/dist/commands/install/flow-script.js.map +1 -0
  59. package/packages/cli/dist/commands/install/flow-source.d.ts +165 -0
  60. package/packages/cli/dist/commands/install/flow-source.d.ts.map +1 -0
  61. package/packages/cli/dist/commands/install/flow-source.js +549 -0
  62. package/packages/cli/dist/commands/install/flow-source.js.map +1 -0
  63. package/packages/cli/dist/commands/install/gitignore.d.ts +15 -0
  64. package/packages/cli/dist/commands/install/gitignore.d.ts.map +1 -0
  65. package/packages/cli/dist/commands/install/gitignore.js +73 -0
  66. package/packages/cli/dist/commands/install/gitignore.js.map +1 -0
  67. package/packages/cli/dist/commands/install/global-sync.d.ts +41 -0
  68. package/packages/cli/dist/commands/install/global-sync.d.ts.map +1 -0
  69. package/packages/cli/dist/commands/install/global-sync.js +123 -0
  70. package/packages/cli/dist/commands/install/global-sync.js.map +1 -0
  71. package/packages/cli/dist/commands/install/hooks.d.ts +38 -0
  72. package/packages/cli/dist/commands/install/hooks.d.ts.map +1 -0
  73. package/packages/cli/dist/commands/install/hooks.js +215 -0
  74. package/packages/cli/dist/commands/install/hooks.js.map +1 -0
  75. package/packages/cli/dist/commands/install/ide-mirror.d.ts +50 -0
  76. package/packages/cli/dist/commands/install/ide-mirror.d.ts.map +1 -0
  77. package/packages/cli/dist/commands/install/ide-mirror.js +160 -0
  78. package/packages/cli/dist/commands/install/ide-mirror.js.map +1 -0
  79. package/packages/cli/dist/commands/install/install-plan.d.ts +80 -0
  80. package/packages/cli/dist/commands/install/install-plan.d.ts.map +1 -0
  81. package/packages/cli/dist/commands/install/install-plan.js +164 -0
  82. package/packages/cli/dist/commands/install/install-plan.js.map +1 -0
  83. package/packages/cli/dist/commands/install/manifest.d.ts +84 -0
  84. package/packages/cli/dist/commands/install/manifest.d.ts.map +1 -0
  85. package/packages/cli/dist/commands/install/manifest.js +152 -0
  86. package/packages/cli/dist/commands/install/manifest.js.map +1 -0
  87. package/packages/cli/dist/commands/install/option-channels.d.ts +20 -0
  88. package/packages/cli/dist/commands/install/option-channels.d.ts.map +1 -0
  89. package/packages/cli/dist/commands/install/option-channels.js +40 -0
  90. package/packages/cli/dist/commands/install/option-channels.js.map +1 -0
  91. package/packages/cli/dist/commands/install/pick-repos.d.ts +84 -0
  92. package/packages/cli/dist/commands/install/pick-repos.d.ts.map +1 -0
  93. package/packages/cli/dist/commands/install/pick-repos.js +208 -0
  94. package/packages/cli/dist/commands/install/pick-repos.js.map +1 -0
  95. package/packages/cli/dist/commands/install/plan.d.ts +14 -0
  96. package/packages/cli/dist/commands/install/plan.d.ts.map +1 -0
  97. package/packages/cli/dist/commands/install/plan.js +197 -0
  98. package/packages/cli/dist/commands/install/plan.js.map +1 -0
  99. package/packages/cli/dist/commands/install/precommit.d.ts +15 -0
  100. package/packages/cli/dist/commands/install/precommit.d.ts.map +1 -0
  101. package/packages/cli/dist/commands/install/precommit.js +42 -0
  102. package/packages/cli/dist/commands/install/precommit.js.map +1 -0
  103. package/packages/cli/dist/commands/install/project-name.d.ts +16 -0
  104. package/packages/cli/dist/commands/install/project-name.d.ts.map +1 -0
  105. package/packages/cli/dist/commands/install/project-name.js +45 -0
  106. package/packages/cli/dist/commands/install/project-name.js.map +1 -0
  107. package/packages/cli/dist/commands/install/prompt-read.d.ts +27 -0
  108. package/packages/cli/dist/commands/install/prompt-read.d.ts.map +1 -0
  109. package/packages/cli/dist/commands/install/prompt-read.js +60 -0
  110. package/packages/cli/dist/commands/install/prompt-read.js.map +1 -0
  111. package/packages/cli/dist/commands/install/python.d.ts +25 -0
  112. package/packages/cli/dist/commands/install/python.d.ts.map +1 -0
  113. package/packages/cli/dist/commands/install/python.js +58 -0
  114. package/packages/cli/dist/commands/install/python.js.map +1 -0
  115. package/packages/cli/dist/commands/install/repo-scope.d.ts +36 -0
  116. package/packages/cli/dist/commands/install/repo-scope.d.ts.map +1 -0
  117. package/packages/cli/dist/commands/install/repo-scope.js +182 -0
  118. package/packages/cli/dist/commands/install/repo-scope.js.map +1 -0
  119. package/packages/cli/dist/commands/install/repos-config.d.ts +48 -0
  120. package/packages/cli/dist/commands/install/repos-config.d.ts.map +1 -0
  121. package/packages/cli/dist/commands/install/repos-config.js +160 -0
  122. package/packages/cli/dist/commands/install/repos-config.js.map +1 -0
  123. package/packages/cli/dist/commands/install/resolve-inputs.d.ts +94 -0
  124. package/packages/cli/dist/commands/install/resolve-inputs.d.ts.map +1 -0
  125. package/packages/cli/dist/commands/install/resolve-inputs.js +297 -0
  126. package/packages/cli/dist/commands/install/resolve-inputs.js.map +1 -0
  127. package/packages/cli/dist/commands/install/rules.d.ts +22 -0
  128. package/packages/cli/dist/commands/install/rules.d.ts.map +1 -0
  129. package/packages/cli/dist/commands/install/rules.js +131 -0
  130. package/packages/cli/dist/commands/install/rules.js.map +1 -0
  131. package/packages/cli/dist/commands/install/selftest.d.ts +14 -0
  132. package/packages/cli/dist/commands/install/selftest.d.ts.map +1 -0
  133. package/packages/cli/dist/commands/install/selftest.js +105 -0
  134. package/packages/cli/dist/commands/install/selftest.js.map +1 -0
  135. package/packages/cli/dist/commands/install/session-hook.d.ts +29 -0
  136. package/packages/cli/dist/commands/install/session-hook.d.ts.map +1 -0
  137. package/packages/cli/dist/commands/install/session-hook.js +59 -0
  138. package/packages/cli/dist/commands/install/session-hook.js.map +1 -0
  139. package/packages/cli/dist/commands/install/skill-hooks.d.ts +19 -0
  140. package/packages/cli/dist/commands/install/skill-hooks.d.ts.map +1 -0
  141. package/packages/cli/dist/commands/install/skill-hooks.js +73 -0
  142. package/packages/cli/dist/commands/install/skill-hooks.js.map +1 -0
  143. package/packages/cli/dist/commands/install/skills-lock.d.ts +31 -0
  144. package/packages/cli/dist/commands/install/skills-lock.d.ts.map +1 -0
  145. package/packages/cli/dist/commands/install/skills-lock.js +72 -0
  146. package/packages/cli/dist/commands/install/skills-lock.js.map +1 -0
  147. package/packages/cli/dist/commands/install/spec-scaffold.d.ts +84 -0
  148. package/packages/cli/dist/commands/install/spec-scaffold.d.ts.map +1 -0
  149. package/packages/cli/dist/commands/install/spec-scaffold.js +238 -0
  150. package/packages/cli/dist/commands/install/spec-scaffold.js.map +1 -0
  151. package/packages/cli/dist/commands/install/workspace-file.d.ts +17 -0
  152. package/packages/cli/dist/commands/install/workspace-file.d.ts.map +1 -0
  153. package/packages/cli/dist/commands/install/workspace-file.js +53 -0
  154. package/packages/cli/dist/commands/install/workspace-file.js.map +1 -0
  155. package/packages/cli/dist/commands/install/workspace.d.ts +95 -0
  156. package/packages/cli/dist/commands/install/workspace.d.ts.map +1 -0
  157. package/packages/cli/dist/commands/install/workspace.js +278 -0
  158. package/packages/cli/dist/commands/install/workspace.js.map +1 -0
  159. package/packages/cli/dist/commands/install.d.ts +156 -0
  160. package/packages/cli/dist/commands/install.d.ts.map +1 -0
  161. package/packages/cli/dist/commands/install.js +1100 -0
  162. package/packages/cli/dist/commands/install.js.map +1 -0
  163. package/packages/cli/dist/commands/list.d.ts +7 -0
  164. package/packages/cli/dist/commands/list.d.ts.map +1 -0
  165. package/packages/cli/dist/commands/list.js +40 -0
  166. package/packages/cli/dist/commands/list.js.map +1 -0
  167. package/packages/cli/dist/commands/mcp.d.ts +2 -0
  168. package/packages/cli/dist/commands/mcp.d.ts.map +1 -0
  169. package/packages/cli/dist/commands/mcp.js +8 -0
  170. package/packages/cli/dist/commands/mcp.js.map +1 -0
  171. package/packages/cli/dist/commands/run.d.ts +13 -0
  172. package/packages/cli/dist/commands/run.d.ts.map +1 -0
  173. package/packages/cli/dist/commands/run.js +121 -0
  174. package/packages/cli/dist/commands/run.js.map +1 -0
  175. package/packages/cli/dist/commands/serve.d.ts +6 -0
  176. package/packages/cli/dist/commands/serve.d.ts.map +1 -0
  177. package/packages/cli/dist/commands/serve.js +28 -0
  178. package/packages/cli/dist/commands/serve.js.map +1 -0
  179. package/packages/cli/dist/commands/skill.d.ts +176 -0
  180. package/packages/cli/dist/commands/skill.d.ts.map +1 -0
  181. package/packages/cli/dist/commands/skill.js +399 -0
  182. package/packages/cli/dist/commands/skill.js.map +1 -0
  183. package/packages/cli/dist/commands/status.d.ts +4 -0
  184. package/packages/cli/dist/commands/status.d.ts.map +1 -0
  185. package/packages/cli/dist/commands/status.js +21 -0
  186. package/packages/cli/dist/commands/status.js.map +1 -0
  187. package/packages/cli/dist/commands/sync.d.ts +25 -0
  188. package/packages/cli/dist/commands/sync.d.ts.map +1 -0
  189. package/packages/cli/dist/commands/sync.js +46 -0
  190. package/packages/cli/dist/commands/sync.js.map +1 -0
  191. package/packages/cli/dist/commands/telemetry-skill.d.ts +73 -0
  192. package/packages/cli/dist/commands/telemetry-skill.d.ts.map +1 -0
  193. package/packages/cli/dist/commands/telemetry-skill.js +347 -0
  194. package/packages/cli/dist/commands/telemetry-skill.js.map +1 -0
  195. package/packages/cli/dist/commands/uninstall.d.ts +23 -0
  196. package/packages/cli/dist/commands/uninstall.d.ts.map +1 -0
  197. package/packages/cli/dist/commands/uninstall.js +226 -0
  198. package/packages/cli/dist/commands/uninstall.js.map +1 -0
  199. package/packages/cli/dist/index.d.ts +3 -0
  200. package/packages/cli/dist/index.d.ts.map +1 -0
  201. package/packages/cli/dist/index.js +1003 -0
  202. package/packages/cli/dist/index.js.map +1 -0
  203. package/packages/cli/dist/mcp/drift-glue.d.ts +10 -0
  204. package/packages/cli/dist/mcp/drift-glue.d.ts.map +1 -0
  205. package/packages/cli/dist/mcp/drift-glue.js +27 -0
  206. package/packages/cli/dist/mcp/drift-glue.js.map +1 -0
  207. package/packages/cli/dist/mcp/server.d.ts +107 -0
  208. package/packages/cli/dist/mcp/server.d.ts.map +1 -0
  209. package/packages/cli/dist/mcp/server.js +477 -0
  210. package/packages/cli/dist/mcp/server.js.map +1 -0
  211. package/packages/cli/dist/server/app.d.ts +8 -0
  212. package/packages/cli/dist/server/app.d.ts.map +1 -0
  213. package/packages/cli/dist/server/app.js +29 -0
  214. package/packages/cli/dist/server/app.js.map +1 -0
  215. package/packages/cli/dist/server/routes/health.d.ts +3 -0
  216. package/packages/cli/dist/server/routes/health.d.ts.map +1 -0
  217. package/packages/cli/dist/server/routes/health.js +13 -0
  218. package/packages/cli/dist/server/routes/health.js.map +1 -0
  219. package/packages/cli/dist/server/routes/runs.d.ts +9 -0
  220. package/packages/cli/dist/server/routes/runs.d.ts.map +1 -0
  221. package/packages/cli/dist/server/routes/runs.js +57 -0
  222. package/packages/cli/dist/server/routes/runs.js.map +1 -0
  223. package/packages/cli/dist/server/routes/workflows.d.ts +5 -0
  224. package/packages/cli/dist/server/routes/workflows.d.ts.map +1 -0
  225. package/packages/cli/dist/server/routes/workflows.js +56 -0
  226. package/packages/cli/dist/server/routes/workflows.js.map +1 -0
  227. package/packages/cli/dist/server/services/execution-manager.d.ts +15 -0
  228. package/packages/cli/dist/server/services/execution-manager.d.ts.map +1 -0
  229. package/packages/cli/dist/server/services/execution-manager.js +92 -0
  230. package/packages/cli/dist/server/services/execution-manager.js.map +1 -0
  231. package/packages/cli/dist/server/services/sse-manager.d.ts +9 -0
  232. package/packages/cli/dist/server/services/sse-manager.d.ts.map +1 -0
  233. package/packages/cli/dist/server/services/sse-manager.js +41 -0
  234. package/packages/cli/dist/server/services/sse-manager.js.map +1 -0
  235. package/packages/cli/dist/server/static.d.ts +3 -0
  236. package/packages/cli/dist/server/static.d.ts.map +1 -0
  237. package/packages/cli/dist/server/static.js +30 -0
  238. package/packages/cli/dist/server/static.js.map +1 -0
  239. package/packages/cli/dist/telemetry/active-node.d.ts +36 -0
  240. package/packages/cli/dist/telemetry/active-node.d.ts.map +1 -0
  241. package/packages/cli/dist/telemetry/active-node.js +195 -0
  242. package/packages/cli/dist/telemetry/active-node.js.map +1 -0
  243. package/packages/cli/dist/telemetry/callbacks.d.ts +58 -0
  244. package/packages/cli/dist/telemetry/callbacks.d.ts.map +1 -0
  245. package/packages/cli/dist/telemetry/callbacks.js +140 -0
  246. package/packages/cli/dist/telemetry/callbacks.js.map +1 -0
  247. package/packages/cli/dist/telemetry/config.d.ts +32 -0
  248. package/packages/cli/dist/telemetry/config.d.ts.map +1 -0
  249. package/packages/cli/dist/telemetry/config.js +90 -0
  250. package/packages/cli/dist/telemetry/config.js.map +1 -0
  251. package/packages/cli/dist/telemetry/fs-safe.d.ts +10 -0
  252. package/packages/cli/dist/telemetry/fs-safe.d.ts.map +1 -0
  253. package/packages/cli/dist/telemetry/fs-safe.js +15 -0
  254. package/packages/cli/dist/telemetry/fs-safe.js.map +1 -0
  255. package/packages/cli/dist/telemetry/index.d.ts +31 -0
  256. package/packages/cli/dist/telemetry/index.d.ts.map +1 -0
  257. package/packages/cli/dist/telemetry/index.js +89 -0
  258. package/packages/cli/dist/telemetry/index.js.map +1 -0
  259. package/packages/cli/dist/telemetry/langfuse-scores.d.ts +23 -0
  260. package/packages/cli/dist/telemetry/langfuse-scores.d.ts.map +1 -0
  261. package/packages/cli/dist/telemetry/langfuse-scores.js +54 -0
  262. package/packages/cli/dist/telemetry/langfuse-scores.js.map +1 -0
  263. package/packages/cli/dist/telemetry/metrics/code-roots.d.ts +15 -0
  264. package/packages/cli/dist/telemetry/metrics/code-roots.d.ts.map +1 -0
  265. package/packages/cli/dist/telemetry/metrics/code-roots.js +85 -0
  266. package/packages/cli/dist/telemetry/metrics/code-roots.js.map +1 -0
  267. package/packages/cli/dist/telemetry/metrics/output-metrics.d.ts +124 -0
  268. package/packages/cli/dist/telemetry/metrics/output-metrics.d.ts.map +1 -0
  269. package/packages/cli/dist/telemetry/metrics/output-metrics.js +440 -0
  270. package/packages/cli/dist/telemetry/metrics/output-metrics.js.map +1 -0
  271. package/packages/cli/dist/telemetry/otel-sdk.d.ts +58 -0
  272. package/packages/cli/dist/telemetry/otel-sdk.d.ts.map +1 -0
  273. package/packages/cli/dist/telemetry/otel-sdk.js +148 -0
  274. package/packages/cli/dist/telemetry/otel-sdk.js.map +1 -0
  275. package/packages/cli/dist/telemetry/otel-tracer.d.ts +39 -0
  276. package/packages/cli/dist/telemetry/otel-tracer.d.ts.map +1 -0
  277. package/packages/cli/dist/telemetry/otel-tracer.js +391 -0
  278. package/packages/cli/dist/telemetry/otel-tracer.js.map +1 -0
  279. package/packages/cli/dist/telemetry/session/claude-session.d.ts +9 -0
  280. package/packages/cli/dist/telemetry/session/claude-session.d.ts.map +1 -0
  281. package/packages/cli/dist/telemetry/session/claude-session.js +33 -0
  282. package/packages/cli/dist/telemetry/session/claude-session.js.map +1 -0
  283. package/packages/cli/dist/telemetry/skill-metrics-paths.d.ts +9 -0
  284. package/packages/cli/dist/telemetry/skill-metrics-paths.d.ts.map +1 -0
  285. package/packages/cli/dist/telemetry/skill-metrics-paths.js +12 -0
  286. package/packages/cli/dist/telemetry/skill-metrics-paths.js.map +1 -0
  287. package/packages/cli/dist/telemetry/tracer.d.ts +63 -0
  288. package/packages/cli/dist/telemetry/tracer.d.ts.map +1 -0
  289. package/packages/cli/dist/telemetry/tracer.js +15 -0
  290. package/packages/cli/dist/telemetry/tracer.js.map +1 -0
  291. package/packages/cli/dist/telemetry/user.d.ts +9 -0
  292. package/packages/cli/dist/telemetry/user.d.ts.map +1 -0
  293. package/packages/cli/dist/telemetry/user.js +37 -0
  294. package/packages/cli/dist/telemetry/user.js.map +1 -0
  295. package/packages/cli/dist/ui/progress.d.ts +3 -0
  296. package/packages/cli/dist/ui/progress.d.ts.map +1 -0
  297. package/packages/cli/dist/ui/progress.js +27 -0
  298. package/packages/cli/dist/ui/progress.js.map +1 -0
  299. package/packages/core/dist/commands/command-loader.d.ts +9 -0
  300. package/packages/core/dist/commands/command-loader.d.ts.map +1 -0
  301. package/packages/core/dist/commands/command-loader.js +32 -0
  302. package/packages/core/dist/commands/command-loader.js.map +1 -0
  303. package/packages/core/dist/commands/prompt-builder.d.ts +3 -0
  304. package/packages/core/dist/commands/prompt-builder.d.ts.map +1 -0
  305. package/packages/core/dist/commands/prompt-builder.js +9 -0
  306. package/packages/core/dist/commands/prompt-builder.js.map +1 -0
  307. package/packages/core/dist/config/config-loader.d.ts +60 -0
  308. package/packages/core/dist/config/config-loader.d.ts.map +1 -0
  309. package/packages/core/dist/config/config-loader.js +54 -0
  310. package/packages/core/dist/config/config-loader.js.map +1 -0
  311. package/packages/core/dist/engine/condition-evaluator.d.ts +7 -0
  312. package/packages/core/dist/engine/condition-evaluator.d.ts.map +1 -0
  313. package/packages/core/dist/engine/condition-evaluator.js +37 -0
  314. package/packages/core/dist/engine/condition-evaluator.js.map +1 -0
  315. package/packages/core/dist/engine/contract-validator.d.ts +2 -0
  316. package/packages/core/dist/engine/contract-validator.d.ts.map +1 -0
  317. package/packages/core/dist/engine/contract-validator.js +8 -0
  318. package/packages/core/dist/engine/contract-validator.js.map +1 -0
  319. package/packages/core/dist/engine/cycle-detector.d.ts +4 -0
  320. package/packages/core/dist/engine/cycle-detector.d.ts.map +1 -0
  321. package/packages/core/dist/engine/cycle-detector.js +39 -0
  322. package/packages/core/dist/engine/cycle-detector.js.map +1 -0
  323. package/packages/core/dist/engine/dag-executor.d.ts +135 -0
  324. package/packages/core/dist/engine/dag-executor.d.ts.map +1 -0
  325. package/packages/core/dist/engine/dag-executor.js +535 -0
  326. package/packages/core/dist/engine/dag-executor.js.map +1 -0
  327. package/packages/core/dist/engine/dag-parser.d.ts +3 -0
  328. package/packages/core/dist/engine/dag-parser.d.ts.map +1 -0
  329. package/packages/core/dist/engine/dag-parser.js +92 -0
  330. package/packages/core/dist/engine/dag-parser.js.map +1 -0
  331. package/packages/core/dist/engine/node-runner.d.ts +31 -0
  332. package/packages/core/dist/engine/node-runner.d.ts.map +1 -0
  333. package/packages/core/dist/engine/node-runner.js +145 -0
  334. package/packages/core/dist/engine/node-runner.js.map +1 -0
  335. package/packages/core/dist/engine/variable-resolver.d.ts +24 -0
  336. package/packages/core/dist/engine/variable-resolver.d.ts.map +1 -0
  337. package/packages/core/dist/engine/variable-resolver.js +55 -0
  338. package/packages/core/dist/engine/variable-resolver.js.map +1 -0
  339. package/packages/core/dist/index.d.ts +22 -0
  340. package/packages/core/dist/index.d.ts.map +1 -0
  341. package/packages/core/dist/index.js +60 -0
  342. package/packages/core/dist/index.js.map +1 -0
  343. package/packages/core/dist/isolation/artifact-store.d.ts +9 -0
  344. package/packages/core/dist/isolation/artifact-store.d.ts.map +1 -0
  345. package/packages/core/dist/isolation/artifact-store.js +30 -0
  346. package/packages/core/dist/isolation/artifact-store.js.map +1 -0
  347. package/packages/core/dist/isolation/workspace-manager.d.ts +65 -0
  348. package/packages/core/dist/isolation/workspace-manager.d.ts.map +1 -0
  349. package/packages/core/dist/isolation/workspace-manager.js +272 -0
  350. package/packages/core/dist/isolation/workspace-manager.js.map +1 -0
  351. package/packages/core/dist/isolation/workspace-resolver.d.ts +18 -0
  352. package/packages/core/dist/isolation/workspace-resolver.d.ts.map +1 -0
  353. package/packages/core/dist/isolation/workspace-resolver.js +24 -0
  354. package/packages/core/dist/isolation/workspace-resolver.js.map +1 -0
  355. package/packages/core/dist/providers/provider-registry.d.ts +8 -0
  356. package/packages/core/dist/providers/provider-registry.d.ts.map +1 -0
  357. package/packages/core/dist/providers/provider-registry.js +21 -0
  358. package/packages/core/dist/providers/provider-registry.js.map +1 -0
  359. package/packages/core/dist/schema/ajv-instance.d.ts +3 -0
  360. package/packages/core/dist/schema/ajv-instance.d.ts.map +1 -0
  361. package/packages/core/dist/schema/ajv-instance.js +12 -0
  362. package/packages/core/dist/schema/ajv-instance.js.map +1 -0
  363. package/packages/core/dist/schema/validators.d.ts +11 -0
  364. package/packages/core/dist/schema/validators.d.ts.map +1 -0
  365. package/packages/core/dist/schema/validators.js +68 -0
  366. package/packages/core/dist/schema/validators.js.map +1 -0
  367. package/packages/core/dist/schema/workflow-schema.d.ts +188 -0
  368. package/packages/core/dist/schema/workflow-schema.d.ts.map +1 -0
  369. package/packages/core/dist/schema/workflow-schema.js +104 -0
  370. package/packages/core/dist/schema/workflow-schema.js.map +1 -0
  371. package/packages/core/dist/skills/skill-loader.d.ts +9 -0
  372. package/packages/core/dist/skills/skill-loader.d.ts.map +1 -0
  373. package/packages/core/dist/skills/skill-loader.js +42 -0
  374. package/packages/core/dist/skills/skill-loader.js.map +1 -0
  375. package/packages/core/dist/store/event-log.d.ts +8 -0
  376. package/packages/core/dist/store/event-log.d.ts.map +1 -0
  377. package/packages/core/dist/store/event-log.js +30 -0
  378. package/packages/core/dist/store/event-log.js.map +1 -0
  379. package/packages/core/dist/store/run-lock.d.ts +19 -0
  380. package/packages/core/dist/store/run-lock.d.ts.map +1 -0
  381. package/packages/core/dist/store/run-lock.js +70 -0
  382. package/packages/core/dist/store/run-lock.js.map +1 -0
  383. package/packages/core/dist/store/run-store.d.ts +31 -0
  384. package/packages/core/dist/store/run-store.d.ts.map +1 -0
  385. package/packages/core/dist/store/run-store.js +136 -0
  386. package/packages/core/dist/store/run-store.js.map +1 -0
  387. package/packages/core/dist/store/types.d.ts +30 -0
  388. package/packages/core/dist/store/types.d.ts.map +1 -0
  389. package/packages/core/dist/store/types.js +3 -0
  390. package/packages/core/dist/store/types.js.map +1 -0
  391. package/packages/core/dist/types/dag.d.ts +49 -0
  392. package/packages/core/dist/types/dag.d.ts.map +1 -0
  393. package/packages/core/dist/types/dag.js +3 -0
  394. package/packages/core/dist/types/dag.js.map +1 -0
  395. package/packages/core/dist/types/index.d.ts +4 -0
  396. package/packages/core/dist/types/index.d.ts.map +1 -0
  397. package/packages/core/dist/types/index.js +20 -0
  398. package/packages/core/dist/types/index.js.map +1 -0
  399. package/packages/core/dist/types/provider.d.ts +19 -0
  400. package/packages/core/dist/types/provider.d.ts.map +1 -0
  401. package/packages/core/dist/types/provider.js +3 -0
  402. package/packages/core/dist/types/provider.js.map +1 -0
  403. package/packages/core/dist/types/workflow.d.ts +63 -0
  404. package/packages/core/dist/types/workflow.d.ts.map +1 -0
  405. package/packages/core/dist/types/workflow.js +3 -0
  406. package/packages/core/dist/types/workflow.js.map +1 -0
  407. package/packages/web/dist/web/3rdpartylicenses.txt +614 -0
  408. package/packages/web/dist/web/browser/chunk-2QJBTGYU.js +3 -0
  409. package/packages/web/dist/web/browser/chunk-3VYLP4FZ.js +1 -0
  410. package/packages/web/dist/web/browser/chunk-6HRQZQXD.js +1 -0
  411. package/packages/web/dist/web/browser/chunk-7PK6Q4UU.js +1 -0
  412. package/packages/web/dist/web/browser/chunk-O7TQGEFF.js +8 -0
  413. package/packages/web/dist/web/browser/chunk-PWF76NCM.js +1 -0
  414. package/packages/web/dist/web/browser/favicon.ico +0 -0
  415. package/packages/web/dist/web/browser/index.html +13 -0
  416. package/packages/web/dist/web/browser/main-AZU5W3KI.js +1 -0
  417. package/packages/web/dist/web/browser/polyfills-YMBILSHJ.js +2 -0
  418. package/packages/web/dist/web/browser/styles-JBPZVY54.css +1 -0
  419. package/packages/web/dist/web/prerendered-routes.json +3 -0
  420. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/SKILL.md +6 -0
  421. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/agents/agent_a_context_strategist.md +23 -0
  422. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/agents/agent_b_research_scout.md +23 -0
  423. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/agents/agent_c_system_architect.md +30 -0
  424. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/agents/agent_d_implementation_sec.md +24 -0
  425. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/agents/agent_e_orchestrator.md +31 -0
  426. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/agents/agent_f_integration_architect.md +28 -0
  427. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/principles/iron_rules.md +111 -0
  428. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-01-init.md +138 -0
  429. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-02-strategy.md +142 -0
  430. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-03-research.md +111 -0
  431. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-04.1-architecture-global.md +153 -0
  432. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-04.1b-wbs-audit.md +97 -0
  433. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-04.2-architecture-modules.md +75 -0
  434. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-05-implementation-security.md +170 -0
  435. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-06-module0.md +106 -0
  436. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/steps/step-07-assembly.md +168 -0
  437. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/templates/architecture_design_final_template.md +268 -0
  438. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/templates/coverage_matrix_wbs.md +210 -0
  439. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/templates/module_0_template.md +76 -0
  440. package/skills/NTAPP/.agent/skills/NTAPP-architecture-design/workflow.md +235 -0
  441. package/skills/NTAPP/.agent/skills/NTAPP-bug-fix-engine/SKILL.md +35 -0
  442. package/skills/NTAPP/.agent/skills/NTAPP-bug-fix-engine/steps/step-01-rootcause-gates.md +42 -0
  443. package/skills/NTAPP/.agent/skills/NTAPP-bug-fix-engine/steps/step-02-fix-verify-review.md +46 -0
  444. package/skills/NTAPP/.agent/skills/NTAPP-bug-fix-engine/steps/step-03-close.md +46 -0
  445. package/skills/NTAPP/.agent/skills/NTAPP-bug-fix-engine/workflow.md +100 -0
  446. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/SKILL.md +111 -0
  447. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/agents/agent_erd_data_architect.md +30 -0
  448. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/references/confluence-publish.md +113 -0
  449. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/references/diagram-drawio.md +108 -0
  450. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/references/erd-consolidation.md +102 -0
  451. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/references/extract-from-code.md +19 -0
  452. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/references/scope-brownfield-vs-newbuild.md +28 -0
  453. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/references/style-conventions.md +120 -0
  454. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/scripts/confluence-get.ps1 +73 -0
  455. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/scripts/confluence-publish.ps1 +210 -0
  456. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/scripts/drawio_lib.py +578 -0
  457. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/scripts/preview.py +487 -0
  458. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/scripts/test_drawio_erd.py +61 -0
  459. package/skills/NTAPP/.agent/skills/NTAPP-business-overview-confluence/workflow.md +175 -0
  460. package/skills/NTAPP/.agent/skills/NTAPP-create-pull-request/SKILL.md +162 -0
  461. package/skills/NTAPP/.agent/skills/NTAPP-create-pull-request/bitbucket_pr.py +414 -0
  462. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/SKILL.md +6 -0
  463. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/agents/agent_d0_orchestrator.md +27 -0
  464. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/agents/agent_d1_strategic_analyst.md +24 -0
  465. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/agents/agent_d2_tactical_modeler.md +24 -0
  466. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/agents/agent_d3_maturity_assessor.md +24 -0
  467. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/agents/agent_d4_target_migration.md +24 -0
  468. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/principles/iron_rules.md +110 -0
  469. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/principles/maturity_rubric.md +88 -0
  470. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/steps/step-01-init.md +94 -0
  471. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/steps/step-02-strategic.md +70 -0
  472. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/steps/step-03-tactical.md +66 -0
  473. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/steps/step-04-maturity.md +64 -0
  474. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/steps/step-05-target-migration.md +71 -0
  475. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/steps/step-06-assembly.md +76 -0
  476. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/templates/aggregates_template.md +46 -0
  477. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/templates/context_bc_template.md +33 -0
  478. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/templates/context_map_template.md +58 -0
  479. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/templates/events_template.md +33 -0
  480. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/templates/maturity_template.md +58 -0
  481. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/templates/migration_template.md +38 -0
  482. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/templates/target_template.md +47 -0
  483. package/skills/NTAPP/.agent/skills/NTAPP-dd-design/workflow.md +185 -0
  484. package/skills/NTAPP/.agent/skills/NTAPP-dd-to-confluence/SKILL.md +35 -0
  485. package/skills/NTAPP/.agent/skills/NTAPP-dd-to-confluence/references/confluence-api.md +121 -0
  486. package/skills/NTAPP/.agent/skills/NTAPP-dd-to-confluence/references/mermaid-to-plantuml.md +93 -0
  487. package/skills/NTAPP/.agent/skills/NTAPP-dd-to-confluence/references/storage-format.md +91 -0
  488. package/skills/NTAPP/.agent/skills/NTAPP-dd-to-confluence/workflow.md +207 -0
  489. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/SKILL.md +14 -0
  490. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/agents/bootstrap-applier.md +110 -0
  491. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/agents/component-discoverer.md +255 -0
  492. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/agents/conflict-resolver.md +181 -0
  493. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/agents/library-api-parser.md +143 -0
  494. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/agents/normalizer.md +213 -0
  495. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/agents/raw-style-extractor.md +144 -0
  496. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/agents/stack-detector.md +135 -0
  497. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-01-stack-detect.md +127 -0
  498. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-01b-library-api-parse.md +155 -0
  499. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-02-extract.md +55 -0
  500. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-03-discover.md +96 -0
  501. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-03b-visual-reference.md +83 -0
  502. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-04-normalize.md +82 -0
  503. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-05-conflict-resolve.md +58 -0
  504. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-06-human-approval.md +92 -0
  505. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/steps/step-07-apply.md +123 -0
  506. package/skills/NTAPP/.agent/skills/NTAPP-ds-bootstrap/workflow.md +147 -0
  507. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/SKILL.md +16 -0
  508. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/agents/component-patcher.md +103 -0
  509. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/agents/component-scaffolder.md +214 -0
  510. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/agents/delta-router.md +97 -0
  511. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/agents/metadata-registrar.md +140 -0
  512. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/agents/runtime-token-exporter.md +214 -0
  513. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/agents/token-applier.md +70 -0
  514. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/agents/warning-blocker.md +71 -0
  515. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/steps/step-01-route.md +111 -0
  516. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/steps/step-02-warning-gate.md +87 -0
  517. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/steps/step-03-apply-tokens.md +97 -0
  518. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/steps/step-03b-export-runtime-tokens.md +110 -0
  519. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/steps/step-04-apply-components.md +228 -0
  520. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/steps/step-05-archive-report.md +79 -0
  521. package/skills/NTAPP/.agent/skills/NTAPP-ds-build-component/workflow.md +151 -0
  522. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/SKILL.md +13 -0
  523. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/agents/agent_f0_orchestrator.md +33 -0
  524. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/agents/agent_f1_logic_specialist.md +19 -0
  525. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/agents/agent_f2_test_data_specialist.md +23 -0
  526. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/agents/agent_f3_ui_specialist.md +40 -0
  527. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/agents/agent_f4_qa_specialist.md +22 -0
  528. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/principles/iron_rules.md +144 -0
  529. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/steps/step-01-inheritance-audit.md +110 -0
  530. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/steps/step-02-ui-interaction-design.md +152 -0
  531. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/steps/step-03-logic-modeling.md +39 -0
  532. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/steps/step-04-data-integration.md +47 -0
  533. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/steps/step-05-qa-protocol.md +32 -0
  534. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/steps/step-06-sync-audit.md +84 -0
  535. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/steps/step-07-assembly.md +84 -0
  536. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/templates/master_detailed_design_v4_template.md +190 -0
  537. package/skills/NTAPP/.agent/skills/NTAPP-feature-design/workflow.md +318 -0
  538. package/skills/NTAPP/.agent/skills/NTAPP-feature-triage/SKILL.md +12 -0
  539. package/skills/NTAPP/.agent/skills/NTAPP-feature-triage/workflow.md +271 -0
  540. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/SKILL.md +14 -0
  541. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/agents/frame-mapper.md +74 -0
  542. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/references/figma-manifest-schema.md +151 -0
  543. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/scripts/figma-fetch.sh +263 -0
  544. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-01-source-resolve.md +112 -0
  545. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-01t-token-export.md +77 -0
  546. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-02-frame-harvest.md +99 -0
  547. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-03-unit-mapping.md +139 -0
  548. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-04-spec-extract.md +276 -0
  549. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-05-ds-reconcile.md +135 -0
  550. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-06-frame-export.md +77 -0
  551. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/steps/step-07-emit.md +147 -0
  552. package/skills/NTAPP/.agent/skills/NTAPP-figma-ingest/workflow.md +255 -0
  553. package/skills/NTAPP/.agent/skills/NTAPP-fix-bug/SKILL.md +48 -0
  554. package/skills/NTAPP/.agent/skills/NTAPP-fix-bug/steps/step-01-triage-plan.md +76 -0
  555. package/skills/NTAPP/.agent/skills/NTAPP-fix-bug/steps/step-02-fix-and-verify.md +60 -0
  556. package/skills/NTAPP/.agent/skills/NTAPP-fix-bug/steps/step-03-doc-sync-report.md +102 -0
  557. package/skills/NTAPP/.agent/skills/NTAPP-fix-bug/workflow.md +110 -0
  558. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/SKILL.md +14 -0
  559. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/references/api-spec-template.md +160 -0
  560. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/references/elicitation-questions.md +113 -0
  561. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/references/erd-and-mapping.md +124 -0
  562. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/references/integration-types.md +87 -0
  563. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/references/output-template.md +157 -0
  564. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/references/qa-file-template.md +25 -0
  565. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/references/sequence-diagram-examples.md +163 -0
  566. package/skills/NTAPP/.agent/skills/NTAPP-integration-inspection/workflow.md +144 -0
  567. package/skills/NTAPP/.agent/skills/NTAPP-jira-subtask-creator/SKILL.md +236 -0
  568. package/skills/NTAPP/.agent/skills/NTAPP-jira-subtask-creator/env.example.md +15 -0
  569. package/skills/NTAPP/.agent/skills/NTAPP-jira-subtask-creator/jira_subtask.py +711 -0
  570. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/SKILL.md +74 -0
  571. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/references/confluence-resolve.md +106 -0
  572. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/references/delta-detection.md +96 -0
  573. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/references/kbnt-authoring.md +128 -0
  574. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/references/merge-rules.md +113 -0
  575. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/scripts/build-kbnt-storage.py +273 -0
  576. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/scripts/confluence-create.ps1 +51 -0
  577. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/scripts/confluence-update.ps1 +59 -0
  578. package/skills/NTAPP/.agent/skills/NTAPP-kbnt-to-confluence/workflow.md +244 -0
  579. package/skills/NTAPP/.agent/skills/NTAPP-keycloak-integrate/SKILL.md +56 -0
  580. package/skills/NTAPP/.agent/skills/NTAPP-keycloak-integrate/references/be-integration.md +135 -0
  581. package/skills/NTAPP/.agent/skills/NTAPP-keycloak-integrate/references/fe-integration.md +120 -0
  582. package/skills/NTAPP/.agent/skills/NTAPP-keycloak-integrate/references/keycloak-config.md +155 -0
  583. package/skills/NTAPP/.agent/skills/NTAPP-keycloak-integrate/references/troubleshooting.md +61 -0
  584. package/skills/NTAPP/.agent/skills/NTAPP-keycloak-integrate/scripts/kc-admin.js +903 -0
  585. package/skills/NTAPP/.agent/skills/NTAPP-log-bug/SKILL.md +331 -0
  586. package/skills/NTAPP/.agent/skills/NTAPP-log-bug/capture-bug-image.sh +176 -0
  587. package/skills/NTAPP/.agent/skills/NTAPP-log-bug/env.example.md +19 -0
  588. package/skills/NTAPP/.agent/skills/NTAPP-log-bug/jira_bug.py +481 -0
  589. package/skills/NTAPP/.agent/skills/NTAPP-market-research/SKILL.md +6 -0
  590. package/skills/NTAPP/.agent/skills/NTAPP-market-research/agents/chief_editor.md +33 -0
  591. package/skills/NTAPP/.agent/skills/NTAPP-market-research/agents/feature_analyst.md +45 -0
  592. package/skills/NTAPP/.agent/skills/NTAPP-market-research/agents/market_researcher.md +30 -0
  593. package/skills/NTAPP/.agent/skills/NTAPP-market-research/agents/product_strategist.md +46 -0
  594. package/skills/NTAPP/.agent/skills/NTAPP-market-research/agents/scout_agent.md +28 -0
  595. package/skills/NTAPP/.agent/skills/NTAPP-market-research/steps/step-00-scout-jtbd.md +19 -0
  596. package/skills/NTAPP/.agent/skills/NTAPP-market-research/steps/step-01-market-research.md +11 -0
  597. package/skills/NTAPP/.agent/skills/NTAPP-market-research/steps/step-02-product-strategy.md +14 -0
  598. package/skills/NTAPP/.agent/skills/NTAPP-market-research/steps/step-03-feature-analysis.md +13 -0
  599. package/skills/NTAPP/.agent/skills/NTAPP-market-research/steps/step-04-chief-editor-synthesis.md +19 -0
  600. package/skills/NTAPP/.agent/skills/NTAPP-market-research/workflow.md +66 -0
  601. package/skills/NTAPP/.agent/skills/NTAPP-okf-refresh/SKILL.md +238 -0
  602. package/skills/NTAPP/.agent/skills/NTAPP-product-research/SKILL.md +6 -0
  603. package/skills/NTAPP/.agent/skills/NTAPP-product-research/agents/pr_chief_editor.md +17 -0
  604. package/skills/NTAPP/.agent/skills/NTAPP-product-research/agents/product_manager.md +18 -0
  605. package/skills/NTAPP/.agent/skills/NTAPP-product-research/agents/user_researcher.md +18 -0
  606. package/skills/NTAPP/.agent/skills/NTAPP-product-research/steps/step-01-init.md +18 -0
  607. package/skills/NTAPP/.agent/skills/NTAPP-product-research/steps/step-02-segmentation.md +28 -0
  608. package/skills/NTAPP/.agent/skills/NTAPP-product-research/steps/step-03-journey.md +32 -0
  609. package/skills/NTAPP/.agent/skills/NTAPP-product-research/steps/step-04-pain-matrix.md +22 -0
  610. package/skills/NTAPP/.agent/skills/NTAPP-product-research/steps/step-05-prioritization.md +17 -0
  611. package/skills/NTAPP/.agent/skills/NTAPP-product-research/steps/step-06-synthesis.md +19 -0
  612. package/skills/NTAPP/.agent/skills/NTAPP-product-research/workflow.md +58 -0
  613. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/SKILL.md +10 -0
  614. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/agents/agent_qa_auditor.md +33 -0
  615. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/references/behavior-completeness-rules.md +45 -0
  616. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/references/contract-consistency-rules.md +38 -0
  617. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/references/no-hallucination-rule.md +44 -0
  618. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/references/ntapp-core-compliance.md +45 -0
  619. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/steps/step-01-ambiguity-audit.md +44 -0
  620. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/templates/qa_report_template.md +90 -0
  621. package/skills/NTAPP/.agent/skills/NTAPP-qa-audit/workflow.md +85 -0
  622. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/SKILL.md +12 -0
  623. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/references/no-hallucination-rule.md +23 -0
  624. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/references/priority-resolution-rule.md +64 -0
  625. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/steps/step-01-parse-and-map.md +49 -0
  626. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/steps/step-02-evidence-and-propose.md +48 -0
  627. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/steps/step-03-writeback-gate.md +51 -0
  628. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/steps/step-04-execute.md +44 -0
  629. package/skills/NTAPP/.agent/skills/NTAPP-qa-gap-resolver/workflow.md +106 -0
  630. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/SKILL.md +20 -0
  631. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/agents/agent_generate_manual_testcase.md +27 -0
  632. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/automation_contract_rules.md +125 -0
  633. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/borrowed_surface_rules.md +63 -0
  634. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/dynamic_data_rules.md +152 -0
  635. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/explore_and_consistency_rules.md +128 -0
  636. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/finalization_rules.md +30 -0
  637. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/incremental_update_rules.md +50 -0
  638. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/iron_rules.md +121 -0
  639. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/markdown_safety_rules.md +48 -0
  640. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/risk_based_allocation_rules.md +118 -0
  641. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/run_mode_rules.md +84 -0
  642. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/service_surface_rules.md +136 -0
  643. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/slice_planning_rules.md +54 -0
  644. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/testcase_generation_gates.md +76 -0
  645. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/principles/unit_classification_rules.md +49 -0
  646. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/00-core/README.md +19 -0
  647. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/00-core/e2e-traceability-rule.md +46 -0
  648. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/00-core/kbkt-format-rule.md +68 -0
  649. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/00-core/no-hallucination-rule.md +63 -0
  650. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/00-core/ntapp-core-compliance.md +45 -0
  651. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/00-core/test-coverage-checklist-rule.md +46 -0
  652. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/00-core/test-design-techniques-rule.md +21 -0
  653. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/01-ui/keyboard-navigation-rule.md +34 -0
  654. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/01-ui/layout-visual-rule.md +39 -0
  655. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/01-ui/responsive-zoom-rule.md +30 -0
  656. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/01-ui/screen-default-display-rule.md +68 -0
  657. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/02-input/datepicker-rule.md +56 -0
  658. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/02-input/file-upload-rule.md +39 -0
  659. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/02-input/maxlength-rule.md +72 -0
  660. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/02-input/required-field-rule.md +59 -0
  661. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/02-input/security-input-rule.md +40 -0
  662. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/02-input/space-handling-rule.md +49 -0
  663. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/02-input/textbox-base-rule.md +69 -0
  664. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/03-selection/checkbox-rule.md +35 -0
  665. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/03-selection/combobox-base-rule.md +55 -0
  666. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/03-selection/dependent-combobox-rule.md +46 -0
  667. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/03-selection/radio-rule.md +33 -0
  668. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/04-dynamic-form/dynamic-form-rendering-rule.md +38 -0
  669. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/04-dynamic-form/dynamic-row-add-remove-rule.md +52 -0
  670. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/04-dynamic-form/multiple-group-toggle-rule.md +56 -0
  671. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/05-dependent-filter/filter-rule-block-rule.md +69 -0
  672. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/05-dependent-filter/filter-save-validation-rule.md +49 -0
  673. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/06-validation/duplicate-data-rule.md +44 -0
  674. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/06-validation/error-response-behavior-rule.md +42 -0
  675. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/06-validation/field-level-validation-rule.md +26 -0
  676. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/06-validation/inline-error-rule.md +62 -0
  677. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/07-save-cancel/action-button-rule.md +67 -0
  678. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/07-save-cancel/cancel-button-rule.md +42 -0
  679. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/07-save-cancel/save-button-rule.md +48 -0
  680. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/08-review/compliance-audit-rule.md +30 -0
  681. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/08-review/coverage-audit-rule.md +48 -0
  682. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/08-review/kbkt-review-gate-rule.md +42 -0
  683. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/08-review/ntapp-review-anti-patterns.md +16 -0
  684. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/09-data-grid/grid-base-rule.md +41 -0
  685. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/10-be/backend-resilience-rule.md +78 -0
  686. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/10-be/data-visibility-rule.md +51 -0
  687. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/11-independent-filter/independent-filter-rule.md +100 -0
  688. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/kbkt-generation/README.md +47 -0
  689. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/templates/exploratory_charter_template.md +28 -0
  690. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/templates/fixtures_template.yaml +72 -0
  691. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/templates/plan_template.md +55 -0
  692. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/templates/slice_testcase_table_template.md +124 -0
  693. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/references/templates/testspec_feature_template.feature +93 -0
  694. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/steps/step-00-shiftleft-gate.md +45 -0
  695. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/steps/step-01-init-slice.md +39 -0
  696. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/steps/step-02-plan-screen.md +29 -0
  697. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/steps/step-02b-risk-allocation.md +38 -0
  698. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/steps/step-03-write-testcase.md +52 -0
  699. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/steps/step-04-finalize-testcase.md +26 -0
  700. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/steps/step-05-roundtrip.md +25 -0
  701. package/skills/NTAPP/.agent/skills/NTAPP-qa-generate-testcase/workflow.md +114 -0
  702. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/SKILL.md +25 -0
  703. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/agents/agent_robot_generator.md +18 -0
  704. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/agents/agent_robot_reviewer.md +27 -0
  705. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/principles/iron_rules.md +123 -0
  706. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/references/automation/auto_coding_convention.md +53 -0
  707. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/references/automation/auto_db_oracle_rules.md +150 -0
  708. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/references/automation/auto_framework_structure.md +99 -0
  709. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/references/automation/auto_gate_commands.md +117 -0
  710. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/references/automation/auto_locator_strategy.md +99 -0
  711. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/references/automation/auto_robot_rules.md +90 -0
  712. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/references/automation/automation_standards.md +19 -0
  713. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/steps/step-01-parse.md +79 -0
  714. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/steps/step-02-generate-resources.md +75 -0
  715. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/steps/step-03-generate-suite.md +77 -0
  716. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/steps/step-04-review-code.md +121 -0
  717. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/steps/step-05-execute-and-analyze-logs.md +95 -0
  718. package/skills/NTAPP/.agent/skills/NTAPP-qa-robot/workflow.md +110 -0
  719. package/skills/NTAPP/.agent/skills/NTAPP-qa-setup-data/SKILL.md +10 -0
  720. package/skills/NTAPP/.agent/skills/NTAPP-qa-setup-data/agents/agent_robot_generator.md +21 -0
  721. package/skills/NTAPP/.agent/skills/NTAPP-qa-setup-data/references/auto_robot_rules.md +42 -0
  722. package/skills/NTAPP/.agent/skills/NTAPP-qa-setup-data/references/automation_standards.md +7 -0
  723. package/skills/NTAPP/.agent/skills/NTAPP-qa-setup-data/steps/step-01-setup-test-data.md +81 -0
  724. package/skills/NTAPP/.agent/skills/NTAPP-qa-setup-data/workflow.md +95 -0
  725. package/skills/NTAPP/.agent/skills/NTAPP-slice-planning/SKILL.md +12 -0
  726. package/skills/NTAPP/.agent/skills/NTAPP-slice-planning/workflow.md +253 -0
  727. package/skills/NTAPP/.agent/skills/NTAPP-sprint-worklog-from-git/SKILL.md +240 -0
  728. package/skills/NTAPP/.agent/skills/NTAPP-sprint-worklog-from-git/config.example.md +35 -0
  729. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/SKILL.md +65 -0
  730. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/references/confluence-server-publish.md +142 -0
  731. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/references/srs-mapping.md +157 -0
  732. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/references/terminology.md +50 -0
  733. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/scripts/build-activity-diagram.mjs +355 -0
  734. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/scripts/confluence-get.ps1 +73 -0
  735. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/scripts/confluence-publish.ps1 +210 -0
  736. package/skills/NTAPP/.agent/skills/NTAPP-srs-to-confluence/workflow.md +220 -0
  737. package/skills/NTAPP/.agent/skills/NTAPP-sync-skills-global/SKILL.md +62 -0
  738. package/skills/NTAPP/.agent/skills/NTAPP-sync-skills-global/sync-global.sh +31 -0
  739. package/skills/NTAPP/.agent/skills/NTAPP-system-overview/SKILL.md +6 -0
  740. package/skills/NTAPP/.agent/skills/NTAPP-system-overview/modes/baseline.md +447 -0
  741. package/skills/NTAPP/.agent/skills/NTAPP-system-overview/modes/overview.md +121 -0
  742. package/skills/NTAPP/.agent/skills/NTAPP-system-overview/principles.md +120 -0
  743. package/skills/NTAPP/.agent/skills/NTAPP-system-overview/templates/cross_system.md +128 -0
  744. package/skills/NTAPP/.agent/skills/NTAPP-system-overview/templates/per_repo.md +285 -0
  745. package/skills/NTAPP/.agent/skills/NTAPP-system-overview/workflow.md +160 -0
  746. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/SKILL.md +6 -0
  747. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/agents/agent_0_orchestrator.md +30 -0
  748. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/agents/agent_1_business_strategist.md +22 -0
  749. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/agents/agent_2_system_architect.md +36 -0
  750. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/agents/agent_3_implementation_lead.md +37 -0
  751. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/principles/iron_rules.md +129 -0
  752. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/steps/step-01-audit-hld.md +89 -0
  753. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/steps/step-02-strategy-rules.md +29 -0
  754. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/steps/step-03-architectural-modeling.md +33 -0
  755. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/steps/step-04-implementation-contracts.md +46 -0
  756. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/steps/step-05-orchestration-qa.md +38 -0
  757. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/templates/techspec_v3_ultimate_template.md +244 -0
  758. package/skills/NTAPP/.agent/skills/NTAPP-technical-design/workflow.md +183 -0
  759. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/SKILL.md +16 -0
  760. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/agents/design_system_agent.md +42 -0
  761. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/agents/ui_schema_agent.md +128 -0
  762. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/agents/visual_composition_auditor.md +49 -0
  763. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/steps/step-01-audit.md +134 -0
  764. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/steps/step-02-hitl-review.md +85 -0
  765. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/steps/step-03-schema-gen.md +198 -0
  766. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/steps/step-04-aesthetic-critique.md +131 -0
  767. package/skills/NTAPP/.agent/skills/NTAPP-ui-generation/workflow.md +156 -0
  768. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/SKILL.md +31 -0
  769. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/bmad-skill-manifest.yaml +9 -0
  770. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/principles/iron_rules.md +167 -0
  771. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-01-init-discovery.md +113 -0
  772. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-02-executive-summary.md +38 -0
  773. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-04-ux-principles.md +53 -0
  774. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-06-content-strategy.md +48 -0
  775. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-07-information-architecture.md +61 -0
  776. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-08-information-hierarchy.md +59 -0
  777. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-09-primary-journey.md +59 -0
  778. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-10-secondary-journeys.md +43 -0
  779. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-11-interaction-patterns.md +47 -0
  780. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-12-notification-error.md +65 -0
  781. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-13-responsive-accessibility.md +48 -0
  782. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/steps/step-14-traceability-assembly.md +89 -0
  783. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/templates/ux-conventions-template.md +51 -0
  784. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/templates/ux-design-spec-template.md +134 -0
  785. package/skills/NTAPP/.agent/skills/NTAPP-ux-design/workflow.md +139 -0
  786. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/SKILL.md +55 -0
  787. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/bmad-skill-manifest.yaml +9 -0
  788. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/principles/iron_rules.md +127 -0
  789. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/steps/step-01-init.md +88 -0
  790. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/steps/step-02-rough-personas.md +51 -0
  791. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/steps/step-03-rough-ia.md +69 -0
  792. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/steps/step-04-primary-journey.md +89 -0
  793. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/steps/step-05-validation.md +188 -0
  794. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/steps/step-06-assembly.md +130 -0
  795. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/templates/ux-sketch-template.md +174 -0
  796. package/skills/NTAPP/.agent/skills/NTAPP-ux-sketch/workflow.md +157 -0
  797. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-ad-hoc-per-unit/SKILL.md +30 -0
  798. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-express-hotfix/SKILL.md +22 -0
  799. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-fix-bug/SKILL.md +65 -0
  800. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-path-b-quick-dev/SKILL.md +20 -0
  801. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-reproduce-architecture/SKILL.md +36 -0
  802. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-resume/SKILL.md +24 -0
  803. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-run/SKILL.md +12 -0
  804. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-run/workflow.md +98 -0
  805. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-slice-loop/SKILL.md +21 -0
  806. package/skills/NTAPP/.agent/skills/NTAPP-vsaf-staging-deploy/SKILL.md +23 -0
  807. package/skills/NTAPP/.agent/skills/bmad-advanced-elicitation/SKILL.md +136 -0
  808. package/skills/NTAPP/.agent/skills/bmad-advanced-elicitation/methods.csv +51 -0
  809. package/skills/NTAPP/.agent/skills/bmad-agent-analyst/SKILL.md +59 -0
  810. package/skills/NTAPP/.agent/skills/bmad-agent-analyst/bmad-skill-manifest.yaml +11 -0
  811. package/skills/NTAPP/.agent/skills/bmad-agent-architect/SKILL.md +54 -0
  812. package/skills/NTAPP/.agent/skills/bmad-agent-architect/bmad-skill-manifest.yaml +11 -0
  813. package/skills/NTAPP/.agent/skills/bmad-agent-builder/SKILL.md +70 -0
  814. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/BOND-template.md +14 -0
  815. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/CAPABILITIES-template.md +30 -0
  816. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/CREED-template.md +52 -0
  817. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/INDEX-template.md +15 -0
  818. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/MEMORY-template.md +7 -0
  819. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/PERSONA-template.md +24 -0
  820. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/PULSE-template.md +38 -0
  821. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/SKILL-template-bootloader.md +60 -0
  822. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/SKILL-template.md +90 -0
  823. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/capability-authoring-template.md +110 -0
  824. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/customize-template.toml +62 -0
  825. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/first-breath-config-template.md +80 -0
  826. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/first-breath-template.md +115 -0
  827. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/init-sanctum-template.py +277 -0
  828. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/memory-guidance-template.md +93 -0
  829. package/skills/NTAPP/.agent/skills/bmad-agent-builder/assets/sample-customize-analyst.toml +87 -0
  830. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/agent-type-guidance.md +88 -0
  831. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/build-process.md +349 -0
  832. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/edit-guidance.md +88 -0
  833. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/first-breath-adaptation-guidance.md +116 -0
  834. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/mission-writing-guidance.md +81 -0
  835. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-analysis.md +139 -0
  836. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-dimensions.md +77 -0
  837. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-agent-cohesion.md +151 -0
  838. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-customization-surface.md +188 -0
  839. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-enhancement-opportunities.md +189 -0
  840. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-execution-efficiency.md +159 -0
  841. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-prompt-craft.md +228 -0
  842. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-sanctum-architecture.md +160 -0
  843. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-script-opportunities.md +220 -0
  844. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/quality-scan-structure.md +168 -0
  845. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/report-quality-scan-creator.md +319 -0
  846. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/sample-capability-authoring.md +110 -0
  847. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/sample-capability-prompt.md +65 -0
  848. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/sample-first-breath.md +117 -0
  849. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/sample-init-sanctum.py +274 -0
  850. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/sample-memory-guidance.md +93 -0
  851. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/script-opportunities-reference.md +392 -0
  852. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/script-standards.md +91 -0
  853. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/skill-best-practices.md +144 -0
  854. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/standard-fields.md +198 -0
  855. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/standing-order-guidance.md +76 -0
  856. package/skills/NTAPP/.agent/skills/bmad-agent-builder/references/template-substitution-rules.md +92 -0
  857. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/generate-html-report.py +534 -0
  858. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/prepass-execution-deps.py +337 -0
  859. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py +425 -0
  860. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/prepass-sanctum-architecture.py +385 -0
  861. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py +482 -0
  862. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/process-template.py +190 -0
  863. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/scan-path-standards.py +324 -0
  864. package/skills/NTAPP/.agent/skills/bmad-agent-builder/scripts/scan-scripts.py +747 -0
  865. package/skills/NTAPP/.agent/skills/bmad-agent-dev/SKILL.md +69 -0
  866. package/skills/NTAPP/.agent/skills/bmad-agent-dev/bmad-skill-manifest.yaml +11 -0
  867. package/skills/NTAPP/.agent/skills/bmad-agent-pm/SKILL.md +59 -0
  868. package/skills/NTAPP/.agent/skills/bmad-agent-pm/bmad-skill-manifest.yaml +11 -0
  869. package/skills/NTAPP/.agent/skills/bmad-agent-tech-writer/SKILL.md +57 -0
  870. package/skills/NTAPP/.agent/skills/bmad-agent-tech-writer/bmad-skill-manifest.yaml +11 -0
  871. package/skills/NTAPP/.agent/skills/bmad-agent-tech-writer/explain-concept.md +20 -0
  872. package/skills/NTAPP/.agent/skills/bmad-agent-tech-writer/mermaid-gen.md +20 -0
  873. package/skills/NTAPP/.agent/skills/bmad-agent-tech-writer/validate-doc.md +19 -0
  874. package/skills/NTAPP/.agent/skills/bmad-agent-tech-writer/write-document.md +20 -0
  875. package/skills/NTAPP/.agent/skills/bmad-agent-ux-designer/SKILL.md +55 -0
  876. package/skills/NTAPP/.agent/skills/bmad-agent-ux-designer/bmad-skill-manifest.yaml +11 -0
  877. package/skills/NTAPP/.agent/skills/bmad-bmb-setup/SKILL.md +76 -0
  878. package/skills/NTAPP/.agent/skills/bmad-bmb-setup/assets/module-help.csv +10 -0
  879. package/skills/NTAPP/.agent/skills/bmad-bmb-setup/assets/module.yaml +20 -0
  880. package/skills/NTAPP/.agent/skills/bmad-bmb-setup/scripts/cleanup-legacy.py +259 -0
  881. package/skills/NTAPP/.agent/skills/bmad-bmb-setup/scripts/merge-config.py +408 -0
  882. package/skills/NTAPP/.agent/skills/bmad-bmb-setup/scripts/merge-help-csv.py +218 -0
  883. package/skills/NTAPP/.agent/skills/bmad-brainstorming/SKILL.md +6 -0
  884. package/skills/NTAPP/.agent/skills/bmad-brainstorming/brain-methods.csv +62 -0
  885. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-01-session-setup.md +214 -0
  886. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-01b-continue.md +124 -0
  887. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-02a-user-selected.md +229 -0
  888. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-02b-ai-recommended.md +239 -0
  889. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-02c-random-selection.md +211 -0
  890. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-02d-progressive-flow.md +266 -0
  891. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-03-technique-execution.md +401 -0
  892. package/skills/NTAPP/.agent/skills/bmad-brainstorming/steps/step-04-idea-organization.md +305 -0
  893. package/skills/NTAPP/.agent/skills/bmad-brainstorming/template.md +15 -0
  894. package/skills/NTAPP/.agent/skills/bmad-brainstorming/workflow.md +53 -0
  895. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/SKILL.md +6 -0
  896. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
  897. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
  898. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
  899. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
  900. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
  901. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +126 -0
  902. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/templates/readiness-report-template.md +4 -0
  903. package/skills/NTAPP/.agent/skills/bmad-check-implementation-readiness/workflow.md +47 -0
  904. package/skills/NTAPP/.agent/skills/bmad-checkpoint-preview/SKILL.md +29 -0
  905. package/skills/NTAPP/.agent/skills/bmad-checkpoint-preview/generate-trail.md +38 -0
  906. package/skills/NTAPP/.agent/skills/bmad-checkpoint-preview/step-01-orientation.md +105 -0
  907. package/skills/NTAPP/.agent/skills/bmad-checkpoint-preview/step-02-walkthrough.md +89 -0
  908. package/skills/NTAPP/.agent/skills/bmad-checkpoint-preview/step-03-detail-pass.md +106 -0
  909. package/skills/NTAPP/.agent/skills/bmad-checkpoint-preview/step-04-testing.md +74 -0
  910. package/skills/NTAPP/.agent/skills/bmad-checkpoint-preview/step-05-wrapup.md +24 -0
  911. package/skills/NTAPP/.agent/skills/bmad-code-review/SKILL.md +6 -0
  912. package/skills/NTAPP/.agent/skills/bmad-code-review/steps/step-01-gather-context.md +85 -0
  913. package/skills/NTAPP/.agent/skills/bmad-code-review/steps/step-02-review.md +34 -0
  914. package/skills/NTAPP/.agent/skills/bmad-code-review/steps/step-03-triage.md +49 -0
  915. package/skills/NTAPP/.agent/skills/bmad-code-review/steps/step-04-present.md +129 -0
  916. package/skills/NTAPP/.agent/skills/bmad-code-review/templates/review_report_template.md +79 -0
  917. package/skills/NTAPP/.agent/skills/bmad-code-review/workflow.md +55 -0
  918. package/skills/NTAPP/.agent/skills/bmad-correct-course/SKILL.md +6 -0
  919. package/skills/NTAPP/.agent/skills/bmad-correct-course/checklist.md +288 -0
  920. package/skills/NTAPP/.agent/skills/bmad-correct-course/workflow.md +267 -0
  921. package/skills/NTAPP/.agent/skills/bmad-create-architecture/SKILL.md +6 -0
  922. package/skills/NTAPP/.agent/skills/bmad-create-architecture/architecture-decision-template.md +12 -0
  923. package/skills/NTAPP/.agent/skills/bmad-create-architecture/data/domain-complexity.csv +13 -0
  924. package/skills/NTAPP/.agent/skills/bmad-create-architecture/data/project-types.csv +7 -0
  925. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-01-init.md +153 -0
  926. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-01b-continue.md +173 -0
  927. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-02-context.md +224 -0
  928. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-03-starter.md +329 -0
  929. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-04-decisions.md +318 -0
  930. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-05-patterns.md +359 -0
  931. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-06-structure.md +379 -0
  932. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-07-validation.md +359 -0
  933. package/skills/NTAPP/.agent/skills/bmad-create-architecture/steps/step-08-complete.md +76 -0
  934. package/skills/NTAPP/.agent/skills/bmad-create-architecture/workflow.md +32 -0
  935. package/skills/NTAPP/.agent/skills/bmad-create-epics-and-stories/SKILL.md +6 -0
  936. package/skills/NTAPP/.agent/skills/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +255 -0
  937. package/skills/NTAPP/.agent/skills/bmad-create-epics-and-stories/steps/step-02-design-epics.md +212 -0
  938. package/skills/NTAPP/.agent/skills/bmad-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
  939. package/skills/NTAPP/.agent/skills/bmad-create-epics-and-stories/steps/step-04-final-validation.md +131 -0
  940. package/skills/NTAPP/.agent/skills/bmad-create-epics-and-stories/templates/epics-template.md +61 -0
  941. package/skills/NTAPP/.agent/skills/bmad-create-epics-and-stories/workflow.md +51 -0
  942. package/skills/NTAPP/.agent/skills/bmad-create-prd/SKILL.md +6 -0
  943. package/skills/NTAPP/.agent/skills/bmad-create-prd/data/domain-complexity.csv +15 -0
  944. package/skills/NTAPP/.agent/skills/bmad-create-prd/data/prd-purpose.md +197 -0
  945. package/skills/NTAPP/.agent/skills/bmad-create-prd/data/project-types.csv +11 -0
  946. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-01-init.md +178 -0
  947. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-01b-continue.md +161 -0
  948. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-02-discovery.md +208 -0
  949. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-02b-vision.md +142 -0
  950. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-02c-executive-summary.md +158 -0
  951. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-03-success.md +214 -0
  952. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-04-journeys.md +201 -0
  953. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-05-domain.md +194 -0
  954. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-06-innovation.md +211 -0
  955. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-07-project-type.md +222 -0
  956. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-08-scoping.md +216 -0
  957. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-09-functional.md +219 -0
  958. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-10-nonfunctional.md +230 -0
  959. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-11-polish.md +221 -0
  960. package/skills/NTAPP/.agent/skills/bmad-create-prd/steps-c/step-12-complete.md +115 -0
  961. package/skills/NTAPP/.agent/skills/bmad-create-prd/templates/prd-template.md +10 -0
  962. package/skills/NTAPP/.agent/skills/bmad-create-prd/workflow.md +61 -0
  963. package/skills/NTAPP/.agent/skills/bmad-create-story/SKILL.md +6 -0
  964. package/skills/NTAPP/.agent/skills/bmad-create-story/checklist.md +357 -0
  965. package/skills/NTAPP/.agent/skills/bmad-create-story/discover-inputs.md +88 -0
  966. package/skills/NTAPP/.agent/skills/bmad-create-story/template.md +49 -0
  967. package/skills/NTAPP/.agent/skills/bmad-create-story/workflow.md +380 -0
  968. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/SKILL.md +6 -0
  969. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-01-init.md +135 -0
  970. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-01b-continue.md +127 -0
  971. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-02-discovery.md +190 -0
  972. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-03-core-experience.md +217 -0
  973. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-04-emotional-response.md +220 -0
  974. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-05-inspiration.md +235 -0
  975. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-06-design-system.md +253 -0
  976. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-07-defining-experience.md +255 -0
  977. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-08-visual-foundation.md +225 -0
  978. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-09-design-directions.md +225 -0
  979. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-10-user-journeys.md +242 -0
  980. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-11-component-strategy.md +249 -0
  981. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-12-ux-patterns.md +238 -0
  982. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +265 -0
  983. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/steps/step-14-complete.md +171 -0
  984. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/ux-design-template.md +13 -0
  985. package/skills/NTAPP/.agent/skills/bmad-create-ux-design/workflow.md +35 -0
  986. package/skills/NTAPP/.agent/skills/bmad-dev-story/SKILL.md +6 -0
  987. package/skills/NTAPP/.agent/skills/bmad-dev-story/checklist.md +80 -0
  988. package/skills/NTAPP/.agent/skills/bmad-dev-story/workflow.md +450 -0
  989. package/skills/NTAPP/.agent/skills/bmad-distillator/SKILL.md +177 -0
  990. package/skills/NTAPP/.agent/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
  991. package/skills/NTAPP/.agent/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
  992. package/skills/NTAPP/.agent/skills/bmad-distillator/resources/compression-rules.md +51 -0
  993. package/skills/NTAPP/.agent/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
  994. package/skills/NTAPP/.agent/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
  995. package/skills/NTAPP/.agent/skills/bmad-distillator/scripts/analyze_sources.py +300 -0
  996. package/skills/NTAPP/.agent/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +204 -0
  997. package/skills/NTAPP/.agent/skills/bmad-document-project/SKILL.md +6 -0
  998. package/skills/NTAPP/.agent/skills/bmad-document-project/checklist.md +245 -0
  999. package/skills/NTAPP/.agent/skills/bmad-document-project/documentation-requirements.csv +12 -0
  1000. package/skills/NTAPP/.agent/skills/bmad-document-project/instructions.md +128 -0
  1001. package/skills/NTAPP/.agent/skills/bmad-document-project/templates/deep-dive-template.md +345 -0
  1002. package/skills/NTAPP/.agent/skills/bmad-document-project/templates/index-template.md +169 -0
  1003. package/skills/NTAPP/.agent/skills/bmad-document-project/templates/project-overview-template.md +103 -0
  1004. package/skills/NTAPP/.agent/skills/bmad-document-project/templates/project-scan-report-schema.json +160 -0
  1005. package/skills/NTAPP/.agent/skills/bmad-document-project/templates/source-tree-template.md +135 -0
  1006. package/skills/NTAPP/.agent/skills/bmad-document-project/workflow.md +25 -0
  1007. package/skills/NTAPP/.agent/skills/bmad-document-project/workflows/deep-dive-instructions.md +299 -0
  1008. package/skills/NTAPP/.agent/skills/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
  1009. package/skills/NTAPP/.agent/skills/bmad-document-project/workflows/full-scan-instructions.md +1107 -0
  1010. package/skills/NTAPP/.agent/skills/bmad-document-project/workflows/full-scan-workflow.md +34 -0
  1011. package/skills/NTAPP/.agent/skills/bmad-domain-research/SKILL.md +6 -0
  1012. package/skills/NTAPP/.agent/skills/bmad-domain-research/domain-steps/step-01-init.md +137 -0
  1013. package/skills/NTAPP/.agent/skills/bmad-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
  1014. package/skills/NTAPP/.agent/skills/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
  1015. package/skills/NTAPP/.agent/skills/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
  1016. package/skills/NTAPP/.agent/skills/bmad-domain-research/domain-steps/step-05-technical-trends.md +234 -0
  1017. package/skills/NTAPP/.agent/skills/bmad-domain-research/domain-steps/step-06-research-synthesis.md +444 -0
  1018. package/skills/NTAPP/.agent/skills/bmad-domain-research/research.template.md +29 -0
  1019. package/skills/NTAPP/.agent/skills/bmad-domain-research/workflow.md +51 -0
  1020. package/skills/NTAPP/.agent/skills/bmad-edit-prd/SKILL.md +6 -0
  1021. package/skills/NTAPP/.agent/skills/bmad-edit-prd/data/prd-purpose.md +197 -0
  1022. package/skills/NTAPP/.agent/skills/bmad-edit-prd/steps-e/step-e-01-discovery.md +242 -0
  1023. package/skills/NTAPP/.agent/skills/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +204 -0
  1024. package/skills/NTAPP/.agent/skills/bmad-edit-prd/steps-e/step-e-02-review.md +245 -0
  1025. package/skills/NTAPP/.agent/skills/bmad-edit-prd/steps-e/step-e-03-edit.md +250 -0
  1026. package/skills/NTAPP/.agent/skills/bmad-edit-prd/steps-e/step-e-04-complete.md +163 -0
  1027. package/skills/NTAPP/.agent/skills/bmad-edit-prd/workflow.md +62 -0
  1028. package/skills/NTAPP/.agent/skills/bmad-editorial-review-prose/SKILL.md +86 -0
  1029. package/skills/NTAPP/.agent/skills/bmad-editorial-review-structure/SKILL.md +179 -0
  1030. package/skills/NTAPP/.agent/skills/bmad-generate-project-context/SKILL.md +6 -0
  1031. package/skills/NTAPP/.agent/skills/bmad-generate-project-context/project-context-template.md +21 -0
  1032. package/skills/NTAPP/.agent/skills/bmad-generate-project-context/steps/step-01-discover.md +186 -0
  1033. package/skills/NTAPP/.agent/skills/bmad-generate-project-context/steps/step-02-generate.md +321 -0
  1034. package/skills/NTAPP/.agent/skills/bmad-generate-project-context/steps/step-03-complete.md +278 -0
  1035. package/skills/NTAPP/.agent/skills/bmad-generate-project-context/workflow.md +39 -0
  1036. package/skills/NTAPP/.agent/skills/bmad-help/SKILL.md +75 -0
  1037. package/skills/NTAPP/.agent/skills/bmad-index-docs/SKILL.md +66 -0
  1038. package/skills/NTAPP/.agent/skills/bmad-market-research/SKILL.md +6 -0
  1039. package/skills/NTAPP/.agent/skills/bmad-market-research/research.template.md +29 -0
  1040. package/skills/NTAPP/.agent/skills/bmad-market-research/steps/step-01-init.md +184 -0
  1041. package/skills/NTAPP/.agent/skills/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
  1042. package/skills/NTAPP/.agent/skills/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
  1043. package/skills/NTAPP/.agent/skills/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
  1044. package/skills/NTAPP/.agent/skills/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
  1045. package/skills/NTAPP/.agent/skills/bmad-market-research/steps/step-06-research-completion.md +478 -0
  1046. package/skills/NTAPP/.agent/skills/bmad-market-research/workflow.md +51 -0
  1047. package/skills/NTAPP/.agent/skills/bmad-module-builder/SKILL.md +32 -0
  1048. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/module-plan-template.md +128 -0
  1049. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/setup-skill-template/SKILL.md +76 -0
  1050. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/setup-skill-template/assets/module-help.csv +1 -0
  1051. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/setup-skill-template/assets/module.yaml +6 -0
  1052. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/setup-skill-template/scripts/cleanup-legacy.py +259 -0
  1053. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-config.py +408 -0
  1054. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-help-csv.py +218 -0
  1055. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/standalone-module-template/merge-config.py +408 -0
  1056. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/standalone-module-template/merge-help-csv.py +218 -0
  1057. package/skills/NTAPP/.agent/skills/bmad-module-builder/assets/standalone-module-template/module-setup.md +81 -0
  1058. package/skills/NTAPP/.agent/skills/bmad-module-builder/references/create-module.md +277 -0
  1059. package/skills/NTAPP/.agent/skills/bmad-module-builder/references/ideate-module.md +216 -0
  1060. package/skills/NTAPP/.agent/skills/bmad-module-builder/references/validate-module.md +86 -0
  1061. package/skills/NTAPP/.agent/skills/bmad-module-builder/scripts/scaffold-setup-skill.py +124 -0
  1062. package/skills/NTAPP/.agent/skills/bmad-module-builder/scripts/scaffold-standalone-module.py +190 -0
  1063. package/skills/NTAPP/.agent/skills/bmad-module-builder/scripts/tests/test-scaffold-setup-skill.py +230 -0
  1064. package/skills/NTAPP/.agent/skills/bmad-module-builder/scripts/tests/test-scaffold-standalone-module.py +266 -0
  1065. package/skills/NTAPP/.agent/skills/bmad-module-builder/scripts/tests/test-validate-module.py +314 -0
  1066. package/skills/NTAPP/.agent/skills/bmad-module-builder/scripts/validate-module.py +293 -0
  1067. package/skills/NTAPP/.agent/skills/bmad-party-mode/SKILL.md +125 -0
  1068. package/skills/NTAPP/.agent/skills/bmad-prfaq/SKILL.md +96 -0
  1069. package/skills/NTAPP/.agent/skills/bmad-prfaq/agents/artifact-analyzer.md +60 -0
  1070. package/skills/NTAPP/.agent/skills/bmad-prfaq/agents/web-researcher.md +49 -0
  1071. package/skills/NTAPP/.agent/skills/bmad-prfaq/assets/prfaq-template.md +62 -0
  1072. package/skills/NTAPP/.agent/skills/bmad-prfaq/bmad-manifest.json +16 -0
  1073. package/skills/NTAPP/.agent/skills/bmad-prfaq/references/customer-faq.md +55 -0
  1074. package/skills/NTAPP/.agent/skills/bmad-prfaq/references/internal-faq.md +51 -0
  1075. package/skills/NTAPP/.agent/skills/bmad-prfaq/references/press-release.md +60 -0
  1076. package/skills/NTAPP/.agent/skills/bmad-prfaq/references/verdict.md +79 -0
  1077. package/skills/NTAPP/.agent/skills/bmad-product-brief/SKILL.md +82 -0
  1078. package/skills/NTAPP/.agent/skills/bmad-product-brief/agents/artifact-analyzer.md +60 -0
  1079. package/skills/NTAPP/.agent/skills/bmad-product-brief/agents/opportunity-reviewer.md +44 -0
  1080. package/skills/NTAPP/.agent/skills/bmad-product-brief/agents/skeptic-reviewer.md +44 -0
  1081. package/skills/NTAPP/.agent/skills/bmad-product-brief/agents/web-researcher.md +49 -0
  1082. package/skills/NTAPP/.agent/skills/bmad-product-brief/bmad-manifest.json +17 -0
  1083. package/skills/NTAPP/.agent/skills/bmad-product-brief/prompts/contextual-discovery.md +57 -0
  1084. package/skills/NTAPP/.agent/skills/bmad-product-brief/prompts/draft-and-review.md +86 -0
  1085. package/skills/NTAPP/.agent/skills/bmad-product-brief/prompts/finalize.md +75 -0
  1086. package/skills/NTAPP/.agent/skills/bmad-product-brief/prompts/guided-elicitation.md +70 -0
  1087. package/skills/NTAPP/.agent/skills/bmad-product-brief/resources/brief-template.md +60 -0
  1088. package/skills/NTAPP/.agent/skills/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
  1089. package/skills/NTAPP/.agent/skills/bmad-qa-generate-e2e-tests/checklist.md +33 -0
  1090. package/skills/NTAPP/.agent/skills/bmad-qa-generate-e2e-tests/workflow.md +136 -0
  1091. package/skills/NTAPP/.agent/skills/bmad-quick-dev/SKILL.md +6 -0
  1092. package/skills/NTAPP/.agent/skills/bmad-quick-dev/compile-epic-context.md +62 -0
  1093. package/skills/NTAPP/.agent/skills/bmad-quick-dev/spec-template.md +88 -0
  1094. package/skills/NTAPP/.agent/skills/bmad-quick-dev/step-01-clarify-and-route.md +91 -0
  1095. package/skills/NTAPP/.agent/skills/bmad-quick-dev/step-02-plan.md +47 -0
  1096. package/skills/NTAPP/.agent/skills/bmad-quick-dev/step-03-implement.md +39 -0
  1097. package/skills/NTAPP/.agent/skills/bmad-quick-dev/step-04-review.md +49 -0
  1098. package/skills/NTAPP/.agent/skills/bmad-quick-dev/step-05-present.md +63 -0
  1099. package/skills/NTAPP/.agent/skills/bmad-quick-dev/step-oneshot.md +61 -0
  1100. package/skills/NTAPP/.agent/skills/bmad-quick-dev/workflow.md +75 -0
  1101. package/skills/NTAPP/.agent/skills/bmad-retrospective/SKILL.md +6 -0
  1102. package/skills/NTAPP/.agent/skills/bmad-retrospective/workflow.md +1479 -0
  1103. package/skills/NTAPP/.agent/skills/bmad-review-adversarial-general/SKILL.md +37 -0
  1104. package/skills/NTAPP/.agent/skills/bmad-review-edge-case-hunter/SKILL.md +67 -0
  1105. package/skills/NTAPP/.agent/skills/bmad-shard-doc/SKILL.md +105 -0
  1106. package/skills/NTAPP/.agent/skills/bmad-sprint-planning/SKILL.md +6 -0
  1107. package/skills/NTAPP/.agent/skills/bmad-sprint-planning/checklist.md +33 -0
  1108. package/skills/NTAPP/.agent/skills/bmad-sprint-planning/sprint-status-template.yaml +56 -0
  1109. package/skills/NTAPP/.agent/skills/bmad-sprint-planning/workflow.md +263 -0
  1110. package/skills/NTAPP/.agent/skills/bmad-sprint-status/SKILL.md +6 -0
  1111. package/skills/NTAPP/.agent/skills/bmad-sprint-status/workflow.md +261 -0
  1112. package/skills/NTAPP/.agent/skills/bmad-tea/SKILL.md +80 -0
  1113. package/skills/NTAPP/.agent/skills/bmad-tea/customize.toml +104 -0
  1114. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1115. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/api-request.md +563 -0
  1116. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/api-testing-patterns.md +915 -0
  1117. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/auth-session.md +548 -0
  1118. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/burn-in.md +273 -0
  1119. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/ci-burn-in.md +717 -0
  1120. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/component-tdd.md +486 -0
  1121. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/contract-testing.md +1067 -0
  1122. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/data-factories.md +500 -0
  1123. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/email-auth.md +721 -0
  1124. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/error-handling.md +725 -0
  1125. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/feature-flags.md +750 -0
  1126. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/file-utils.md +456 -0
  1127. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/fixture-architecture.md +401 -0
  1128. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/fixtures-composition.md +382 -0
  1129. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/intercept-network-call.md +426 -0
  1130. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/log.md +426 -0
  1131. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/network-error-monitor.md +401 -0
  1132. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/network-first.md +486 -0
  1133. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/network-recorder.md +527 -0
  1134. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/nfr-criteria.md +670 -0
  1135. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/overview.md +286 -0
  1136. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pact-broker-webhooks.md +237 -0
  1137. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pact-consumer-di.md +310 -0
  1138. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1139. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pact-mcp.md +205 -0
  1140. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1141. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pactjs-utils-overview.md +219 -0
  1142. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1143. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1144. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
  1145. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/playwright-cli.md +280 -0
  1146. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/playwright-config.md +734 -0
  1147. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/probability-impact.md +601 -0
  1148. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/recurse.md +421 -0
  1149. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/risk-governance.md +615 -0
  1150. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/selective-testing.md +732 -0
  1151. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/selector-resilience.md +527 -0
  1152. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/test-healing-patterns.md +644 -0
  1153. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/test-levels-framework.md +473 -0
  1154. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/test-priorities-matrix.md +373 -0
  1155. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/test-quality.md +664 -0
  1156. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/timing-debugging.md +372 -0
  1157. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/visual-debugging.md +527 -0
  1158. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/webhook-module-setup.md +122 -0
  1159. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/webhook-providers.md +155 -0
  1160. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/webhook-risk-guidance.md +114 -0
  1161. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/webhook-template-matchers.md +160 -0
  1162. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1163. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/webhook-timeout-error.md +130 -0
  1164. package/skills/NTAPP/.agent/skills/bmad-tea/resources/knowledge/webhook-waiting-querying.md +167 -0
  1165. package/skills/NTAPP/.agent/skills/bmad-tea/resources/tea-index.csv +52 -0
  1166. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/SKILL.md +129 -0
  1167. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/checklist.md +198 -0
  1168. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/customize.toml +40 -0
  1169. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/data/curriculum.yaml +129 -0
  1170. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/data/quiz-questions.yaml +206 -0
  1171. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/data/role-paths.yaml +136 -0
  1172. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/data/session-content-map.yaml +219 -0
  1173. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/data/tea-resources-index.yaml +394 -0
  1174. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/instructions.md +137 -0
  1175. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-01-init.md +235 -0
  1176. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-01b-continue.md +147 -0
  1177. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-02-assess.md +258 -0
  1178. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-03-session-menu.md +219 -0
  1179. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-04-session-01.md +460 -0
  1180. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-04-session-02.md +465 -0
  1181. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-04-session-03.md +301 -0
  1182. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-04-session-04.md +234 -0
  1183. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-04-session-05.md +234 -0
  1184. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-04-session-06.md +209 -0
  1185. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-04-session-07.md +220 -0
  1186. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-c/step-05-completion.md +347 -0
  1187. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-e/step-e-01-assess-workflow.md +141 -0
  1188. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-e/step-e-02-apply-edits.md +130 -0
  1189. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/steps-v/step-v-01-validate.md +272 -0
  1190. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/templates/certificate-template.md +86 -0
  1191. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/templates/progress-template.yaml +95 -0
  1192. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/templates/session-notes-template.md +83 -0
  1193. package/skills/NTAPP/.agent/skills/bmad-teach-me-testing/workflow-plan-teach-me-testing.md +950 -0
  1194. package/skills/NTAPP/.agent/skills/bmad-technical-research/SKILL.md +6 -0
  1195. package/skills/NTAPP/.agent/skills/bmad-technical-research/research.template.md +29 -0
  1196. package/skills/NTAPP/.agent/skills/bmad-technical-research/technical-steps/step-01-init.md +137 -0
  1197. package/skills/NTAPP/.agent/skills/bmad-technical-research/technical-steps/step-02-technical-overview.md +239 -0
  1198. package/skills/NTAPP/.agent/skills/bmad-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
  1199. package/skills/NTAPP/.agent/skills/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
  1200. package/skills/NTAPP/.agent/skills/bmad-technical-research/technical-steps/step-05-implementation-research.md +233 -0
  1201. package/skills/NTAPP/.agent/skills/bmad-technical-research/technical-steps/step-06-research-synthesis.md +487 -0
  1202. package/skills/NTAPP/.agent/skills/bmad-technical-research/workflow.md +52 -0
  1203. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/SKILL.md +85 -0
  1204. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/atdd-checklist-template.md +394 -0
  1205. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/checklist.md +375 -0
  1206. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/customize.toml +40 -0
  1207. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/instructions.md +44 -0
  1208. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1209. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/api-request.md +563 -0
  1210. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/api-testing-patterns.md +915 -0
  1211. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/auth-session.md +548 -0
  1212. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/burn-in.md +273 -0
  1213. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/ci-burn-in.md +717 -0
  1214. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/component-tdd.md +486 -0
  1215. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/contract-testing.md +1067 -0
  1216. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/data-factories.md +500 -0
  1217. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/email-auth.md +721 -0
  1218. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/error-handling.md +725 -0
  1219. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/feature-flags.md +750 -0
  1220. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/file-utils.md +456 -0
  1221. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/fixture-architecture.md +401 -0
  1222. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/fixtures-composition.md +382 -0
  1223. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/intercept-network-call.md +426 -0
  1224. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/log.md +426 -0
  1225. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/network-error-monitor.md +401 -0
  1226. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/network-first.md +486 -0
  1227. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/network-recorder.md +527 -0
  1228. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/nfr-criteria.md +670 -0
  1229. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/overview.md +286 -0
  1230. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pact-broker-webhooks.md +237 -0
  1231. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pact-consumer-di.md +310 -0
  1232. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1233. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pact-mcp.md +205 -0
  1234. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1235. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pactjs-utils-overview.md +219 -0
  1236. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1237. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1238. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
  1239. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/playwright-cli.md +280 -0
  1240. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/playwright-config.md +734 -0
  1241. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/probability-impact.md +601 -0
  1242. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/recurse.md +421 -0
  1243. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/risk-governance.md +615 -0
  1244. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/selective-testing.md +732 -0
  1245. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/selector-resilience.md +527 -0
  1246. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/test-healing-patterns.md +644 -0
  1247. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/test-levels-framework.md +473 -0
  1248. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/test-priorities-matrix.md +373 -0
  1249. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/test-quality.md +664 -0
  1250. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/timing-debugging.md +372 -0
  1251. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/visual-debugging.md +527 -0
  1252. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/webhook-module-setup.md +122 -0
  1253. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/webhook-providers.md +155 -0
  1254. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/webhook-risk-guidance.md +114 -0
  1255. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/webhook-template-matchers.md +160 -0
  1256. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1257. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/webhook-timeout-error.md +130 -0
  1258. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/knowledge/webhook-waiting-querying.md +167 -0
  1259. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/resources/tea-index.csv +52 -0
  1260. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-01-preflight-and-context.md +244 -0
  1261. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-01b-resume.md +96 -0
  1262. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-02-generation-mode.md +125 -0
  1263. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-03-test-strategy.md +110 -0
  1264. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-04-generate-tests.md +335 -0
  1265. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +294 -0
  1266. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-04b-subagent-e2e-failing.md +244 -0
  1267. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-04c-aggregate.md +394 -0
  1268. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-c/step-05-validate-and-complete.md +123 -0
  1269. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-e/step-01-assess.md +65 -0
  1270. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-e/step-02-apply-edit.md +68 -0
  1271. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/steps-v/step-01-validate.md +75 -0
  1272. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/validation-report-20260127-095021.md +73 -0
  1273. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/validation-report-20260127-102401.md +116 -0
  1274. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/workflow-plan.md +21 -0
  1275. package/skills/NTAPP/.agent/skills/bmad-testarch-atdd/workflow.yaml +46 -0
  1276. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/SKILL.md +85 -0
  1277. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/checklist.md +611 -0
  1278. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/customize.toml +40 -0
  1279. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/instructions.md +49 -0
  1280. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1281. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/api-request.md +563 -0
  1282. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/api-testing-patterns.md +915 -0
  1283. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/auth-session.md +548 -0
  1284. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/burn-in.md +273 -0
  1285. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/ci-burn-in.md +717 -0
  1286. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/component-tdd.md +486 -0
  1287. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/contract-testing.md +1066 -0
  1288. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/data-factories.md +500 -0
  1289. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/email-auth.md +721 -0
  1290. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/error-handling.md +725 -0
  1291. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/feature-flags.md +750 -0
  1292. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/file-utils.md +456 -0
  1293. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/fixture-architecture.md +401 -0
  1294. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/fixtures-composition.md +382 -0
  1295. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/intercept-network-call.md +426 -0
  1296. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/log.md +426 -0
  1297. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/network-error-monitor.md +401 -0
  1298. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/network-first.md +486 -0
  1299. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/network-recorder.md +527 -0
  1300. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/nfr-criteria.md +670 -0
  1301. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/overview.md +286 -0
  1302. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pact-broker-webhooks.md +237 -0
  1303. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pact-consumer-di.md +310 -0
  1304. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1305. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pact-mcp.md +205 -0
  1306. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1307. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pactjs-utils-overview.md +216 -0
  1308. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1309. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1310. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/playwright-cli.md +280 -0
  1311. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/playwright-config.md +734 -0
  1312. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/probability-impact.md +601 -0
  1313. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/recurse.md +421 -0
  1314. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/risk-governance.md +615 -0
  1315. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/selective-testing.md +732 -0
  1316. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/selector-resilience.md +527 -0
  1317. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/test-healing-patterns.md +644 -0
  1318. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/test-levels-framework.md +473 -0
  1319. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/test-priorities-matrix.md +373 -0
  1320. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/test-quality.md +664 -0
  1321. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/timing-debugging.md +372 -0
  1322. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/visual-debugging.md +527 -0
  1323. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/webhook-module-setup.md +122 -0
  1324. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/webhook-providers.md +155 -0
  1325. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/webhook-risk-guidance.md +114 -0
  1326. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/webhook-template-matchers.md +160 -0
  1327. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1328. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/webhook-timeout-error.md +130 -0
  1329. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/knowledge/webhook-waiting-querying.md +167 -0
  1330. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/resources/tea-index.csv +51 -0
  1331. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-01-preflight-and-context.md +237 -0
  1332. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-01b-resume.md +94 -0
  1333. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-02-identify-targets.md +169 -0
  1334. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-03-generate-tests.md +394 -0
  1335. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-03a-subagent-api.md +271 -0
  1336. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-03b-subagent-backend.md +246 -0
  1337. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-03b-subagent-e2e.md +213 -0
  1338. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-03c-aggregate.md +398 -0
  1339. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-c/step-04-validate-and-summarize.md +114 -0
  1340. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-e/step-01-assess.md +65 -0
  1341. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-e/step-02-apply-edit.md +68 -0
  1342. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/steps-v/step-01-validate.md +75 -0
  1343. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/validation-report-20260127-095021.md +72 -0
  1344. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/validation-report-20260127-102401.md +114 -0
  1345. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/workflow-plan.md +20 -0
  1346. package/skills/NTAPP/.agent/skills/bmad-testarch-automate/workflow.yaml +53 -0
  1347. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/SKILL.md +85 -0
  1348. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/azure-pipelines-template.yaml +155 -0
  1349. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/checklist.md +289 -0
  1350. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/customize.toml +40 -0
  1351. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/github-actions-template.yaml +328 -0
  1352. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/gitlab-ci-template.yaml +158 -0
  1353. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/harness-pipeline-template.yaml +160 -0
  1354. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/instructions.md +44 -0
  1355. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/jenkins-pipeline-template.groovy +129 -0
  1356. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1357. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/api-request.md +563 -0
  1358. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/api-testing-patterns.md +915 -0
  1359. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/auth-session.md +548 -0
  1360. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/burn-in.md +273 -0
  1361. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/ci-burn-in.md +717 -0
  1362. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/component-tdd.md +486 -0
  1363. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/contract-testing.md +1066 -0
  1364. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/data-factories.md +500 -0
  1365. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/email-auth.md +721 -0
  1366. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/error-handling.md +725 -0
  1367. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/feature-flags.md +750 -0
  1368. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/file-utils.md +456 -0
  1369. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/fixture-architecture.md +401 -0
  1370. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/fixtures-composition.md +382 -0
  1371. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/intercept-network-call.md +426 -0
  1372. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/log.md +426 -0
  1373. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/network-error-monitor.md +401 -0
  1374. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/network-first.md +486 -0
  1375. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/network-recorder.md +527 -0
  1376. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/nfr-criteria.md +670 -0
  1377. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/overview.md +286 -0
  1378. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pact-broker-webhooks.md +237 -0
  1379. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pact-consumer-di.md +310 -0
  1380. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1381. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pact-mcp.md +205 -0
  1382. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1383. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pactjs-utils-overview.md +216 -0
  1384. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1385. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1386. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/playwright-cli.md +280 -0
  1387. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/playwright-config.md +734 -0
  1388. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/probability-impact.md +601 -0
  1389. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/recurse.md +421 -0
  1390. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/risk-governance.md +615 -0
  1391. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/selective-testing.md +732 -0
  1392. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/selector-resilience.md +527 -0
  1393. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/test-healing-patterns.md +644 -0
  1394. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/test-levels-framework.md +473 -0
  1395. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/test-priorities-matrix.md +373 -0
  1396. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/test-quality.md +664 -0
  1397. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/timing-debugging.md +372 -0
  1398. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/visual-debugging.md +527 -0
  1399. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/webhook-module-setup.md +122 -0
  1400. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/webhook-providers.md +155 -0
  1401. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/webhook-risk-guidance.md +114 -0
  1402. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/webhook-template-matchers.md +160 -0
  1403. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1404. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/webhook-timeout-error.md +130 -0
  1405. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/knowledge/webhook-waiting-querying.md +167 -0
  1406. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/resources/tea-index.csv +51 -0
  1407. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-c/step-01-preflight.md +158 -0
  1408. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-c/step-01b-resume.md +110 -0
  1409. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-c/step-02-generate-pipeline.md +293 -0
  1410. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-c/step-03-configure-quality-gates.md +145 -0
  1411. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-c/step-04-validate-and-summary.md +100 -0
  1412. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-e/step-01-assess.md +65 -0
  1413. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-e/step-02-apply-edit.md +68 -0
  1414. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/steps-v/step-01-validate.md +89 -0
  1415. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/validation-report-20260127-095021.md +72 -0
  1416. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/validation-report-20260127-102401.md +114 -0
  1417. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/workflow-plan.md +20 -0
  1418. package/skills/NTAPP/.agent/skills/bmad-testarch-ci/workflow.yaml +48 -0
  1419. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/SKILL.md +85 -0
  1420. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/checklist.md +345 -0
  1421. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/customize.toml +40 -0
  1422. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/instructions.md +44 -0
  1423. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1424. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/api-request.md +563 -0
  1425. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/api-testing-patterns.md +915 -0
  1426. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/auth-session.md +548 -0
  1427. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/burn-in.md +273 -0
  1428. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/ci-burn-in.md +717 -0
  1429. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/component-tdd.md +486 -0
  1430. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/contract-testing.md +1066 -0
  1431. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/data-factories.md +500 -0
  1432. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/email-auth.md +721 -0
  1433. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/error-handling.md +725 -0
  1434. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/feature-flags.md +750 -0
  1435. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/file-utils.md +456 -0
  1436. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/fixture-architecture.md +401 -0
  1437. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/fixtures-composition.md +382 -0
  1438. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/intercept-network-call.md +426 -0
  1439. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/log.md +426 -0
  1440. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/network-error-monitor.md +401 -0
  1441. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/network-first.md +486 -0
  1442. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/network-recorder.md +527 -0
  1443. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/nfr-criteria.md +670 -0
  1444. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/overview.md +286 -0
  1445. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pact-broker-webhooks.md +237 -0
  1446. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pact-consumer-di.md +310 -0
  1447. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1448. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pact-mcp.md +205 -0
  1449. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1450. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pactjs-utils-overview.md +216 -0
  1451. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1452. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1453. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/playwright-cli.md +280 -0
  1454. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/playwright-config.md +734 -0
  1455. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/probability-impact.md +601 -0
  1456. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/recurse.md +421 -0
  1457. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/risk-governance.md +615 -0
  1458. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/selective-testing.md +732 -0
  1459. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/selector-resilience.md +527 -0
  1460. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/test-healing-patterns.md +644 -0
  1461. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/test-levels-framework.md +473 -0
  1462. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/test-priorities-matrix.md +373 -0
  1463. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/test-quality.md +664 -0
  1464. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/timing-debugging.md +372 -0
  1465. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/visual-debugging.md +527 -0
  1466. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/webhook-module-setup.md +122 -0
  1467. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/webhook-providers.md +155 -0
  1468. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/webhook-risk-guidance.md +114 -0
  1469. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/webhook-template-matchers.md +160 -0
  1470. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1471. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/webhook-timeout-error.md +130 -0
  1472. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/knowledge/webhook-waiting-querying.md +167 -0
  1473. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/resources/tea-index.csv +51 -0
  1474. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-c/step-01-preflight.md +132 -0
  1475. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-c/step-01b-resume.md +116 -0
  1476. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-c/step-02-select-framework.md +117 -0
  1477. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-c/step-03-scaffold-framework.md +328 -0
  1478. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-c/step-04-docs-and-scripts.md +105 -0
  1479. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-c/step-05-validate-and-summary.md +101 -0
  1480. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-e/step-01-assess.md +65 -0
  1481. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-e/step-02-apply-edit.md +68 -0
  1482. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/steps-v/step-01-validate.md +75 -0
  1483. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/validation-report-20260127-095021.md +73 -0
  1484. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/validation-report-20260127-102401.md +116 -0
  1485. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/workflow-plan.md +22 -0
  1486. package/skills/NTAPP/.agent/skills/bmad-testarch-framework/workflow.yaml +48 -0
  1487. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/SKILL.md +85 -0
  1488. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/checklist.md +407 -0
  1489. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/customize.toml +40 -0
  1490. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/instructions.md +43 -0
  1491. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/nfr-report-template.md +470 -0
  1492. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1493. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/api-request.md +563 -0
  1494. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/api-testing-patterns.md +915 -0
  1495. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/auth-session.md +548 -0
  1496. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/burn-in.md +273 -0
  1497. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/ci-burn-in.md +717 -0
  1498. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/component-tdd.md +486 -0
  1499. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/contract-testing.md +1066 -0
  1500. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/data-factories.md +500 -0
  1501. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/email-auth.md +721 -0
  1502. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/error-handling.md +725 -0
  1503. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/feature-flags.md +750 -0
  1504. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/file-utils.md +456 -0
  1505. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/fixture-architecture.md +401 -0
  1506. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/fixtures-composition.md +382 -0
  1507. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/intercept-network-call.md +426 -0
  1508. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/log.md +426 -0
  1509. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/network-error-monitor.md +401 -0
  1510. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/network-first.md +486 -0
  1511. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/network-recorder.md +527 -0
  1512. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/nfr-criteria.md +670 -0
  1513. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/overview.md +286 -0
  1514. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pact-broker-webhooks.md +237 -0
  1515. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pact-consumer-di.md +310 -0
  1516. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1517. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pact-mcp.md +205 -0
  1518. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1519. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pactjs-utils-overview.md +216 -0
  1520. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1521. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1522. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/playwright-cli.md +280 -0
  1523. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/playwright-config.md +734 -0
  1524. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/probability-impact.md +601 -0
  1525. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/recurse.md +421 -0
  1526. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/risk-governance.md +615 -0
  1527. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/selective-testing.md +732 -0
  1528. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/selector-resilience.md +527 -0
  1529. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/test-healing-patterns.md +644 -0
  1530. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/test-levels-framework.md +473 -0
  1531. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/test-priorities-matrix.md +373 -0
  1532. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/test-quality.md +664 -0
  1533. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/timing-debugging.md +372 -0
  1534. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/visual-debugging.md +527 -0
  1535. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/webhook-module-setup.md +122 -0
  1536. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/webhook-providers.md +155 -0
  1537. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/webhook-risk-guidance.md +114 -0
  1538. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/webhook-template-matchers.md +160 -0
  1539. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1540. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/webhook-timeout-error.md +130 -0
  1541. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/knowledge/webhook-waiting-querying.md +167 -0
  1542. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/resources/tea-index.csv +51 -0
  1543. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-01-load-context.md +138 -0
  1544. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-01b-resume.md +106 -0
  1545. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-02-define-thresholds.md +107 -0
  1546. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-03-gather-evidence.md +108 -0
  1547. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-04-evaluate-and-score.md +254 -0
  1548. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-04a-subagent-security.md +138 -0
  1549. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-04b-subagent-performance.md +84 -0
  1550. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-04c-subagent-reliability.md +85 -0
  1551. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-04d-subagent-scalability.md +88 -0
  1552. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +264 -0
  1553. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-c/step-05-generate-report.md +116 -0
  1554. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-e/step-01-assess.md +65 -0
  1555. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-e/step-02-apply-edit.md +68 -0
  1556. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/steps-v/step-01-validate.md +75 -0
  1557. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/validation-report-20260127-095021.md +73 -0
  1558. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/validation-report-20260127-102401.md +116 -0
  1559. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/workflow-plan.md +19 -0
  1560. package/skills/NTAPP/.agent/skills/bmad-testarch-nfr/workflow.yaml +48 -0
  1561. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/SKILL.md +87 -0
  1562. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/checklist.md +464 -0
  1563. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/customize.toml +40 -0
  1564. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/instructions.md +104 -0
  1565. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1566. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/api-request.md +563 -0
  1567. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/api-testing-patterns.md +915 -0
  1568. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/auth-session.md +548 -0
  1569. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/burn-in.md +273 -0
  1570. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/ci-burn-in.md +717 -0
  1571. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/component-tdd.md +486 -0
  1572. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/contract-testing.md +1066 -0
  1573. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/data-factories.md +500 -0
  1574. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/email-auth.md +721 -0
  1575. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/error-handling.md +725 -0
  1576. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/feature-flags.md +750 -0
  1577. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/file-utils.md +456 -0
  1578. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/fixture-architecture.md +401 -0
  1579. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/fixtures-composition.md +382 -0
  1580. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/intercept-network-call.md +426 -0
  1581. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/log.md +426 -0
  1582. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/network-error-monitor.md +401 -0
  1583. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/network-first.md +486 -0
  1584. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/network-recorder.md +527 -0
  1585. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/nfr-criteria.md +670 -0
  1586. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/overview.md +286 -0
  1587. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pact-broker-webhooks.md +237 -0
  1588. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pact-consumer-di.md +310 -0
  1589. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1590. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pact-mcp.md +205 -0
  1591. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1592. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pactjs-utils-overview.md +216 -0
  1593. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1594. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1595. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/playwright-cli.md +280 -0
  1596. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/playwright-config.md +734 -0
  1597. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/probability-impact.md +601 -0
  1598. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/recurse.md +421 -0
  1599. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/risk-governance.md +615 -0
  1600. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/selective-testing.md +732 -0
  1601. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/selector-resilience.md +527 -0
  1602. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/test-healing-patterns.md +644 -0
  1603. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/test-levels-framework.md +473 -0
  1604. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/test-priorities-matrix.md +373 -0
  1605. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/test-quality.md +664 -0
  1606. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/timing-debugging.md +372 -0
  1607. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/visual-debugging.md +527 -0
  1608. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/webhook-module-setup.md +122 -0
  1609. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/webhook-providers.md +155 -0
  1610. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/webhook-risk-guidance.md +114 -0
  1611. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/webhook-template-matchers.md +160 -0
  1612. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1613. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/webhook-timeout-error.md +130 -0
  1614. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/knowledge/webhook-waiting-querying.md +167 -0
  1615. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/resources/tea-index.csv +51 -0
  1616. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-c/step-01-detect-mode.md +140 -0
  1617. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-c/step-01b-resume.md +116 -0
  1618. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-c/step-02-load-context.md +248 -0
  1619. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-c/step-03-risk-and-testability.md +116 -0
  1620. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-c/step-04-coverage-plan.md +129 -0
  1621. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-c/step-05-generate-output.md +236 -0
  1622. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-e/step-01-assess.md +65 -0
  1623. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-e/step-02-apply-edit.md +68 -0
  1624. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/steps-v/step-01-validate.md +75 -0
  1625. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/test-design-architecture-template.md +233 -0
  1626. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/test-design-handoff-template.md +70 -0
  1627. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/test-design-qa-template.md +399 -0
  1628. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/test-design-template.md +347 -0
  1629. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/validation-report-20260127-095021.md +73 -0
  1630. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/validation-report-20260127-102401.md +116 -0
  1631. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/workflow-plan.md +22 -0
  1632. package/skills/NTAPP/.agent/skills/bmad-testarch-test-design/workflow.yaml +77 -0
  1633. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/SKILL.md +85 -0
  1634. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/checklist.md +475 -0
  1635. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/customize.toml +40 -0
  1636. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/instructions.md +45 -0
  1637. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1638. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/api-request.md +563 -0
  1639. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/api-testing-patterns.md +915 -0
  1640. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/auth-session.md +548 -0
  1641. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/burn-in.md +273 -0
  1642. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/ci-burn-in.md +717 -0
  1643. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/component-tdd.md +486 -0
  1644. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/contract-testing.md +1066 -0
  1645. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/data-factories.md +500 -0
  1646. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/email-auth.md +721 -0
  1647. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/error-handling.md +725 -0
  1648. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/feature-flags.md +750 -0
  1649. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/file-utils.md +456 -0
  1650. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/fixture-architecture.md +401 -0
  1651. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/fixtures-composition.md +382 -0
  1652. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/intercept-network-call.md +426 -0
  1653. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/log.md +426 -0
  1654. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/network-error-monitor.md +401 -0
  1655. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/network-first.md +486 -0
  1656. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/network-recorder.md +527 -0
  1657. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/nfr-criteria.md +670 -0
  1658. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/overview.md +286 -0
  1659. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pact-broker-webhooks.md +237 -0
  1660. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pact-consumer-di.md +310 -0
  1661. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1662. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pact-mcp.md +205 -0
  1663. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1664. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pactjs-utils-overview.md +216 -0
  1665. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1666. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1667. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/playwright-cli.md +280 -0
  1668. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/playwright-config.md +734 -0
  1669. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/probability-impact.md +601 -0
  1670. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/recurse.md +421 -0
  1671. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/risk-governance.md +615 -0
  1672. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/selective-testing.md +732 -0
  1673. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/selector-resilience.md +527 -0
  1674. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/test-healing-patterns.md +644 -0
  1675. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/test-levels-framework.md +473 -0
  1676. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/test-priorities-matrix.md +373 -0
  1677. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/test-quality.md +664 -0
  1678. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/timing-debugging.md +372 -0
  1679. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/visual-debugging.md +527 -0
  1680. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/webhook-module-setup.md +122 -0
  1681. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/webhook-providers.md +155 -0
  1682. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/webhook-risk-guidance.md +114 -0
  1683. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/webhook-template-matchers.md +160 -0
  1684. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1685. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/webhook-timeout-error.md +130 -0
  1686. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/knowledge/webhook-waiting-querying.md +167 -0
  1687. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/resources/tea-index.csv +51 -0
  1688. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-01-load-context.md +197 -0
  1689. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-01b-resume.md +104 -0
  1690. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-02-discover-tests.md +120 -0
  1691. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-03-quality-evaluation.md +274 -0
  1692. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-03a-subagent-determinism.md +257 -0
  1693. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-03b-subagent-isolation.md +125 -0
  1694. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-03c-subagent-maintainability.md +102 -0
  1695. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-03e-subagent-performance.md +117 -0
  1696. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-03f-aggregate-scores.md +277 -0
  1697. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-c/step-04-generate-report.md +119 -0
  1698. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-e/step-01-assess.md +65 -0
  1699. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-e/step-02-apply-edit.md +68 -0
  1700. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/steps-v/step-01-validate.md +75 -0
  1701. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/test-review-template.md +387 -0
  1702. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/validation-report-20260127-095021.md +72 -0
  1703. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/validation-report-20260127-102401.md +114 -0
  1704. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/workflow-plan.md +18 -0
  1705. package/skills/NTAPP/.agent/skills/bmad-testarch-test-review/workflow.yaml +48 -0
  1706. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/SKILL.md +87 -0
  1707. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/checklist.md +671 -0
  1708. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/customize.toml +40 -0
  1709. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/instructions.md +45 -0
  1710. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
  1711. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/api-request.md +563 -0
  1712. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/api-testing-patterns.md +915 -0
  1713. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/auth-session.md +548 -0
  1714. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/burn-in.md +273 -0
  1715. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/ci-burn-in.md +717 -0
  1716. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/component-tdd.md +486 -0
  1717. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/contract-testing.md +1066 -0
  1718. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/data-factories.md +500 -0
  1719. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/email-auth.md +721 -0
  1720. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/error-handling.md +725 -0
  1721. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/feature-flags.md +750 -0
  1722. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/file-utils.md +456 -0
  1723. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/fixture-architecture.md +401 -0
  1724. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/fixtures-composition.md +382 -0
  1725. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/intercept-network-call.md +426 -0
  1726. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/log.md +426 -0
  1727. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/network-error-monitor.md +401 -0
  1728. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/network-first.md +486 -0
  1729. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/network-recorder.md +527 -0
  1730. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/nfr-criteria.md +670 -0
  1731. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/overview.md +286 -0
  1732. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pact-broker-webhooks.md +237 -0
  1733. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pact-consumer-di.md +310 -0
  1734. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pact-consumer-framework-setup.md +757 -0
  1735. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pact-mcp.md +205 -0
  1736. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -0
  1737. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pactjs-utils-overview.md +216 -0
  1738. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
  1739. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/pactjs-utils-request-filter.md +224 -0
  1740. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/playwright-cli.md +280 -0
  1741. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/playwright-config.md +734 -0
  1742. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/probability-impact.md +601 -0
  1743. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/recurse.md +421 -0
  1744. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/risk-governance.md +615 -0
  1745. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/selective-testing.md +732 -0
  1746. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/selector-resilience.md +527 -0
  1747. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/test-healing-patterns.md +644 -0
  1748. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/test-levels-framework.md +473 -0
  1749. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/test-priorities-matrix.md +373 -0
  1750. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/test-quality.md +664 -0
  1751. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/timing-debugging.md +372 -0
  1752. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/visual-debugging.md +527 -0
  1753. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/webhook-module-setup.md +122 -0
  1754. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/webhook-providers.md +155 -0
  1755. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/webhook-risk-guidance.md +114 -0
  1756. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/webhook-template-matchers.md +160 -0
  1757. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/webhook-testing-fundamentals.md +42 -0
  1758. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/webhook-timeout-error.md +130 -0
  1759. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/knowledge/webhook-waiting-querying.md +167 -0
  1760. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/resources/tea-index.csv +51 -0
  1761. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-c/step-01-load-context.md +166 -0
  1762. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-c/step-01b-resume.md +102 -0
  1763. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-c/step-02-discover-tests.md +132 -0
  1764. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-c/step-03-map-criteria.md +101 -0
  1765. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-c/step-04-analyze-gaps.md +628 -0
  1766. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-c/step-05-gate-decision.md +681 -0
  1767. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-e/step-01-assess.md +65 -0
  1768. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-e/step-02-apply-edit.md +68 -0
  1769. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/steps-v/step-01-validate.md +75 -0
  1770. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/trace-template.md +716 -0
  1771. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/validation-report-20260127-095021.md +73 -0
  1772. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/validation-report-20260127-102401.md +116 -0
  1773. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/workflow-plan.md +24 -0
  1774. package/skills/NTAPP/.agent/skills/bmad-testarch-trace/workflow.yaml +80 -0
  1775. package/skills/NTAPP/.agent/skills/bmad-validate-prd/SKILL.md +6 -0
  1776. package/skills/NTAPP/.agent/skills/bmad-validate-prd/data/domain-complexity.csv +15 -0
  1777. package/skills/NTAPP/.agent/skills/bmad-validate-prd/data/prd-purpose.md +197 -0
  1778. package/skills/NTAPP/.agent/skills/bmad-validate-prd/data/project-types.csv +11 -0
  1779. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
  1780. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
  1781. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
  1782. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
  1783. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
  1784. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
  1785. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
  1786. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
  1787. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
  1788. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
  1789. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
  1790. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
  1791. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
  1792. package/skills/NTAPP/.agent/skills/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
  1793. package/skills/NTAPP/.agent/skills/bmad-validate-prd/workflow.md +61 -0
  1794. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/SKILL.md +71 -0
  1795. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/assets/SKILL-template.md +53 -0
  1796. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/assets/customize-template.toml +56 -0
  1797. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/assets/sample-customize-product-brief.toml +51 -0
  1798. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/build-process.md +229 -0
  1799. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/classification-reference.md +65 -0
  1800. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/complex-workflow-patterns.md +123 -0
  1801. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/convert-process.md +106 -0
  1802. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-analysis.md +151 -0
  1803. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-dimensions.md +63 -0
  1804. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-scan-customization-surface.md +166 -0
  1805. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-scan-enhancement-opportunities.md +185 -0
  1806. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-scan-execution-efficiency.md +235 -0
  1807. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-scan-prompt-craft.md +273 -0
  1808. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-scan-script-opportunities.md +212 -0
  1809. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-scan-skill-cohesion.md +154 -0
  1810. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/quality-scan-workflow-integrity.md +210 -0
  1811. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/report-quality-scan-creator.md +262 -0
  1812. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/script-opportunities-reference.md +100 -0
  1813. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/script-standards.md +92 -0
  1814. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/skill-best-practices.md +109 -0
  1815. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/standard-fields.md +198 -0
  1816. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/references/template-substitution-rules.md +47 -0
  1817. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/generate-convert-report.py +406 -0
  1818. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/generate-html-report.py +539 -0
  1819. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py +288 -0
  1820. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +285 -0
  1821. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/prepass-workflow-integrity.py +475 -0
  1822. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/scan-path-standards.py +298 -0
  1823. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/scan-scripts.py +745 -0
  1824. package/skills/NTAPP/.agent/skills/bmad-workflow-builder/scripts/tests/test_generate_convert_report.py +243 -0
  1825. package/skills/NTAPP/.agent/skills/c4-diagram-optimizer/SKILL.md +6 -0
  1826. package/skills/NTAPP/.agent/skills/c4-diagram-optimizer/workflow.md +69 -0
  1827. package/skills/NTAPP/.agent/skills/diagnose/SKILL.md +117 -0
  1828. package/skills/NTAPP/.agent/skills/directional-branch-merge/SKILL.md +87 -0
  1829. package/skills/NTAPP/.agent/skills/grill-me/SKILL.md +10 -0
  1830. package/skills/NTAPP/.agent/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  1831. package/skills/NTAPP/.agent/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
  1832. package/skills/NTAPP/.agent/skills/grill-with-docs/SKILL.md +88 -0
  1833. package/skills/NTAPP/.agent/skills/improve-codebase-architecture/SKILL.md +70 -0
  1834. package/skills/NTAPP/.agent/skills/lavish/SKILL.md +85 -0
  1835. package/skills/NTAPP/.agent/skills/sdlc-architecture/SKILL.md +218 -0
  1836. package/skills/NTAPP/.agent/skills/sdlc-discovery/SKILL.md +197 -0
  1837. package/skills/NTAPP/.agent/skills/sdlc-feature-complete/SKILL.md +159 -0
  1838. package/skills/NTAPP/.agent/skills/sdlc-hotfix-analyze/SKILL.md +198 -0
  1839. package/skills/NTAPP/.agent/skills/sdlc-hotfix-implement/SKILL.md +227 -0
  1840. package/skills/NTAPP/.agent/skills/sdlc-hotfix-prd/SKILL.md +161 -0
  1841. package/skills/NTAPP/.agent/skills/sdlc-hotfix-review/SKILL.md +151 -0
  1842. package/skills/NTAPP/.agent/skills/sdlc-hotfix-ship/SKILL.md +221 -0
  1843. package/skills/NTAPP/.agent/skills/sdlc-implement/SKILL.md +267 -0
  1844. package/skills/NTAPP/.agent/skills/sdlc-init/SKILL.md +195 -0
  1845. package/skills/NTAPP/.agent/skills/sdlc-onboard-code/SKILL.md +195 -0
  1846. package/skills/NTAPP/.agent/skills/sdlc-onboard-docs/SKILL.md +121 -0
  1847. package/skills/NTAPP/.agent/skills/sdlc-prd/SKILL.md +180 -0
  1848. package/skills/NTAPP/.agent/skills/sdlc-review/SKILL.md +235 -0
  1849. package/skills/NTAPP/.agent/skills/sdlc-sdlc-health/SKILL.md +168 -0
  1850. package/skills/NTAPP/.agent/skills/sdlc-ship/SKILL.md +194 -0
  1851. package/skills/NTAPP/.agent/skills/sdlc-srs/SKILL.md +138 -0
  1852. package/skills/NTAPP/.agent/skills/sdlc-test-design/SKILL.md +132 -0
  1853. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/SKILL.md +164 -0
  1854. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/scripts/frame-template.html +214 -0
  1855. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/scripts/helper.js +88 -0
  1856. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/scripts/server.cjs +354 -0
  1857. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/scripts/start-server.sh +148 -0
  1858. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/scripts/stop-server.sh +56 -0
  1859. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/spec-document-reviewer-prompt.md +49 -0
  1860. package/skills/NTAPP/.agent/skills/superpowers-brainstorming/visual-companion.md +287 -0
  1861. package/skills/NTAPP/.agent/skills/superpowers-dispatching-parallel-agents/SKILL.md +182 -0
  1862. package/skills/NTAPP/.agent/skills/superpowers-finishing-a-development-branch/SKILL.md +251 -0
  1863. package/skills/NTAPP/.agent/skills/superpowers-receiving-code-review/SKILL.md +213 -0
  1864. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/CREATION-LOG.md +119 -0
  1865. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/SKILL.md +296 -0
  1866. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/condition-based-waiting-example.ts +158 -0
  1867. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/condition-based-waiting.md +115 -0
  1868. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/defense-in-depth.md +122 -0
  1869. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/find-polluter.sh +63 -0
  1870. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/root-cause-tracing.md +169 -0
  1871. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/test-academic.md +14 -0
  1872. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/test-pressure-1.md +58 -0
  1873. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/test-pressure-2.md +68 -0
  1874. package/skills/NTAPP/.agent/skills/superpowers-systematic-debugging/test-pressure-3.md +69 -0
  1875. package/skills/NTAPP/.agent/skills/superpowers-test-driven-development/SKILL.md +371 -0
  1876. package/skills/NTAPP/.agent/skills/superpowers-test-driven-development/testing-anti-patterns.md +299 -0
  1877. package/skills/NTAPP/.agent/skills/superpowers-using-git-worktrees/SKILL.md +215 -0
  1878. package/skills/NTAPP/.agent/skills/superpowers-using-superpowers/SKILL.md +117 -0
  1879. package/skills/NTAPP/.agent/skills/superpowers-using-superpowers/references/codex-tools.md +59 -0
  1880. package/skills/NTAPP/.agent/skills/superpowers-using-superpowers/references/copilot-tools.md +42 -0
  1881. package/skills/NTAPP/.agent/skills/superpowers-using-superpowers/references/gemini-tools.md +51 -0
  1882. package/skills/NTAPP/.agent/skills/superpowers-verification-before-completion/SKILL.md +139 -0
  1883. package/skills/NTAPP/.agent/skills/superpowers-writing-skills/SKILL.md +655 -0
  1884. package/skills/NTAPP/.agent/skills/superpowers-writing-skills/anthropic-best-practices.md +1150 -0
  1885. package/skills/NTAPP/.agent/skills/superpowers-writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  1886. package/skills/NTAPP/.agent/skills/superpowers-writing-skills/graphviz-conventions.dot +172 -0
  1887. package/skills/NTAPP/.agent/skills/superpowers-writing-skills/persuasion-principles.md +187 -0
  1888. package/skills/NTAPP/.agent/skills/superpowers-writing-skills/render-graphs.js +168 -0
  1889. package/skills/NTAPP/.agent/skills/superpowers-writing-skills/testing-skills-with-subagents.md +384 -0
  1890. package/skills/NTAPP/.agent/skills/tdd/SKILL.md +107 -0
  1891. package/skills/NTAPP/.agent/skills/vds-scripts-skill/SKILL.md +145 -0
  1892. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/audit-commands.md +171 -0
  1893. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/capability-index.md +34 -0
  1894. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/confluence-content-export.md +158 -0
  1895. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/development-commands.md +12 -0
  1896. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/google-sheets.md +71 -0
  1897. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/integration-commands.md +17 -0
  1898. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/platform-bootstrap.md +25 -0
  1899. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/specialist-routing.md +14 -0
  1900. package/skills/NTAPP/.agent/skills/vds-scripts-skill/references/validation-commands.md +15 -0
  1901. package/skills/NTAPP/.agent/skills/zoom-out/SKILL.md +7 -0
  1902. package/skills/NTAPP/.mcp.json +19 -0
  1903. package/skills/NTAPP/.vsaf/commands/NTAPP-architecture-design.md +9 -0
  1904. package/skills/NTAPP/.vsaf/commands/NTAPP-ds-bootstrap.md +9 -0
  1905. package/skills/NTAPP/.vsaf/commands/NTAPP-ds-build-component.md +9 -0
  1906. package/skills/NTAPP/.vsaf/commands/NTAPP-feature-design.md +9 -0
  1907. package/skills/NTAPP/.vsaf/commands/NTAPP-feature-triage.md +9 -0
  1908. package/skills/NTAPP/.vsaf/commands/NTAPP-slice-planning.md +9 -0
  1909. package/skills/NTAPP/.vsaf/commands/NTAPP-system-overview.md +12 -0
  1910. package/skills/NTAPP/.vsaf/commands/NTAPP-technical-design.md +9 -0
  1911. package/skills/NTAPP/.vsaf/commands/NTAPP-ui-generation.md +9 -0
  1912. package/skills/NTAPP/.vsaf/commands/NTAPP-ux-design.md +9 -0
  1913. package/skills/NTAPP/.vsaf/commands/NTAPP-ux-sketch.md +9 -0
  1914. package/skills/NTAPP/.vsaf/commands/bmad-advanced-elicitation.md +7 -0
  1915. package/skills/NTAPP/.vsaf/commands/bmad-agent-analyst.md +7 -0
  1916. package/skills/NTAPP/.vsaf/commands/bmad-brainstorming.md +7 -0
  1917. package/skills/NTAPP/.vsaf/commands/bmad-check-implementation-readiness.md +7 -0
  1918. package/skills/NTAPP/.vsaf/commands/bmad-checkpoint-preview.md +7 -0
  1919. package/skills/NTAPP/.vsaf/commands/bmad-code-review.md +7 -0
  1920. package/skills/NTAPP/.vsaf/commands/bmad-correct-course.md +7 -0
  1921. package/skills/NTAPP/.vsaf/commands/bmad-create-architecture.md +7 -0
  1922. package/skills/NTAPP/.vsaf/commands/bmad-create-epics-and-stories.md +7 -0
  1923. package/skills/NTAPP/.vsaf/commands/bmad-create-prd.md +7 -0
  1924. package/skills/NTAPP/.vsaf/commands/bmad-create-story.md +9 -0
  1925. package/skills/NTAPP/.vsaf/commands/bmad-dev-story.md +9 -0
  1926. package/skills/NTAPP/.vsaf/commands/bmad-domain-research.md +7 -0
  1927. package/skills/NTAPP/.vsaf/commands/bmad-party-mode.md +7 -0
  1928. package/skills/NTAPP/.vsaf/commands/bmad-prfaq.md +7 -0
  1929. package/skills/NTAPP/.vsaf/commands/bmad-qa-generate-e2e-tests.md +7 -0
  1930. package/skills/NTAPP/.vsaf/commands/bmad-quick-dev.md +9 -0
  1931. package/skills/NTAPP/.vsaf/commands/bmad-review-adversarial-general.md +7 -0
  1932. package/skills/NTAPP/.vsaf/commands/bmad-review-edge-case-hunter.md +7 -0
  1933. package/skills/NTAPP/.vsaf/commands/bmad-testarch-atdd.md +9 -0
  1934. package/skills/NTAPP/.vsaf/commands/bmad-validate-prd.md +7 -0
  1935. package/skills/NTAPP/.vsaf/commands/diagnose.md +7 -0
  1936. package/skills/NTAPP/.vsaf/commands/grill-me.md +7 -0
  1937. package/skills/NTAPP/.vsaf/commands/improve-codebase-architecture.md +7 -0
  1938. package/skills/NTAPP/.vsaf/commands/sdlc-architecture.md +7 -0
  1939. package/skills/NTAPP/.vsaf/commands/sdlc-discovery.md +7 -0
  1940. package/skills/NTAPP/.vsaf/commands/sdlc-feature-complete.md +7 -0
  1941. package/skills/NTAPP/.vsaf/commands/sdlc-hotfix-analyze.md +7 -0
  1942. package/skills/NTAPP/.vsaf/commands/sdlc-hotfix-implement.md +7 -0
  1943. package/skills/NTAPP/.vsaf/commands/sdlc-hotfix-prd.md +7 -0
  1944. package/skills/NTAPP/.vsaf/commands/sdlc-hotfix-review.md +7 -0
  1945. package/skills/NTAPP/.vsaf/commands/sdlc-hotfix-ship.md +7 -0
  1946. package/skills/NTAPP/.vsaf/commands/sdlc-implement.md +7 -0
  1947. package/skills/NTAPP/.vsaf/commands/sdlc-init.md +7 -0
  1948. package/skills/NTAPP/.vsaf/commands/sdlc-onboard-code.md +7 -0
  1949. package/skills/NTAPP/.vsaf/commands/sdlc-onboard-docs.md +7 -0
  1950. package/skills/NTAPP/.vsaf/commands/sdlc-prd.md +7 -0
  1951. package/skills/NTAPP/.vsaf/commands/sdlc-review.md +7 -0
  1952. package/skills/NTAPP/.vsaf/commands/sdlc-sdlc-health.md +7 -0
  1953. package/skills/NTAPP/.vsaf/commands/sdlc-ship.md +7 -0
  1954. package/skills/NTAPP/.vsaf/commands/sdlc-srs.md +7 -0
  1955. package/skills/NTAPP/.vsaf/commands/sdlc-test-design.md +7 -0
  1956. package/skills/NTAPP/.vsaf/commands/superpowers-finishing-a-development-branch.md +9 -0
  1957. package/skills/NTAPP/.vsaf/commands/tdd.md +7 -0
  1958. package/skills/NTAPP/.vsaf/commands/vds-scripts-skill.md +7 -0
  1959. package/skills/NTAPP/.vsaf/commands/zoom-out.md +7 -0
  1960. package/skills/NTAPP/.vsaf/config.yaml +37 -0
  1961. package/skills/NTAPP/.vsaf/workflows/NTAPP/ad-hoc-per-unit.yaml +232 -0
  1962. package/skills/NTAPP/.vsaf/workflows/NTAPP/bug-fix-batch.yaml +633 -0
  1963. package/skills/NTAPP/.vsaf/workflows/NTAPP/create_prd_epics.yaml +67 -0
  1964. package/skills/NTAPP/.vsaf/workflows/NTAPP/express-hotfix.yaml +160 -0
  1965. package/skills/NTAPP/.vsaf/workflows/NTAPP/path-b-quick-dev.yaml +433 -0
  1966. package/skills/NTAPP/.vsaf/workflows/NTAPP/reproduce_architecture.yaml +215 -0
  1967. package/skills/NTAPP/.vsaf/workflows/NTAPP/slice-loop.yaml +538 -0
  1968. package/skills/NTAPP/.vsaf/workflows/NTAPP/slice-planning.yaml +54 -0
  1969. package/skills/NTAPP/.vsaf/workflows/NTAPP/staging-deploy.yaml +191 -0
  1970. package/skills/NTAPP/.vsaf/workflows/NTAPP/tests/args-quoting-fixture.yaml +37 -0
  1971. package/skills/NTAPP/.vsaf/workflows/NTAPP/tests/loop-exhaust-fixture.yaml +18 -0
  1972. package/skills/NTAPP/.vsaf/workflows/sdlc/hotfix-tdd.yaml +18 -0
  1973. package/skills/NTAPP/.vsaf/workflows/sdlc/hotfix.yaml +35 -0
  1974. package/skills/NTAPP/.vsaf/workflows/sdlc/master-sdlc.yaml +55 -0
  1975. package/skills/NTAPP/.vsaf/workflows/sdlc/onboarding.yaml +11 -0
  1976. package/skills/NTAPP/.vsaf/workflows/sdlc/sdlc-build.yaml +18 -0
  1977. package/skills/NTAPP/.vsaf/workflows/sdlc/sdlc-design.yaml +14 -0
  1978. package/skills/NTAPP/.vsaf/workflows/sdlc/sdlc-qa.yaml +20 -0
  1979. package/skills/NTAPP/.vsaf/workflows/sdlc/sdlc-testcase.yaml +8 -0
  1980. package/skills/NTAPP/.vsaf/workflows/sdlc/sdlc-thinking.yaml +12 -0
  1981. package/skills/NTAPP/CLAUDE.md +346 -0
  1982. package/skills/NTAPP/NTAPP-output/Stage_1_Discovery/.gitkeep +0 -0
  1983. package/skills/NTAPP/NTAPP-output/Stage_1_Discovery/brainstorms/.gitkeep +0 -0
  1984. package/skills/NTAPP/NTAPP-output/Stage_1_Discovery/brainstorms/2026-08-07-sync-skills-global-design.md +65 -0
  1985. package/skills/NTAPP/NTAPP-output/Stage_2_Architecture/.gitkeep +0 -0
  1986. package/skills/NTAPP/NTAPP-output/Stage_2_Architecture/archive/.gitkeep +0 -0
  1987. package/skills/NTAPP/NTAPP-output/Stage_3_Specs/.gitkeep +0 -0
  1988. package/skills/NTAPP/NTAPP-output/Stage_4_Design/.gitkeep +0 -0
  1989. package/skills/NTAPP/NTAPP-output/Stage_5_Build_Verify/.gitkeep +0 -0
  1990. package/skills/NTAPP/NTAPP-output/_notifications/inbox.md +12 -0
  1991. package/skills/NTAPP/NTAPP-output/design-system/_shared/aesthetic-rubric.md +142 -0
  1992. package/skills/NTAPP/NTAPP-output/design-system/_shared/best-practices.md +472 -0
  1993. package/skills/NTAPP/NTAPP-output/design-system/_shared/bmm-config.template.yaml +362 -0
  1994. package/skills/NTAPP/NTAPP-output/design-system/_shared/component-metadata-schema.md +639 -0
  1995. package/skills/NTAPP/NTAPP-output/design-system/_shared/delta-categorizer.md +220 -0
  1996. package/skills/NTAPP/NTAPP-output/design-system/_shared/ds-registry-schema.md +66 -0
  1997. package/skills/NTAPP/NTAPP-output/design-system/_shared/ds-resolution.md +71 -0
  1998. package/skills/NTAPP/NTAPP-output/design-system/_shared/layout-best-practices.md +284 -0
  1999. package/skills/NTAPP/NTAPP-output/design-system/_shared/library-api-schema.md +373 -0
  2000. package/skills/NTAPP/NTAPP-output/design-system/_shared/pattern-matcher.md +204 -0
  2001. package/skills/NTAPP/NTAPP-output/design-system/_shared/proposal-schema.md +358 -0
  2002. package/skills/NTAPP/NTAPP-output/design-system/_shared/stack-profile-schema.md +432 -0
  2003. package/skills/NTAPP/NTAPP-output/design-system/_shared/token-format-schema.md +290 -0
  2004. package/skills/NTAPP/NTAPP-output/design-system/_shared/w3c-converter.md +371 -0
  2005. package/skills/NTAPP/NTAPP-output/design-system/archive/.gitkeep +0 -0
  2006. package/skills/NTAPP/NTAPP-output/design-system/feature_deltas/.gitkeep +0 -0
  2007. package/skills/NTAPP/NTAPP-output/evaluation/archive/metrics-v1.json +241 -0
  2008. package/skills/NTAPP/NTAPP-output/evaluation/archive/metrics-v2.json +312 -0
  2009. package/skills/NTAPP/NTAPP-output/evaluation/archive/metrics-v3.json +295 -0
  2010. package/skills/NTAPP/NTAPP-output/evaluation/archive/scorecard-v1.md +206 -0
  2011. package/skills/NTAPP/NTAPP-output/evaluation/archive/scorecard-v2.md +215 -0
  2012. package/skills/NTAPP/NTAPP-output/evaluation/archive/scorecard-v3.md +214 -0
  2013. package/skills/NTAPP/NTAPP-output/evaluation/evaluation_metrics.md +209 -0
  2014. package/skills/NTAPP/NTAPP-output/evaluation/metrics.json +295 -0
  2015. package/skills/NTAPP/NTAPP-output/evaluation/scorecard.md +214 -0
  2016. package/skills/NTAPP/NTAPP-output/evaluation/token-log.json +118 -0
  2017. package/skills/NTAPP/README.md +470 -0
  2018. package/skills/NTAPP/README.spec-template.md +208 -0
  2019. package/skills/NTAPP/_bmad/_config/agent-manifest.csv +7 -0
  2020. package/skills/NTAPP/_bmad/_config/bmad-help.csv +64 -0
  2021. package/skills/NTAPP/_bmad/_config/files-manifest.csv +1029 -0
  2022. package/skills/NTAPP/_bmad/_config/manifest.yaml +37 -0
  2023. package/skills/NTAPP/_bmad/_config/skill-manifest.csv +56 -0
  2024. package/skills/NTAPP/_bmad/bmb/config.yaml +13 -0
  2025. package/skills/NTAPP/_bmad/bmb/module-help.csv +11 -0
  2026. package/skills/NTAPP/_bmad/bmm/config.yaml +32 -0
  2027. package/skills/NTAPP/_bmad/bmm/module-help.csv +33 -0
  2028. package/skills/NTAPP/_bmad/core/config.yaml +9 -0
  2029. package/skills/NTAPP/_bmad/core/module-help.csv +12 -0
  2030. package/skills/NTAPP/_bmad/tea/config.yaml +29 -0
  2031. package/skills/NTAPP/_bmad/tea/module-help.csv +11 -0
  2032. package/skills/NTAPP/_bmad/tea/workflows/testarch/README.md +76 -0
  2033. package/skills/NTAPP/config/bmm-config.template.yaml +41 -0
  2034. package/skills/NTAPP/docs/Process/Manual_phase_1.md +642 -0
  2035. package/skills/NTAPP/docs/Process/Manual_phase_1_brownfield.md +364 -0
  2036. package/skills/NTAPP/docs/Process/Manual_phase_1_greenfield.md +415 -0
  2037. package/skills/NTAPP/docs/Process/OKF_conventions.md +150 -0
  2038. package/skills/NTAPP/git-hooks/pre-commit +695 -0
  2039. package/skills/NTAPP/hooks/README.md +185 -0
  2040. package/skills/NTAPP/hooks/approval_gate.sh +83 -0
  2041. package/skills/NTAPP/hooks/atdd_classifier.sh +123 -0
  2042. package/skills/NTAPP/hooks/build_component_verify.sh +98 -0
  2043. package/skills/NTAPP/hooks/build_loop.sh +199 -0
  2044. package/skills/NTAPP/hooks/drift_detector.py +347 -0
  2045. package/skills/NTAPP/hooks/ds_build_approval_gate.sh +72 -0
  2046. package/skills/NTAPP/hooks/ds_delta_router.sh +132 -0
  2047. package/skills/NTAPP/hooks/hotfix_classifier.sh +41 -0
  2048. package/skills/NTAPP/hooks/lib/common.sh +300 -0
  2049. package/skills/NTAPP/hooks/lib/entry_mode.sh +53 -0
  2050. package/skills/NTAPP/hooks/lib/hookcommon.py +22 -0
  2051. package/skills/NTAPP/hooks/lib/slice_paths.py +339 -0
  2052. package/skills/NTAPP/hooks/lib/telegram.sh +30 -0
  2053. package/skills/NTAPP/hooks/lib/wbs_parser.py +333 -0
  2054. package/skills/NTAPP/hooks/notify.sh +70 -0
  2055. package/skills/NTAPP/hooks/settings.json +34 -0
  2056. package/skills/NTAPP/hooks/slice_coverage_dag_validate.py +382 -0
  2057. package/skills/NTAPP/hooks/stage2_completeness.sh +72 -0
  2058. package/skills/NTAPP/hooks/stage3_input_gate.sh +153 -0
  2059. package/skills/NTAPP/hooks/stage4a_complete.sh +160 -0
  2060. package/skills/NTAPP/hooks/story_bridge_gate.sh +66 -0
  2061. package/skills/NTAPP/hooks/tests/run.sh +360 -0
  2062. package/skills/NTAPP/hooks/tests/test_slice_paths.py +233 -0
  2063. package/skills/NTAPP/hooks/tests/workflow_bash_lint.py +147 -0
  2064. package/skills/NTAPP/hooks/triage_decision_validate.sh +71 -0
  2065. package/skills/NTAPP/hooks/triage_prereq_gate.sh +50 -0
  2066. package/skills/NTAPP/hooks/verification_gate.sh +142 -0
  2067. package/skills/NTAPP/pack.yaml +177 -0
  2068. package/skills/NTAPP/rules/be-finance-rules.md +139 -0
  2069. package/skills/NTAPP/rules/fe-angular-rules.md +96 -0
  2070. package/skills/NTAPP/rules/rules.json +4 -0
  2071. package/skills/NTAPP/scripts/antigravity/README.md +90 -0
  2072. package/skills/NTAPP/scripts/antigravity/agy-skills/NTAPP-agy-vsaf-ad-hoc-per-unit/SKILL.md +33 -0
  2073. package/skills/NTAPP/scripts/antigravity/agy-skills/NTAPP-agy-vsaf-slice-loop/SKILL.md +39 -0
  2074. package/skills/NTAPP/scripts/antigravity/hooks/README.md +84 -0
  2075. package/skills/NTAPP/scripts/antigravity/hooks/agy-hooks.reference.json +13 -0
  2076. package/skills/NTAPP/scripts/antigravity/hooks/agy-posttool-shim.cjs +101 -0
  2077. package/skills/NTAPP/scripts/antigravity/hooks/install-agy-hooks.sh +54 -0
  2078. package/skills/NTAPP/scripts/antigravity/hooks/run-hooks.cjs +185 -0
  2079. package/skills/NTAPP/scripts/antigravity/hooks/test-driver-hooks.cjs +117 -0
  2080. package/skills/NTAPP/scripts/antigravity/hooks/workflow-hooks.js +123 -0
  2081. package/skills/NTAPP/scripts/antigravity/install-agy-skills.sh +55 -0
  2082. package/skills/NTAPP/scripts/antigravity/vsaf-agy +57 -0
  2083. package/skills/NTAPP/scripts/antigravity/vsaf-agy-driver.cjs +240 -0
  2084. package/skills/NTAPP/scripts/bootstrap.sh +2841 -0
  2085. package/skills/NTAPP/scripts/eval-harvester.py +2764 -0
  2086. package/skills/NTAPP/scripts/okf_project.py +5161 -0
  2087. package/skills/NTAPP/scripts/reachability_check.README.md +122 -0
  2088. package/skills/NTAPP/scripts/reachability_check.py +504 -0
  2089. package/skills/NTAPP/scripts/sync-skills-to-user.sh +200 -0
  2090. package/skills/NTAPP/scripts/templates/.gitattributes +24 -0
  2091. package/skills/NTAPP/scripts/templates/AGENTS.md +20 -0
  2092. package/skills/NTAPP/scripts/templates/GEMINI.md +20 -0
  2093. package/skills/NTAPP/scripts/templates/bmm-config-coderepo.template.yaml +41 -0
  2094. package/skills/NTAPP/scripts/templates/bmm-config-specrepo.template.yaml +356 -0
  2095. package/skills/NTAPP/scripts/templates/claude-hooks.settings.json +34 -0
  2096. package/skills/NTAPP/scripts/templates/pre-commit.template.sh +695 -0
  2097. package/skills/NTAPP/scripts/templates/workspace.template.json +19 -0
  2098. package/skills/autotest-skill/_shared/rf-requirements.txt +39 -0
  2099. package/skills/autotest-skill/autotest-android/SKILL.md +1094 -0
  2100. package/skills/autotest-skill/autotest-android-best-practices/SKILL.md +976 -0
  2101. package/skills/autotest-skill/autotest-android-best-practices/examples/android-form-input.robot +101 -0
  2102. package/skills/autotest-skill/autotest-android-best-practices/examples/android-list-navigation.robot +77 -0
  2103. package/skills/autotest-skill/autotest-android-best-practices/examples/android-login.robot +85 -0
  2104. package/skills/autotest-skill/autotest-android-best-practices/references/android-specific.md +206 -0
  2105. package/skills/autotest-skill/autotest-android-best-practices/references/capabilities.md +183 -0
  2106. package/skills/autotest-skill/autotest-android-best-practices/references/device-farm.md +177 -0
  2107. package/skills/autotest-skill/autotest-android-best-practices/references/gestures.md +160 -0
  2108. package/skills/autotest-skill/autotest-android-best-practices/references/locators.md +192 -0
  2109. package/skills/autotest-skill/autotest-android-best-practices/references/troubleshooting.md +218 -0
  2110. package/skills/autotest-skill/autotest-api/SKILL.md +1267 -0
  2111. package/skills/autotest-skill/autotest-api-best-practices/SKILL.md +643 -0
  2112. package/skills/autotest-skill/autotest-api-best-practices/examples/api-auth.robot +166 -0
  2113. package/skills/autotest-skill/autotest-api-best-practices/examples/api-crud.robot +216 -0
  2114. package/skills/autotest-skill/autotest-api-best-practices/examples/api-error-cases.robot +179 -0
  2115. package/skills/autotest-skill/autotest-api-best-practices/references/authentication.md +191 -0
  2116. package/skills/autotest-skill/autotest-api-best-practices/references/data-driven.md +215 -0
  2117. package/skills/autotest-skill/autotest-api-best-practices/references/http-methods.md +146 -0
  2118. package/skills/autotest-skill/autotest-api-best-practices/references/response-validation.md +220 -0
  2119. package/skills/autotest-skill/autotest-api-best-practices/references/troubleshooting.md +171 -0
  2120. package/skills/autotest-skill/autotest-db/SKILL.md +465 -0
  2121. package/skills/autotest-skill/autotest-db/scripts/db_tunnel.py +78 -0
  2122. package/skills/autotest-skill/autotest-ios/SKILL.md +993 -0
  2123. package/skills/autotest-skill/autotest-ios-best-practices/SKILL.md +974 -0
  2124. package/skills/autotest-skill/autotest-ios-best-practices/examples/ios-form-input.robot +120 -0
  2125. package/skills/autotest-skill/autotest-ios-best-practices/examples/ios-list-navigation.robot +85 -0
  2126. package/skills/autotest-skill/autotest-ios-best-practices/examples/ios-login.robot +103 -0
  2127. package/skills/autotest-skill/autotest-ios-best-practices/references/capabilities.md +187 -0
  2128. package/skills/autotest-skill/autotest-ios-best-practices/references/device-farm.md +180 -0
  2129. package/skills/autotest-skill/autotest-ios-best-practices/references/gestures.md +191 -0
  2130. package/skills/autotest-skill/autotest-ios-best-practices/references/ios-specific.md +308 -0
  2131. package/skills/autotest-skill/autotest-ios-best-practices/references/locators.md +198 -0
  2132. package/skills/autotest-skill/autotest-ios-best-practices/references/troubleshooting.md +271 -0
  2133. package/skills/autotest-skill/autotest-jenkins/SKILL.md +1833 -0
  2134. package/skills/autotest-skill/autotest-mcp-assist/SKILL.md +198 -0
  2135. package/skills/autotest-skill/autotest-project-docs/SKILL.md +344 -0
  2136. package/skills/autotest-skill/autotest-project-docs/scripts/confluence_fetch.py +415 -0
  2137. package/skills/autotest-skill/autotest-results/SKILL.md +109 -0
  2138. package/skills/autotest-skill/autotest-results/scripts/rf_results.py +419 -0
  2139. package/skills/autotest-skill/autotest-scenarios/SKILL.md +415 -0
  2140. package/skills/autotest-skill/autotest-scenarios/scripts/tc_import.py +299 -0
  2141. package/skills/autotest-skill/autotest-strategy/SKILL.md +632 -0
  2142. package/skills/autotest-skill/autotest-web/SKILL.md +880 -0
  2143. package/skills/autotest-skill/autotest-web-best-practices/SKILL.md +1217 -0
  2144. package/skills/autotest-skill/autotest-web-best-practices/examples/basic-web-test.robot +69 -0
  2145. package/skills/autotest-skill/autotest-web-best-practices/examples/form-handling.robot +162 -0
  2146. package/skills/autotest-skill/autotest-web-best-practices/examples/multi-window.robot +259 -0
  2147. package/skills/autotest-skill/autotest-web-best-practices/examples/wait-patterns.robot +229 -0
  2148. package/skills/autotest-skill/autotest-web-best-practices/references/frames-windows.md +434 -0
  2149. package/skills/autotest-skill/autotest-web-best-practices/references/javascript-execution.md +427 -0
  2150. package/skills/autotest-skill/autotest-web-best-practices/references/keywords-reference.md +604 -0
  2151. package/skills/autotest-skill/autotest-web-best-practices/references/locators.md +345 -0
  2152. package/skills/autotest-skill/autotest-web-best-practices/references/screenshots-logs.md +353 -0
  2153. package/skills/autotest-skill/autotest-web-best-practices/references/troubleshooting.md +380 -0
  2154. package/skills/autotest-skill/autotest-web-best-practices/references/waiting-strategies.md +355 -0
  2155. package/skills/autotest-skill/autotest-web-best-practices/references/webdriver-setup.md +430 -0
  2156. package/skills/autotest-skill/pack.yaml +33 -0
  2157. package/skills/autotest-skill/workflows/automation-test.yaml +80 -0
  2158. package/skills/sdlc/_shared/sonar-viettel/quality-gate.md +74 -0
  2159. package/skills/sdlc/_shared/sonar-viettel/sonar-viettel-gate.json +33 -0
  2160. package/skills/sdlc/_shared/sonar-viettel/sonar-viettel-profile.xml +1 -0
  2161. package/skills/sdlc/architecture/SKILL.md +216 -0
  2162. package/skills/sdlc/autotest-android/SKILL.md +1094 -0
  2163. package/skills/sdlc/autotest-android-best-practices/SKILL.md +976 -0
  2164. package/skills/sdlc/autotest-android-best-practices/examples/android-form-input.robot +101 -0
  2165. package/skills/sdlc/autotest-android-best-practices/examples/android-list-navigation.robot +77 -0
  2166. package/skills/sdlc/autotest-android-best-practices/examples/android-login.robot +85 -0
  2167. package/skills/sdlc/autotest-android-best-practices/references/android-specific.md +206 -0
  2168. package/skills/sdlc/autotest-android-best-practices/references/capabilities.md +183 -0
  2169. package/skills/sdlc/autotest-android-best-practices/references/device-farm.md +177 -0
  2170. package/skills/sdlc/autotest-android-best-practices/references/gestures.md +160 -0
  2171. package/skills/sdlc/autotest-android-best-practices/references/locators.md +192 -0
  2172. package/skills/sdlc/autotest-android-best-practices/references/troubleshooting.md +218 -0
  2173. package/skills/sdlc/autotest-api/SKILL.md +1267 -0
  2174. package/skills/sdlc/autotest-api-best-practices/SKILL.md +643 -0
  2175. package/skills/sdlc/autotest-api-best-practices/examples/api-auth.robot +166 -0
  2176. package/skills/sdlc/autotest-api-best-practices/examples/api-crud.robot +216 -0
  2177. package/skills/sdlc/autotest-api-best-practices/examples/api-error-cases.robot +179 -0
  2178. package/skills/sdlc/autotest-api-best-practices/references/authentication.md +191 -0
  2179. package/skills/sdlc/autotest-api-best-practices/references/data-driven.md +215 -0
  2180. package/skills/sdlc/autotest-api-best-practices/references/http-methods.md +146 -0
  2181. package/skills/sdlc/autotest-api-best-practices/references/response-validation.md +220 -0
  2182. package/skills/sdlc/autotest-api-best-practices/references/troubleshooting.md +171 -0
  2183. package/skills/sdlc/autotest-db/SKILL.md +465 -0
  2184. package/skills/sdlc/autotest-db/scripts/db_tunnel.py +78 -0
  2185. package/skills/sdlc/autotest-ios/SKILL.md +993 -0
  2186. package/skills/sdlc/autotest-ios-best-practices/SKILL.md +974 -0
  2187. package/skills/sdlc/autotest-ios-best-practices/examples/ios-form-input.robot +120 -0
  2188. package/skills/sdlc/autotest-ios-best-practices/examples/ios-list-navigation.robot +85 -0
  2189. package/skills/sdlc/autotest-ios-best-practices/examples/ios-login.robot +103 -0
  2190. package/skills/sdlc/autotest-ios-best-practices/references/capabilities.md +187 -0
  2191. package/skills/sdlc/autotest-ios-best-practices/references/device-farm.md +180 -0
  2192. package/skills/sdlc/autotest-ios-best-practices/references/gestures.md +191 -0
  2193. package/skills/sdlc/autotest-ios-best-practices/references/ios-specific.md +308 -0
  2194. package/skills/sdlc/autotest-ios-best-practices/references/locators.md +198 -0
  2195. package/skills/sdlc/autotest-ios-best-practices/references/troubleshooting.md +271 -0
  2196. package/skills/sdlc/autotest-jenkins/SKILL.md +1833 -0
  2197. package/skills/sdlc/autotest-mcp-assist/SKILL.md +198 -0
  2198. package/skills/sdlc/autotest-project-docs/SKILL.md +344 -0
  2199. package/skills/sdlc/autotest-project-docs/scripts/confluence_fetch.py +415 -0
  2200. package/skills/sdlc/autotest-results/SKILL.md +109 -0
  2201. package/skills/sdlc/autotest-results/scripts/rf_results.py +419 -0
  2202. package/skills/sdlc/autotest-scenarios/SKILL.md +415 -0
  2203. package/skills/sdlc/autotest-scenarios/scripts/tc_import.py +299 -0
  2204. package/skills/sdlc/autotest-strategy/SKILL.md +632 -0
  2205. package/skills/sdlc/autotest-web/SKILL.md +880 -0
  2206. package/skills/sdlc/autotest-web-best-practices/SKILL.md +1217 -0
  2207. package/skills/sdlc/autotest-web-best-practices/examples/basic-web-test.robot +69 -0
  2208. package/skills/sdlc/autotest-web-best-practices/examples/form-handling.robot +162 -0
  2209. package/skills/sdlc/autotest-web-best-practices/examples/multi-window.robot +259 -0
  2210. package/skills/sdlc/autotest-web-best-practices/examples/wait-patterns.robot +229 -0
  2211. package/skills/sdlc/autotest-web-best-practices/references/frames-windows.md +434 -0
  2212. package/skills/sdlc/autotest-web-best-practices/references/javascript-execution.md +427 -0
  2213. package/skills/sdlc/autotest-web-best-practices/references/keywords-reference.md +604 -0
  2214. package/skills/sdlc/autotest-web-best-practices/references/locators.md +345 -0
  2215. package/skills/sdlc/autotest-web-best-practices/references/screenshots-logs.md +353 -0
  2216. package/skills/sdlc/autotest-web-best-practices/references/troubleshooting.md +380 -0
  2217. package/skills/sdlc/autotest-web-best-practices/references/waiting-strategies.md +355 -0
  2218. package/skills/sdlc/autotest-web-best-practices/references/webdriver-setup.md +430 -0
  2219. package/skills/sdlc/bmad-advanced-elicitation/SKILL.md +136 -0
  2220. package/skills/sdlc/bmad-advanced-elicitation/methods.csv +51 -0
  2221. package/skills/sdlc/bmad-agent-analyst/SKILL.md +59 -0
  2222. package/skills/sdlc/bmad-agent-analyst/bmad-skill-manifest.yaml +11 -0
  2223. package/skills/sdlc/bmad-brainstorming/SKILL.md +6 -0
  2224. package/skills/sdlc/bmad-brainstorming/brain-methods.csv +62 -0
  2225. package/skills/sdlc/bmad-brainstorming/steps/step-01-session-setup.md +214 -0
  2226. package/skills/sdlc/bmad-brainstorming/steps/step-01b-continue.md +124 -0
  2227. package/skills/sdlc/bmad-brainstorming/steps/step-02a-user-selected.md +229 -0
  2228. package/skills/sdlc/bmad-brainstorming/steps/step-02b-ai-recommended.md +239 -0
  2229. package/skills/sdlc/bmad-brainstorming/steps/step-02c-random-selection.md +211 -0
  2230. package/skills/sdlc/bmad-brainstorming/steps/step-02d-progressive-flow.md +266 -0
  2231. package/skills/sdlc/bmad-brainstorming/steps/step-03-technique-execution.md +401 -0
  2232. package/skills/sdlc/bmad-brainstorming/steps/step-04-idea-organization.md +305 -0
  2233. package/skills/sdlc/bmad-brainstorming/template.md +15 -0
  2234. package/skills/sdlc/bmad-brainstorming/workflow.md +53 -0
  2235. package/skills/sdlc/bmad-check-implementation-readiness/SKILL.md +6 -0
  2236. package/skills/sdlc/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
  2237. package/skills/sdlc/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
  2238. package/skills/sdlc/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
  2239. package/skills/sdlc/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
  2240. package/skills/sdlc/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
  2241. package/skills/sdlc/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +126 -0
  2242. package/skills/sdlc/bmad-check-implementation-readiness/templates/readiness-report-template.md +4 -0
  2243. package/skills/sdlc/bmad-check-implementation-readiness/workflow.md +47 -0
  2244. package/skills/sdlc/bmad-checkpoint-preview/SKILL.md +29 -0
  2245. package/skills/sdlc/bmad-checkpoint-preview/generate-trail.md +38 -0
  2246. package/skills/sdlc/bmad-checkpoint-preview/step-01-orientation.md +105 -0
  2247. package/skills/sdlc/bmad-checkpoint-preview/step-02-walkthrough.md +89 -0
  2248. package/skills/sdlc/bmad-checkpoint-preview/step-03-detail-pass.md +106 -0
  2249. package/skills/sdlc/bmad-checkpoint-preview/step-04-testing.md +74 -0
  2250. package/skills/sdlc/bmad-checkpoint-preview/step-05-wrapup.md +24 -0
  2251. package/skills/sdlc/bmad-code-review/SKILL.md +6 -0
  2252. package/skills/sdlc/bmad-code-review/steps/step-01-gather-context.md +85 -0
  2253. package/skills/sdlc/bmad-code-review/steps/step-02-review.md +34 -0
  2254. package/skills/sdlc/bmad-code-review/steps/step-03-triage.md +49 -0
  2255. package/skills/sdlc/bmad-code-review/steps/step-04-present.md +129 -0
  2256. package/skills/sdlc/bmad-code-review/workflow.md +55 -0
  2257. package/skills/sdlc/bmad-correct-course/SKILL.md +6 -0
  2258. package/skills/sdlc/bmad-correct-course/checklist.md +288 -0
  2259. package/skills/sdlc/bmad-correct-course/workflow.md +267 -0
  2260. package/skills/sdlc/bmad-create-architecture/SKILL.md +6 -0
  2261. package/skills/sdlc/bmad-create-architecture/architecture-decision-template.md +12 -0
  2262. package/skills/sdlc/bmad-create-architecture/data/domain-complexity.csv +13 -0
  2263. package/skills/sdlc/bmad-create-architecture/data/project-types.csv +7 -0
  2264. package/skills/sdlc/bmad-create-architecture/steps/step-01-init.md +153 -0
  2265. package/skills/sdlc/bmad-create-architecture/steps/step-01b-continue.md +173 -0
  2266. package/skills/sdlc/bmad-create-architecture/steps/step-02-context.md +224 -0
  2267. package/skills/sdlc/bmad-create-architecture/steps/step-03-starter.md +329 -0
  2268. package/skills/sdlc/bmad-create-architecture/steps/step-04-decisions.md +318 -0
  2269. package/skills/sdlc/bmad-create-architecture/steps/step-05-patterns.md +359 -0
  2270. package/skills/sdlc/bmad-create-architecture/steps/step-06-structure.md +379 -0
  2271. package/skills/sdlc/bmad-create-architecture/steps/step-07-validation.md +359 -0
  2272. package/skills/sdlc/bmad-create-architecture/steps/step-08-complete.md +76 -0
  2273. package/skills/sdlc/bmad-create-architecture/workflow.md +32 -0
  2274. package/skills/sdlc/bmad-create-epics-and-stories/SKILL.md +6 -0
  2275. package/skills/sdlc/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +255 -0
  2276. package/skills/sdlc/bmad-create-epics-and-stories/steps/step-02-design-epics.md +212 -0
  2277. package/skills/sdlc/bmad-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
  2278. package/skills/sdlc/bmad-create-epics-and-stories/steps/step-04-final-validation.md +131 -0
  2279. package/skills/sdlc/bmad-create-epics-and-stories/templates/epics-template.md +61 -0
  2280. package/skills/sdlc/bmad-create-epics-and-stories/workflow.md +51 -0
  2281. package/skills/sdlc/bmad-create-prd/SKILL.md +6 -0
  2282. package/skills/sdlc/bmad-create-prd/data/domain-complexity.csv +15 -0
  2283. package/skills/sdlc/bmad-create-prd/data/prd-purpose.md +197 -0
  2284. package/skills/sdlc/bmad-create-prd/data/project-types.csv +11 -0
  2285. package/skills/sdlc/bmad-create-prd/steps-c/step-01-init.md +178 -0
  2286. package/skills/sdlc/bmad-create-prd/steps-c/step-01b-continue.md +161 -0
  2287. package/skills/sdlc/bmad-create-prd/steps-c/step-02-discovery.md +208 -0
  2288. package/skills/sdlc/bmad-create-prd/steps-c/step-02b-vision.md +142 -0
  2289. package/skills/sdlc/bmad-create-prd/steps-c/step-02c-executive-summary.md +158 -0
  2290. package/skills/sdlc/bmad-create-prd/steps-c/step-03-success.md +214 -0
  2291. package/skills/sdlc/bmad-create-prd/steps-c/step-04-journeys.md +201 -0
  2292. package/skills/sdlc/bmad-create-prd/steps-c/step-05-domain.md +194 -0
  2293. package/skills/sdlc/bmad-create-prd/steps-c/step-06-innovation.md +211 -0
  2294. package/skills/sdlc/bmad-create-prd/steps-c/step-07-project-type.md +222 -0
  2295. package/skills/sdlc/bmad-create-prd/steps-c/step-08-scoping.md +216 -0
  2296. package/skills/sdlc/bmad-create-prd/steps-c/step-09-functional.md +219 -0
  2297. package/skills/sdlc/bmad-create-prd/steps-c/step-10-nonfunctional.md +230 -0
  2298. package/skills/sdlc/bmad-create-prd/steps-c/step-11-polish.md +221 -0
  2299. package/skills/sdlc/bmad-create-prd/steps-c/step-12-complete.md +115 -0
  2300. package/skills/sdlc/bmad-create-prd/templates/prd-template.md +10 -0
  2301. package/skills/sdlc/bmad-create-prd/workflow.md +61 -0
  2302. package/skills/sdlc/bmad-domain-research/SKILL.md +6 -0
  2303. package/skills/sdlc/bmad-domain-research/domain-steps/step-01-init.md +137 -0
  2304. package/skills/sdlc/bmad-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
  2305. package/skills/sdlc/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
  2306. package/skills/sdlc/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
  2307. package/skills/sdlc/bmad-domain-research/domain-steps/step-05-technical-trends.md +234 -0
  2308. package/skills/sdlc/bmad-domain-research/domain-steps/step-06-research-synthesis.md +444 -0
  2309. package/skills/sdlc/bmad-domain-research/research.template.md +29 -0
  2310. package/skills/sdlc/bmad-domain-research/workflow.md +51 -0
  2311. package/skills/sdlc/bmad-party-mode/SKILL.md +125 -0
  2312. package/skills/sdlc/bmad-prfaq/SKILL.md +96 -0
  2313. package/skills/sdlc/bmad-prfaq/agents/artifact-analyzer.md +60 -0
  2314. package/skills/sdlc/bmad-prfaq/agents/web-researcher.md +49 -0
  2315. package/skills/sdlc/bmad-prfaq/assets/prfaq-template.md +62 -0
  2316. package/skills/sdlc/bmad-prfaq/bmad-manifest.json +16 -0
  2317. package/skills/sdlc/bmad-prfaq/references/customer-faq.md +55 -0
  2318. package/skills/sdlc/bmad-prfaq/references/internal-faq.md +51 -0
  2319. package/skills/sdlc/bmad-prfaq/references/press-release.md +60 -0
  2320. package/skills/sdlc/bmad-prfaq/references/verdict.md +79 -0
  2321. package/skills/sdlc/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
  2322. package/skills/sdlc/bmad-qa-generate-e2e-tests/checklist.md +33 -0
  2323. package/skills/sdlc/bmad-qa-generate-e2e-tests/workflow.md +136 -0
  2324. package/skills/sdlc/bmad-review-adversarial-general/SKILL.md +37 -0
  2325. package/skills/sdlc/bmad-review-edge-case-hunter/SKILL.md +67 -0
  2326. package/skills/sdlc/bmad-validate-prd/SKILL.md +6 -0
  2327. package/skills/sdlc/bmad-validate-prd/data/domain-complexity.csv +15 -0
  2328. package/skills/sdlc/bmad-validate-prd/data/prd-purpose.md +197 -0
  2329. package/skills/sdlc/bmad-validate-prd/data/project-types.csv +11 -0
  2330. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
  2331. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
  2332. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
  2333. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
  2334. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
  2335. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
  2336. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
  2337. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
  2338. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
  2339. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
  2340. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
  2341. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
  2342. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
  2343. package/skills/sdlc/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
  2344. package/skills/sdlc/bmad-validate-prd/workflow.md +61 -0
  2345. package/skills/sdlc/diagnose/SKILL.md +117 -0
  2346. package/skills/sdlc/discovery/SKILL.md +197 -0
  2347. package/skills/sdlc/drift-check/SKILL.md +93 -0
  2348. package/skills/sdlc/drift-check/lib/resolve-drift-edges.mjs +144 -0
  2349. package/skills/sdlc/feature-complete/SKILL.md +159 -0
  2350. package/skills/sdlc/freso-domain-sample/SKILL.md +35 -0
  2351. package/skills/sdlc/freso-domain-sample/agricultural-marketplace-system-overview.md +103 -0
  2352. package/skills/sdlc/freso-domain-sample/api-reference.md +39 -0
  2353. package/skills/sdlc/freso-domain-sample/farm/product-management/business-scenario.md +67 -0
  2354. package/skills/sdlc/freso-domain-sample/farm/product-management/detail-design.md +190 -0
  2355. package/skills/sdlc/freso-domain-sample/global-data.md +37 -0
  2356. package/skills/sdlc/freso-domain-sample/restaurant/home-page/product-listing-page-by-category/business-scenario.md +120 -0
  2357. package/skills/sdlc/freso-domain-sample/restaurant/home-page/product-listing-page-by-category/detail-design.md +100 -0
  2358. package/skills/sdlc/grill-me/SKILL.md +10 -0
  2359. package/skills/sdlc/hotfix-analyze/SKILL.md +198 -0
  2360. package/skills/sdlc/hotfix-green/SKILL.md +101 -0
  2361. package/skills/sdlc/hotfix-red/SKILL.md +96 -0
  2362. package/skills/sdlc/hotfix-review/SKILL.md +151 -0
  2363. package/skills/sdlc/implement/SKILL.md +267 -0
  2364. package/skills/sdlc/improve-codebase-architecture/SKILL.md +70 -0
  2365. package/skills/sdlc/init/SKILL.md +195 -0
  2366. package/skills/sdlc/install-deps.mjs +145 -0
  2367. package/skills/sdlc/onboard-code/SKILL.md +193 -0
  2368. package/skills/sdlc/onboard-docs/SKILL.md +121 -0
  2369. package/skills/sdlc/onboard-docs/convert.py +199 -0
  2370. package/skills/sdlc/onboarding/SKILL.md +57 -0
  2371. package/skills/sdlc/pack.yaml +95 -0
  2372. package/skills/sdlc/prd/SKILL.md +181 -0
  2373. package/skills/sdlc/review/SKILL.md +236 -0
  2374. package/skills/sdlc/sdlc-e2e/SKILL.md +56 -0
  2375. package/skills/sdlc/sdlc-e2e/rf-requirements.txt +39 -0
  2376. package/skills/sdlc/sdlc-e2e/scripts/vsaf_e2e_bridge.py +107 -0
  2377. package/skills/sdlc/sdlc-health/SKILL.md +167 -0
  2378. package/skills/sdlc/setup/SKILL.md +162 -0
  2379. package/skills/sdlc/ship/SKILL.md +279 -0
  2380. package/skills/sdlc/srs/SKILL.md +139 -0
  2381. package/skills/sdlc/tdd/SKILL.md +107 -0
  2382. package/skills/sdlc/test-design/SKILL.md +130 -0
  2383. package/skills/sdlc/validate-srs/SKILL.md +10 -0
  2384. package/skills/sdlc/validate-srs/data/domain-checklists/insurance.yaml +110 -0
  2385. package/skills/sdlc/validate-srs/data/grep-patterns-srs.yaml +158 -0
  2386. package/skills/sdlc/validate-srs/data/srs-review-glossary.md +237 -0
  2387. package/skills/sdlc/validate-srs/steps-v/step-v-01-discovery.md +280 -0
  2388. package/skills/sdlc/validate-srs/steps-v/step-v-02-business-alignment.md +351 -0
  2389. package/skills/sdlc/validate-srs/steps-v/step-v-03-completeness.md +353 -0
  2390. package/skills/sdlc/validate-srs/steps-v/step-v-04-consistency.md +352 -0
  2391. package/skills/sdlc/validate-srs/steps-v/step-v-05-quality.md +347 -0
  2392. package/skills/sdlc/validate-srs/steps-v/step-v-06-system-nfr.md +217 -0
  2393. package/skills/sdlc/validate-srs/steps-v/step-v-07-delivery-readiness.md +288 -0
  2394. package/skills/sdlc/validate-srs/steps-v/step-v-08-risk-analysis.md +283 -0
  2395. package/skills/sdlc/validate-srs/steps-v/step-v-09-user-impact.md +262 -0
  2396. package/skills/sdlc/validate-srs/steps-v/step-v-10-report.md +308 -0
  2397. package/skills/sdlc/validate-srs/workflow.md +269 -0
  2398. package/skills/sdlc/vsaf/SKILL.md +102 -0
  2399. package/skills/sdlc/workflows/automation-test.yaml +80 -0
  2400. package/skills/sdlc/workflows/drift-check-only.yaml +7 -0
  2401. package/skills/sdlc/workflows/hotfix-tdd.yaml +22 -0
  2402. package/skills/sdlc/workflows/hotfix.yaml +36 -0
  2403. package/skills/sdlc/workflows/master-sdlc-to-srs.yaml +48 -0
  2404. package/skills/sdlc/workflows/master-sdlc.yaml +102 -0
  2405. package/skills/sdlc/workflows/onboarding.yaml +9 -0
  2406. package/skills/sdlc/workflows/sdlc-build.yaml +18 -0
  2407. package/skills/sdlc/workflows/sdlc-design.yaml +12 -0
  2408. package/skills/sdlc/workflows/sdlc-qa.yaml +17 -0
  2409. package/skills/sdlc/workflows/sdlc-testcase.yaml +7 -0
  2410. package/skills/sdlc/workflows/sdlc-thinking.yaml +12 -0
  2411. package/skills/sdlc/write-srs/SKILL.md +50 -0
  2412. package/skills/sdlc/write-srs/examples/srs-good-bad.md +89 -0
  2413. package/skills/sdlc/write-srs/srs-feature-template.md +844 -0
  2414. package/skills/sdlc/write-srs/srs-system-template.md +540 -0
  2415. package/skills/sdlc/write-srs/workflow.md +331 -0
  2416. package/skills/sdlc/zoom-out/SKILL.md +7 -0
  2417. package/skills/vds-skill/_shared/credentials.sh +79 -0
  2418. package/skills/vds-skill/create-bitbucket-pr/SKILL.md +73 -0
  2419. package/skills/vds-skill/create-bitbucket-pr/scripts/create-pr.sh +105 -0
  2420. package/skills/vds-skill/create-jira-epic/SKILL.md +73 -0
  2421. package/skills/vds-skill/create-jira-epic/scripts/create-epic.sh +113 -0
  2422. package/skills/vds-skill/install-deps.mjs +299 -0
  2423. package/skills/vds-skill/pack.yaml +24 -0
  2424. package/skills/vds-skill/pull/SKILL.md +38 -0
  2425. package/skills/vds-skill/pull/scripts/pull.sh +52 -0
  2426. package/skills/vds-skill/push-prd/SKILL.md +246 -0
  2427. package/skills/vds-skill/push-srs/SKILL.md +135 -0
  2428. package/skills/vds-skill/search-confluence/SKILL.md +73 -0
  2429. package/skills/vds-skill/search-confluence/scripts/search.sh +128 -0
  2430. package/skills/vds-skill/vds-scripts/.claude/phase7-CLOSURE.md +100 -0
  2431. package/skills/vds-skill/vds-scripts/.dockerignore +62 -0
  2432. package/skills/vds-skill/vds-scripts/.github/ISSUE_TEMPLATE/cli-change.md +92 -0
  2433. package/skills/vds-skill/vds-scripts/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +48 -0
  2434. package/skills/vds-skill/vds-scripts/.github/workflows/chaos-smoke.yml +266 -0
  2435. package/skills/vds-skill/vds-scripts/.github/workflows/confluence-sync.yml +44 -0
  2436. package/skills/vds-skill/vds-scripts/.github/workflows/docs-confluence-evidence.yml +170 -0
  2437. package/skills/vds-skill/vds-scripts/.github/workflows/docs-quality.yml +59 -0
  2438. package/skills/vds-skill/vds-scripts/.github/workflows/lint-and-test.yml +90 -0
  2439. package/skills/vds-skill/vds-scripts/.github/workflows/scheduler-load-smoke.yml +104 -0
  2440. package/skills/vds-skill/vds-scripts/.github/workflows/telegram-bridge-ci.yml +131 -0
  2441. package/skills/vds-skill/vds-scripts/.graphifyignore +29 -0
  2442. package/skills/vds-skill/vds-scripts/.importlinter +86 -0
  2443. package/skills/vds-skill/vds-scripts/.mcp.json +11 -0
  2444. package/skills/vds-skill/vds-scripts/.pre-commit-config.yaml +62 -0
  2445. package/skills/vds-skill/vds-scripts/.ruffignore +3 -0
  2446. package/skills/vds-skill/vds-scripts/.secrets.baseline +133 -0
  2447. package/skills/vds-skill/vds-scripts/AGENTS.md +250 -0
  2448. package/skills/vds-skill/vds-scripts/AGENTS.vi.md +92 -0
  2449. package/skills/vds-skill/vds-scripts/ECOSYSTEM-CHANGELOG.md +52 -0
  2450. package/skills/vds-skill/vds-scripts/ECOSYSTEM-DOCS.md +602 -0
  2451. package/skills/vds-skill/vds-scripts/ECOSYSTEM_ALIGNMENT.md +133 -0
  2452. package/skills/vds-skill/vds-scripts/Makefile +119 -0
  2453. package/skills/vds-skill/vds-scripts/README.md +103 -0
  2454. package/skills/vds-skill/vds-scripts/bitbucket_manifest_mapping.toml +34 -0
  2455. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +258 -0
  2456. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +393 -0
  2457. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +61 -0
  2458. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/FEATURES.md +908 -0
  2459. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/README.md +817 -0
  2460. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/pyproject.toml +49 -0
  2461. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +50 -0
  2462. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +641 -0
  2463. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +2271 -0
  2464. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +2693 -0
  2465. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +186 -0
  2466. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +34 -0
  2467. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +185 -0
  2468. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/parsers.py +113 -0
  2469. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +244 -0
  2470. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/repo_ops.py +325 -0
  2471. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/__init__.py +8 -0
  2472. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/conftest.py +65 -0
  2473. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +155 -0
  2474. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +505 -0
  2475. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +172 -0
  2476. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +113 -0
  2477. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli_archive.py +122 -0
  2478. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli_clone.py +131 -0
  2479. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client.py +207 -0
  2480. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_archive.py +73 -0
  2481. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +101 -0
  2482. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +180 -0
  2483. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +33 -0
  2484. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +193 -0
  2485. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +163 -0
  2486. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +171 -0
  2487. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +118 -0
  2488. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +155 -0
  2489. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code.py +98 -0
  2490. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +279 -0
  2491. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +334 -0
  2492. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +149 -0
  2493. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_config.py +297 -0
  2494. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +352 -0
  2495. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_errors.py +67 -0
  2496. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +352 -0
  2497. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +203 -0
  2498. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +262 -0
  2499. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +265 -0
  2500. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +206 -0
  2501. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +336 -0
  2502. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_archive.py +169 -0
  2503. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_clone.py +115 -0
  2504. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_parsing.py +149 -0
  2505. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +336 -0
  2506. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +266 -0
  2507. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +188 -0
  2508. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +234 -0
  2509. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/unit/__init__.py +0 -0
  2510. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/unit/test_parsers.py +254 -0
  2511. package/skills/vds-skill/vds-scripts/brd_orchestrator/README.md +29 -0
  2512. package/skills/vds-skill/vds-scripts/brd_orchestrator/pyproject.toml +63 -0
  2513. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/__init__.py +17 -0
  2514. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/cli.py +187 -0
  2515. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/validator.py +121 -0
  2516. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/__init__.py +0 -0
  2517. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/test_cli.py +62 -0
  2518. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/test_validator.py +33 -0
  2519. package/skills/vds-skill/vds-scripts/code/code_evidence_pack.json +435 -0
  2520. package/skills/vds-skill/vds-scripts/confluence_orchestrator/Dockerfile +19 -0
  2521. package/skills/vds-skill/vds-scripts/confluence_orchestrator/README.md +479 -0
  2522. package/skills/vds-skill/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +127 -0
  2523. package/skills/vds-skill/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +108 -0
  2524. package/skills/vds-skill/vds-scripts/confluence_orchestrator/pyproject.toml +50 -0
  2525. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +56 -0
  2526. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/async_client.py +100 -0
  2527. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +3160 -0
  2528. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +215 -0
  2529. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +368 -0
  2530. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +144 -0
  2531. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +1833 -0
  2532. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +44 -0
  2533. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +111 -0
  2534. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +1850 -0
  2535. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +166 -0
  2536. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/protocols.py +61 -0
  2537. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +78 -0
  2538. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +122 -0
  2539. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree_copier.py +431 -0
  2540. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +203 -0
  2541. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +299 -0
  2542. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_png_attachments.py +299 -0
  2543. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/conftest.py +46 -0
  2544. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +252 -0
  2545. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +193 -0
  2546. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_async_client.py +104 -0
  2547. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +246 -0
  2548. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_cli.py +716 -0
  2549. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_config.py +130 -0
  2550. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content.py +192 -0
  2551. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +27 -0
  2552. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content_labels.py +94 -0
  2553. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +2252 -0
  2554. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_degraded_write_safety.py +176 -0
  2555. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +225 -0
  2556. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_errors.py +75 -0
  2557. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing.py +73 -0
  2558. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +37 -0
  2559. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +44 -0
  2560. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +49 -0
  2561. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_export.py +231 -0
  2562. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_history.py +217 -0
  2563. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_http.py +375 -0
  2564. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +93 -0
  2565. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_reporting.py +24 -0
  2566. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +36 -0
  2567. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_space_management.py +236 -0
  2568. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +384 -0
  2569. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_tree_copier.py +644 -0
  2570. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_tree_copier_remap.py +289 -0
  2571. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +387 -0
  2572. package/skills/vds-skill/vds-scripts/diagram_generator/README.md +663 -0
  2573. package/skills/vds-skill/vds-scripts/diagram_generator/ci_validate.sh +16 -0
  2574. 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
  2575. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-component.puml +23 -0
  2576. 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
  2577. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-sequence.puml +21 -0
  2578. 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
  2579. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-usecase.puml +14 -0
  2580. package/skills/vds-skill/vds-scripts/diagram_generator/examples/github-actions-validate.yml +39 -0
  2581. package/skills/vds-skill/vds-scripts/diagram_generator/generate_all_diagrams.py +827 -0
  2582. package/skills/vds-skill/vds-scripts/diagram_generator/generate_insurance_c4_diagrams.py +261 -0
  2583. package/skills/vds-skill/vds-scripts/diagram_generator/generate_insurance_c4_quick.py +486 -0
  2584. package/skills/vds-skill/vds-scripts/diagram_generator/pyproject.toml +28 -0
  2585. package/skills/vds-skill/vds-scripts/diagram_generator/render_png.py +59 -0
  2586. package/skills/vds-skill/vds-scripts/diagram_generator/src/vds_diagram_generator/__init__.py +3 -0
  2587. package/skills/vds-skill/vds-scripts/diagram_generator/src/vds_diagram_generator/cli.py +50 -0
  2588. package/skills/vds-skill/vds-scripts/diagram_generator/test_c4_hierarchical.py +142 -0
  2589. package/skills/vds-skill/vds-scripts/diagram_generator/test_c4_quick.py +131 -0
  2590. package/skills/vds-skill/vds-scripts/diagram_generator/tests/__init__.py +0 -0
  2591. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_analyzer_completeness.py +260 -0
  2592. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_c4_syntax_correctness.py +138 -0
  2593. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_component_coverage.py +182 -0
  2594. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_mermaid_output.py +80 -0
  2595. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_png_generation.py +112 -0
  2596. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_scenario_templates.py +15 -0
  2597. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_sequence_accuracy.py +93 -0
  2598. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_structurizr_export.py +177 -0
  2599. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_style_consistency.py +174 -0
  2600. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_usecase_generator.py +201 -0
  2601. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_usecase_integration.py +124 -0
  2602. package/skills/vds-skill/vds-scripts/docker/.dockerignore +38 -0
  2603. package/skills/vds-skill/vds-scripts/docker/ADR.md +392 -0
  2604. package/skills/vds-skill/vds-scripts/docker/Dockerfile +68 -0
  2605. package/skills/vds-skill/vds-scripts/docker/MIGRATION.md +453 -0
  2606. package/skills/vds-skill/vds-scripts/docker/README.md +347 -0
  2607. package/skills/vds-skill/vds-scripts/docker/ROLLBACK.md +596 -0
  2608. package/skills/vds-skill/vds-scripts/docker/compose.phase2-verification.yml +31 -0
  2609. package/skills/vds-skill/vds-scripts/docker/docker-compose.cli.yml +206 -0
  2610. package/skills/vds-skill/vds-scripts/docker/docker-compose.infra.yml +276 -0
  2611. package/skills/vds-skill/vds-scripts/docker/docker-compose.services.yml +425 -0
  2612. package/skills/vds-skill/vds-scripts/docker/infrastructure/init-schemas.sql +177 -0
  2613. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/pgbouncer.ini +75 -0
  2614. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/userlist.txt +50 -0
  2615. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/userlist.txt.template +36 -0
  2616. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/.gitkeep +0 -0
  2617. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/PREFLIGHT.md +132 -0
  2618. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/README.md +84 -0
  2619. package/skills/vds-skill/vds-scripts/docs/.confluence.yaml +157 -0
  2620. package/skills/vds-skill/vds-scripts/docs/.freshness.yaml +54 -0
  2621. package/skills/vds-skill/vds-scripts/docs/README.md +235 -0
  2622. package/skills/vds-skill/vds-scripts/docs/agents/README.md +33 -0
  2623. package/skills/vds-skill/vds-scripts/docs/agents/explanation/data-flow.md +132 -0
  2624. package/skills/vds-skill/vds-scripts/docs/agents/explanation/development-roadmap.md +49 -0
  2625. package/skills/vds-skill/vds-scripts/docs/agents/explanation/features-overview.md +62 -0
  2626. package/skills/vds-skill/vds-scripts/docs/agents/explanation/index.md +36 -0
  2627. package/skills/vds-skill/vds-scripts/docs/agents/explanation/runtime-verification-and-gap-reporting.md +127 -0
  2628. package/skills/vds-skill/vds-scripts/docs/agents/explanation/system-architecture.md +139 -0
  2629. package/skills/vds-skill/vds-scripts/docs/agents/explanation/whats-new.md +75 -0
  2630. package/skills/vds-skill/vds-scripts/docs/agents/explanation/who-ecosystem-introduction.md +65 -0
  2631. package/skills/vds-skill/vds-scripts/docs/agents/explanation/who-ecosystem-model.md +41 -0
  2632. package/skills/vds-skill/vds-scripts/docs/agents/how-to/02-using-vds-ai-memory.md +98 -0
  2633. package/skills/vds-skill/vds-scripts/docs/agents/how-to/03-memory-cross-agent.md +241 -0
  2634. package/skills/vds-skill/vds-scripts/docs/agents/how-to/04-using-progress-reports.md +240 -0
  2635. package/skills/vds-skill/vds-scripts/docs/agents/how-to/08-semantic-search.md +46 -0
  2636. package/skills/vds-skill/vds-scripts/docs/agents/how-to/apply-phase3-migration.md +148 -0
  2637. package/skills/vds-skill/vds-scripts/docs/agents/how-to/choose-the-right-command-or-skill.md +34 -0
  2638. package/skills/vds-skill/vds-scripts/docs/agents/how-to/contribute-new-orchestrator.md +149 -0
  2639. package/skills/vds-skill/vds-scripts/docs/agents/how-to/decision-tree.md +63 -0
  2640. package/skills/vds-skill/vds-scripts/docs/agents/how-to/first-audit-run.md +83 -0
  2641. package/skills/vds-skill/vds-scripts/docs/agents/how-to/index.md +49 -0
  2642. package/skills/vds-skill/vds-scripts/docs/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +314 -0
  2643. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +165 -0
  2644. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +138 -0
  2645. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +130 -0
  2646. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +142 -0
  2647. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +140 -0
  2648. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +135 -0
  2649. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-all-project-preparation.md +211 -0
  2650. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-bounded-parallel-analysis.md +123 -0
  2651. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-confluence-upload-recovery.md +204 -0
  2652. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase132-department-preparation.md +144 -0
  2653. package/skills/vds-skill/vds-scripts/docs/agents/how-to/run-ecosystem-daily-report.md +213 -0
  2654. package/skills/vds-skill/vds-scripts/docs/agents/how-to/tips-and-tricks.md +138 -0
  2655. package/skills/vds-skill/vds-scripts/docs/agents/how-to/troubleshooting-guide.md +221 -0
  2656. package/skills/vds-skill/vds-scripts/docs/agents/reference/agent-operational-contract.md +162 -0
  2657. package/skills/vds-skill/vds-scripts/docs/agents/reference/alignment-phase179-report.md +144 -0
  2658. package/skills/vds-skill/vds-scripts/docs/agents/reference/audit-triage-playbook.md +256 -0
  2659. package/skills/vds-skill/vds-scripts/docs/agents/reference/backup-restore.md +132 -0
  2660. package/skills/vds-skill/vds-scripts/docs/agents/reference/bitbucket-orchestrator.md +56 -0
  2661. package/skills/vds-skill/vds-scripts/docs/agents/reference/brd-orchestrator.md +52 -0
  2662. package/skills/vds-skill/vds-scripts/docs/agents/reference/capability-coverage-review.md +51 -0
  2663. package/skills/vds-skill/vds-scripts/docs/agents/reference/ci-workflows.md +98 -0
  2664. package/skills/vds-skill/vds-scripts/docs/agents/reference/circular-dependency-orchestrator.md +55 -0
  2665. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-commands.md +583 -0
  2666. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-development-standards.md +41 -0
  2667. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-help-matrix.md +84 -0
  2668. package/skills/vds-skill/vds-scripts/docs/agents/reference/common-errors.md +126 -0
  2669. package/skills/vds-skill/vds-scripts/docs/agents/reference/configuration-reference.md +128 -0
  2670. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-orchestrator.md +56 -0
  2671. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-sync-target.md +111 -0
  2672. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-sync.md +46 -0
  2673. package/skills/vds-skill/vds-scripts/docs/agents/reference/db-query-orchestrator.md +93 -0
  2674. package/skills/vds-skill/vds-scripts/docs/agents/reference/diagrams-orchestrator.md +52 -0
  2675. package/skills/vds-skill/vds-scripts/docs/agents/reference/ecosystem-daily-report.md +229 -0
  2676. package/skills/vds-skill/vds-scripts/docs/agents/reference/elastic-orchestrator.md +57 -0
  2677. package/skills/vds-skill/vds-scripts/docs/agents/reference/env-git-helper.md +216 -0
  2678. package/skills/vds-skill/vds-scripts/docs/agents/reference/evolution-orchestrator.md +113 -0
  2679. package/skills/vds-skill/vds-scripts/docs/agents/reference/excel-orchestrator.md +51 -0
  2680. package/skills/vds-skill/vds-scripts/docs/agents/reference/git-orchestrator.md +62 -0
  2681. package/skills/vds-skill/vds-scripts/docs/agents/reference/google-sheets-orchestrator.md +51 -0
  2682. package/skills/vds-skill/vds-scripts/docs/agents/reference/grafana-orchestrator.md +52 -0
  2683. package/skills/vds-skill/vds-scripts/docs/agents/reference/hexagonal-orchestrator.md +64 -0
  2684. package/skills/vds-skill/vds-scripts/docs/agents/reference/index.md +36 -0
  2685. package/skills/vds-skill/vds-scripts/docs/agents/reference/infrastructure-v2.15.md +67 -0
  2686. package/skills/vds-skill/vds-scripts/docs/agents/reference/intellij-orchestrator.md +50 -0
  2687. package/skills/vds-skill/vds-scripts/docs/agents/reference/jira-orchestrator.md +60 -0
  2688. package/skills/vds-skill/vds-scripts/docs/agents/reference/links-orchestrator.md +57 -0
  2689. package/skills/vds-skill/vds-scripts/docs/agents/reference/lint-cli.md +99 -0
  2690. package/skills/vds-skill/vds-scripts/docs/agents/reference/lsp-orchestrator.md +51 -0
  2691. package/skills/vds-skill/vds-scripts/docs/agents/reference/markdown-orchestrator.md +53 -0
  2692. package/skills/vds-skill/vds-scripts/docs/agents/reference/mcp-orchestrator.md +88 -0
  2693. package/skills/vds-skill/vds-scripts/docs/agents/reference/memory-orchestrator.md +53 -0
  2694. package/skills/vds-skill/vds-scripts/docs/agents/reference/metabase-orchestrator.md +51 -0
  2695. package/skills/vds-skill/vds-scripts/docs/agents/reference/migration-playbook.md +71 -0
  2696. package/skills/vds-skill/vds-scripts/docs/agents/reference/multi-agent-orchestrator.md +52 -0
  2697. package/skills/vds-skill/vds-scripts/docs/agents/reference/openapi-orchestrator.md +57 -0
  2698. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-architecture.md +194 -0
  2699. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-comparison-matrix.md +79 -0
  2700. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-index.md +73 -0
  2701. package/skills/vds-skill/vds-scripts/docs/agents/reference/pdf-orchestrator.md +57 -0
  2702. package/skills/vds-skill/vds-scripts/docs/agents/reference/portable-paths-and-config.md +0 -0
  2703. package/skills/vds-skill/vds-scripts/docs/agents/reference/portable-paths-validation-matrix.md +129 -0
  2704. package/skills/vds-skill/vds-scripts/docs/agents/reference/progress-orchestrator.md +51 -0
  2705. package/skills/vds-skill/vds-scripts/docs/agents/reference/progress-report-cli.md +215 -0
  2706. package/skills/vds-skill/vds-scripts/docs/agents/reference/public-interface-orchestrator.md +73 -0
  2707. package/skills/vds-skill/vds-scripts/docs/agents/reference/research-orchestrator.md +53 -0
  2708. package/skills/vds-skill/vds-scripts/docs/agents/reference/schema-orchestrator.md +57 -0
  2709. package/skills/vds-skill/vds-scripts/docs/agents/reference/search-tools.md +34 -0
  2710. package/skills/vds-skill/vds-scripts/docs/agents/reference/skills-commands.md +256 -0
  2711. package/skills/vds-skill/vds-scripts/docs/agents/reference/skills-reference.md +32 -0
  2712. package/skills/vds-skill/vds-scripts/docs/agents/reference/sonarqube-orchestrator.md +62 -0
  2713. package/skills/vds-skill/vds-scripts/docs/agents/reference/spec-orchestrator.md +56 -0
  2714. package/skills/vds-skill/vds-scripts/docs/agents/reference/structure-orchestrator.md +69 -0
  2715. package/skills/vds-skill/vds-scripts/docs/agents/reference/system-requirements.md +76 -0
  2716. package/skills/vds-skill/vds-scripts/docs/agents/reference/tasks-orchestrator.md +53 -0
  2717. package/skills/vds-skill/vds-scripts/docs/agents/reference/validation-and-sync-notes.md +54 -0
  2718. package/skills/vds-skill/vds-scripts/docs/agents/reference/vds-ai-memory-api.md +51 -0
  2719. package/skills/vds-skill/vds-scripts/docs/agents/reference/vds-cli-reference.md +34 -0
  2720. package/skills/vds-skill/vds-scripts/docs/agents/reference/who-capability-inventory.md +96 -0
  2721. package/skills/vds-skill/vds-scripts/docs/agents/reference/who-capability-routing-matrix.md +14 -0
  2722. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/feature-progression-guide.md +112 -0
  2723. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/index.md +36 -0
  2724. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/quick-start.md +50 -0
  2725. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/who-skills-and-scripts-onboarding.md +47 -0
  2726. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/zero-to-productive-developer.md +339 -0
  2727. package/skills/vds-skill/vds-scripts/docs/confluence/IMPLEMENTATION-SUMMARY.md +78 -0
  2728. package/skills/vds-skill/vds-scripts/docs/confluence/SYNC-GUIDE.md +47 -0
  2729. package/skills/vds-skill/vds-scripts/docs/deployment/offline-docker-image-load.md +59 -0
  2730. package/skills/vds-skill/vds-scripts/docs/evolution-auto-run-rollout.md +325 -0
  2731. package/skills/vds-skill/vds-scripts/docs/evolution-loop-deep-integration.md +496 -0
  2732. package/skills/vds-skill/vds-scripts/docs/evolution-loop-integration-guide.md +359 -0
  2733. package/skills/vds-skill/vds-scripts/docs/openspace-schema-snapshot.md +73 -0
  2734. package/skills/vds-skill/vds-scripts/docs/operations/sla-mttr-policy.md +44 -0
  2735. package/skills/vds-skill/vds-scripts/docs/p0-closure-evidence/SUMMARY.md +58 -0
  2736. package/skills/vds-skill/vds-scripts/docs/p4-closure-evidence/.gitkeep +0 -0
  2737. package/skills/vds-skill/vds-scripts/docs/p4-closure-evidence/smoke-20260427T024137Z-b95b586b.json +15 -0
  2738. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/alembic-and-runtime-advisory-locks.md +45 -0
  2739. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/dbos-listen-notify.md +54 -0
  2740. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/pgbouncer-search-path-empirical.md +110 -0
  2741. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/pgvector-set-local-audit.md +51 -0
  2742. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/topology-decision-session-mode.md +57 -0
  2743. package/skills/vds-skill/vds-scripts/docs/phases/CHANGELOG.md +103 -0
  2744. package/skills/vds-skill/vds-scripts/docs/phases/PHASE_125_COMPLETION_AND_MERGE.md +212 -0
  2745. package/skills/vds-skill/vds-scripts/docs/phases/phase125/IMPLEMENTATION_REPORT.md +227 -0
  2746. package/skills/vds-skill/vds-scripts/docs/phases/phase125/TSK-125.10-11-implementation-summary.md +196 -0
  2747. package/skills/vds-skill/vds-scripts/docs/phases/phase125/profile-patch-ollama-local-anthropic.md +122 -0
  2748. package/skills/vds-skill/vds-scripts/docs/phases/phase125_completion_summary.md +369 -0
  2749. package/skills/vds-skill/vds-scripts/docs/phases/phase125_llm_analysis_skill.md +164 -0
  2750. package/skills/vds-skill/vds-scripts/docs/phases/phase125_merge_complete.md +147 -0
  2751. package/skills/vds-skill/vds-scripts/docs/phases/phase125_skill_runtime_closure_20260321.md +91 -0
  2752. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/closure-handoff-summary-2026-03-23.md +290 -0
  2753. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/remaining-risk-register-2026-03-25.md +143 -0
  2754. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/verification-evidence-2026-03-23.md +135 -0
  2755. package/skills/vds-skill/vds-scripts/docs/v0-sunset-known-issues.md +88 -0
  2756. package/skills/vds-skill/vds-scripts/docs/vi/TRANSLATION-BACKLOG.md +72 -0
  2757. package/skills/vds-skill/vds-scripts/docs/vi/agents/README.md +41 -0
  2758. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/features-overview.md +29 -0
  2759. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/index.md +14 -0
  2760. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/runtime-verification-and-gap-reporting.md +129 -0
  2761. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/whats-new.md +37 -0
  2762. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/who-ecosystem-introduction.md +21 -0
  2763. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/who-ecosystem-model.md +36 -0
  2764. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/02-using-vds-ai-memory.md +100 -0
  2765. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/03-memory-cross-agent.md +243 -0
  2766. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/04-using-progress-reports.md +242 -0
  2767. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/08-semantic-search.md +16 -0
  2768. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/choose-the-right-command-or-skill.md +36 -0
  2769. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/decision-tree.md +77 -0
  2770. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/first-audit-run.md +85 -0
  2771. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/index.md +21 -0
  2772. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +156 -0
  2773. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +174 -0
  2774. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +147 -0
  2775. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +139 -0
  2776. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +151 -0
  2777. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +149 -0
  2778. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +144 -0
  2779. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-all-project-preparation.md +213 -0
  2780. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-bounded-parallel-analysis.md +125 -0
  2781. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-confluence-upload-recovery.md +206 -0
  2782. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase132-department-preparation.md +146 -0
  2783. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/tips-and-tricks.md +34 -0
  2784. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/troubleshooting-guide.md +36 -0
  2785. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/agent-operational-contract.md +98 -0
  2786. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/audit-triage-playbook.md +258 -0
  2787. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/bitbucket-orchestrator.md +30 -0
  2788. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/brd-orchestrator.md +29 -0
  2789. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/capability-coverage-review.md +46 -0
  2790. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/circular-dependency-orchestrator.md +29 -0
  2791. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-commands.md +409 -0
  2792. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-development-standards.md +19 -0
  2793. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-help-matrix.md +71 -0
  2794. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/common-errors.md +133 -0
  2795. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/configuration-reference.md +25 -0
  2796. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/confluence-orchestrator.md +30 -0
  2797. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/db-query-orchestrator.md +34 -0
  2798. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/diagrams-orchestrator.md +31 -0
  2799. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/elastic-orchestrator.md +30 -0
  2800. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/evolution-orchestrator.md +31 -0
  2801. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/excel-orchestrator.md +60 -0
  2802. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/git-orchestrator.md +31 -0
  2803. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/google-sheets-orchestrator.md +60 -0
  2804. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/grafana-orchestrator.md +30 -0
  2805. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/hexagonal-orchestrator.md +73 -0
  2806. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/index.md +25 -0
  2807. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/intellij-orchestrator.md +59 -0
  2808. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/jira-orchestrator.md +32 -0
  2809. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/links-orchestrator.md +66 -0
  2810. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/lsp-orchestrator.md +60 -0
  2811. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/markdown-orchestrator.md +62 -0
  2812. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/mcp-orchestrator.md +34 -0
  2813. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/memory-orchestrator.md +45 -0
  2814. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/metabase-orchestrator.md +30 -0
  2815. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/multi-agent-orchestrator.md +61 -0
  2816. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/openapi-orchestrator.md +66 -0
  2817. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/orchestrator-architecture.md +24 -0
  2818. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/orchestrator-index.md +73 -0
  2819. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/pdf-orchestrator.md +30 -0
  2820. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/portable-paths-and-config.md +123 -0
  2821. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/portable-paths-validation-matrix.md +131 -0
  2822. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/progress-orchestrator.md +43 -0
  2823. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/progress-report-cli.md +217 -0
  2824. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/public-interface-orchestrator.md +82 -0
  2825. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/research-orchestrator.md +45 -0
  2826. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/schema-orchestrator.md +66 -0
  2827. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/search-tools.md +19 -0
  2828. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/skills-reference.md +27 -0
  2829. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/sonarqube-orchestrator.md +71 -0
  2830. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/spec-orchestrator.md +56 -0
  2831. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/structure-orchestrator.md +78 -0
  2832. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/system-requirements.md +30 -0
  2833. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/tasks-orchestrator.md +45 -0
  2834. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/validation-and-sync-notes.md +26 -0
  2835. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/vds-ai-memory-api.md +53 -0
  2836. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/vds-cli-reference.md +34 -0
  2837. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/who-capability-inventory.md +98 -0
  2838. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/who-capability-routing-matrix.md +16 -0
  2839. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/feature-progression-guide.md +124 -0
  2840. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/index.md +13 -0
  2841. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/quick-start.md +30 -0
  2842. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/who-skills-and-scripts-onboarding.md +42 -0
  2843. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/zero-to-productive-developer.md +137 -0
  2844. package/skills/vds-skill/vds-scripts/elastic_orchestrator/README.md +450 -0
  2845. package/skills/vds-skill/vds-scripts/elastic_orchestrator/pyproject.toml +97 -0
  2846. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/__init__.py +81 -0
  2847. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/cli.py +652 -0
  2848. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/client.py +743 -0
  2849. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/config.py +208 -0
  2850. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/errors.py +34 -0
  2851. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/py.typed +0 -0
  2852. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/__init__.py +0 -0
  2853. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/conftest.py +227 -0
  2854. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_client.py +990 -0
  2855. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_config.py +268 -0
  2856. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_e2e_verification.py +272 -0
  2857. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_errors.py +78 -0
  2858. package/skills/vds-skill/vds-scripts/excel_orchestrator/README.md +288 -0
  2859. package/skills/vds-skill/vds-scripts/excel_orchestrator/RESEARCH_BASED_UPDATES_REPORT.md +261 -0
  2860. package/skills/vds-skill/vds-scripts/excel_orchestrator/add_essential_missing_effort.py +255 -0
  2861. package/skills/vds-skill/vds-scripts/excel_orchestrator/adjust_effort_complexity.py +184 -0
  2862. package/skills/vds-skill/vds-scripts/excel_orchestrator/brd_analysis_and_task_breakdown.py +632 -0
  2863. package/skills/vds-skill/vds-scripts/excel_orchestrator/brd_analysis_comprehensive.py +1029 -0
  2864. package/skills/vds-skill/vds-scripts/excel_orchestrator/check_overlaps_and_brd_coverage.py +570 -0
  2865. package/skills/vds-skill/vds-scripts/excel_orchestrator/clean_remarks_column.py +127 -0
  2866. package/skills/vds-skill/vds-scripts/excel_orchestrator/comprehensive_brd_check.py +322 -0
  2867. package/skills/vds-skill/vds-scripts/excel_orchestrator/create_buffered_summary.py +119 -0
  2868. package/skills/vds-skill/vds-scripts/excel_orchestrator/create_service_totals_sheet.py +118 -0
  2869. package/skills/vds-skill/vds-scripts/excel_orchestrator/examples/basic_operations.py +85 -0
  2870. package/skills/vds-skill/vds-scripts/excel_orchestrator/expand_all_tasks.py +341 -0
  2871. package/skills/vds-skill/vds-scripts/excel_orchestrator/expand_tasks.py +304 -0
  2872. package/skills/vds-skill/vds-scripts/excel_orchestrator/fill_brd_references.py +347 -0
  2873. package/skills/vds-skill/vds-scripts/excel_orchestrator/fill_remarks_and_colors.py +132 -0
  2874. package/skills/vds-skill/vds-scripts/excel_orchestrator/finalize_brd_and_cleanup.py +295 -0
  2875. package/skills/vds-skill/vds-scripts/excel_orchestrator/finalize_brd_coverage.py +327 -0
  2876. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_all_formulas.py +99 -0
  2877. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_detail_presentation.py +113 -0
  2878. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_presentation_and_effort.py +116 -0
  2879. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_presentation_consistency.py +231 -0
  2880. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_remarks_matching.py +179 -0
  2881. package/skills/vds-skill/vds-scripts/excel_orchestrator/group_tasks_by_service_id.py +210 -0
  2882. package/skills/vds-skill/vds-scripts/excel_orchestrator/increase_brd_coverage.py +497 -0
  2883. package/skills/vds-skill/vds-scripts/excel_orchestrator/increase_effort_complexity.py +155 -0
  2884. package/skills/vds-skill/vds-scripts/excel_orchestrator/organize_and_deduplicate.py +273 -0
  2885. package/skills/vds-skill/vds-scripts/excel_orchestrator/pyproject.toml +64 -0
  2886. package/skills/vds-skill/vds-scripts/excel_orchestrator/rebuild_all_formulas.py +146 -0
  2887. package/skills/vds-skill/vds-scripts/excel_orchestrator/remove_base_multiplier_and_check_duplicates.py +310 -0
  2888. package/skills/vds-skill/vds-scripts/excel_orchestrator/remove_duplicate_brd_tasks.py +137 -0
  2889. package/skills/vds-skill/vds-scripts/excel_orchestrator/research_based_updates.py +457 -0
  2890. package/skills/vds-skill/vds-scripts/excel_orchestrator/restore_e_values.py +172 -0
  2891. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/__init__.py +5 -0
  2892. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/cli.py +746 -0
  2893. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/config.py +74 -0
  2894. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/converters.py +226 -0
  2895. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/errors.py +88 -0
  2896. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/excel_client.py +443 -0
  2897. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/formatters.py +211 -0
  2898. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/logging.py +57 -0
  2899. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/source_contract.py +29 -0
  2900. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/target_state_status.py +837 -0
  2901. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/ulnc_alignment.py +1291 -0
  2902. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/validators.py +164 -0
  2903. package/skills/vds-skill/vds-scripts/excel_orchestrator/sync_detail_and_total_sheets.py +211 -0
  2904. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/__init__.py +1 -0
  2905. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/conftest.py +36 -0
  2906. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_cli.py +383 -0
  2907. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_excel_client.py +129 -0
  2908. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_ulnc_alignment.py +373 -0
  2909. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_validators.py +64 -0
  2910. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_api_database_effort.py +261 -0
  2911. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_buffers_inline.py +115 -0
  2912. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_complex_services_and_add_new.py +336 -0
  2913. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_responsibility_and_fix_rows.py +208 -0
  2914. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_task_breakdown_vietnamese.py +309 -0
  2915. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_vietnamese_and_responsibility.py +415 -0
  2916. package/skills/vds-skill/vds-scripts/excel_orchestrator/verify_brd_coverage_comprehensive.py +401 -0
  2917. package/skills/vds-skill/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +119 -0
  2918. package/skills/vds-skill/vds-scripts/git_orchestrator/README.md +286 -0
  2919. package/skills/vds-skill/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +152 -0
  2920. package/skills/vds-skill/vds-scripts/git_orchestrator/pyproject.toml +37 -0
  2921. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +30 -0
  2922. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +4 -0
  2923. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/branch_probe.py +271 -0
  2924. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +892 -0
  2925. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +63 -0
  2926. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +249 -0
  2927. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +1647 -0
  2928. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/protocols.py +35 -0
  2929. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +55 -0
  2930. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
  2931. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_cli_settings.py +19 -0
  2932. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_integration.py +79 -0
  2933. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_manifest.py +79 -0
  2934. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_orchestrator.py +207 -0
  2935. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_public_api.py +235 -0
  2936. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_resilience.py +343 -0
  2937. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/__init__.py +0 -0
  2938. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/test_branch_probe.py +327 -0
  2939. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/test_protocols.py +132 -0
  2940. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/README.md +241 -0
  2941. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/pyproject.toml +45 -0
  2942. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/__init__.py +69 -0
  2943. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/cli.py +568 -0
  2944. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/client.py +186 -0
  2945. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/config.py +46 -0
  2946. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/errors.py +41 -0
  2947. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/__init__.py +1 -0
  2948. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/conftest.py +1 -0
  2949. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/__init__.py +1 -0
  2950. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_cli.py +212 -0
  2951. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_client.py +24 -0
  2952. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_config.py +16 -0
  2953. package/skills/vds-skill/vds-scripts/grafana_orchestrator/README.md +572 -0
  2954. package/skills/vds-skill/vds-scripts/grafana_orchestrator/pyproject.toml +102 -0
  2955. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/__init__.py +78 -0
  2956. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/cli.py +455 -0
  2957. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/client.py +700 -0
  2958. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/config.py +243 -0
  2959. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/errors.py +34 -0
  2960. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/py.typed +1 -0
  2961. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/__init__.py +1 -0
  2962. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/conftest.py +308 -0
  2963. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_client.py +458 -0
  2964. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_config.py +203 -0
  2965. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_errors.py +78 -0
  2966. package/skills/vds-skill/vds-scripts/jira_orchestrator/README.md +864 -0
  2967. package/skills/vds-skill/vds-scripts/jira_orchestrator/pyproject.toml +43 -0
  2968. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +65 -0
  2969. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +1685 -0
  2970. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +2806 -0
  2971. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +168 -0
  2972. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +34 -0
  2973. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +66 -0
  2974. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/__init__.py +1 -0
  2975. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/conftest.py +86 -0
  2976. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
  2977. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +91 -0
  2978. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +56 -0
  2979. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +45 -0
  2980. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +119 -0
  2981. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +53 -0
  2982. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +41 -0
  2983. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +42 -0
  2984. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +75 -0
  2985. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +90 -0
  2986. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +116 -0
  2987. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +181 -0
  2988. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +43 -0
  2989. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +179 -0
  2990. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_agile.py +304 -0
  2991. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_application_properties.py +243 -0
  2992. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_backlog.py +91 -0
  2993. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +403 -0
  2994. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_cli.py +108 -0
  2995. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_components.py +119 -0
  2996. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_config.py +166 -0
  2997. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_dashboard.py +122 -0
  2998. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +207 -0
  2999. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_errors.py +72 -0
  3000. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_filter_management.py +411 -0
  3001. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +179 -0
  3002. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_links.py +257 -0
  3003. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +189 -0
  3004. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_link_types.py +407 -0
  3005. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_parse_set.py +37 -0
  3006. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_permissions.py +343 -0
  3007. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_reindex.py +81 -0
  3008. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_remote_links.py +269 -0
  3009. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +202 -0
  3010. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +109 -0
  3011. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_user_management.py +246 -0
  3012. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_version_management.py +503 -0
  3013. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_watchers.py +116 -0
  3014. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_worklog.py +243 -0
  3015. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/README.md +864 -0
  3016. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/pyproject.toml +43 -0
  3017. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/__init__.py +65 -0
  3018. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/adapter.py +1689 -0
  3019. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/cli.py +2799 -0
  3020. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/config.py +137 -0
  3021. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/errors.py +34 -0
  3022. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/reporting.py +65 -0
  3023. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/__init__.py +1 -0
  3024. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/conftest.py +86 -0
  3025. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
  3026. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_bulk_operations.py +101 -0
  3027. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_components.py +64 -0
  3028. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_createmeta.py +45 -0
  3029. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_dashboard.py +135 -0
  3030. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_issue_properties.py +63 -0
  3031. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_permissions_compat.py +42 -0
  3032. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_reindex.py +42 -0
  3033. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_remote_links.py +89 -0
  3034. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_transitions.py +91 -0
  3035. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_user_management.py +130 -0
  3036. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_version_management.py +189 -0
  3037. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_watchers.py +49 -0
  3038. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_advanced_search.py +213 -0
  3039. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_agile.py +334 -0
  3040. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_application_properties.py +261 -0
  3041. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_backlog.py +91 -0
  3042. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_bulk_operations.py +443 -0
  3043. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_cli.py +106 -0
  3044. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_components.py +133 -0
  3045. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_config.py +166 -0
  3046. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_dashboard.py +130 -0
  3047. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_discover_fields.py +207 -0
  3048. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_errors.py +61 -0
  3049. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_filter_management.py +478 -0
  3050. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_archiving.py +181 -0
  3051. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_links.py +257 -0
  3052. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_properties.py +203 -0
  3053. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_link_types.py +426 -0
  3054. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_parse_set.py +37 -0
  3055. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_permissions.py +358 -0
  3056. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_reindex.py +81 -0
  3057. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_remote_links.py +292 -0
  3058. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_security_schemes.py +218 -0
  3059. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_transitions_changelog.py +121 -0
  3060. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_user_management.py +283 -0
  3061. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_version_management.py +561 -0
  3062. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_watchers.py +128 -0
  3063. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_worklog.py +265 -0
  3064. package/skills/vds-skill/vds-scripts/llms.txt +159 -0
  3065. package/skills/vds-skill/vds-scripts/markdown_orchestrator/README.md +72 -0
  3066. package/skills/vds-skill/vds-scripts/markdown_orchestrator/pyproject.toml +39 -0
  3067. package/skills/vds-skill/vds-scripts/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.py +5 -0
  3068. package/skills/vds-skill/vds-scripts/markdown_orchestrator/src/vds_markdown_orchestrator/cli.py +102 -0
  3069. package/skills/vds-skill/vds-scripts/mcp_server/Dockerfile +63 -0
  3070. package/skills/vds-skill/vds-scripts/mcp_server/README.md +140 -0
  3071. package/skills/vds-skill/vds-scripts/mcp_server/pyproject.toml +41 -0
  3072. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +3 -0
  3073. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/config.py +36 -0
  3074. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/server.py +111 -0
  3075. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +15 -0
  3076. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +47 -0
  3077. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +53 -0
  3078. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +71 -0
  3079. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +63 -0
  3080. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/vidp_tools.py +64 -0
  3081. package/skills/vds-skill/vds-scripts/mcp_server/tests/__init__.py +1 -0
  3082. package/skills/vds-skill/vds-scripts/mcp_server/tests/conftest.py +31 -0
  3083. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/__init__.py +1 -0
  3084. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +28 -0
  3085. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +28 -0
  3086. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_git_tools.py +35 -0
  3087. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +35 -0
  3088. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/__init__.py +6 -0
  3089. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/conftest.py +51 -0
  3090. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +40 -0
  3091. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +39 -0
  3092. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +50 -0
  3093. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.dockerignore +93 -0
  3094. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.env.example +40 -0
  3095. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.ruff_rules.py +350 -0
  3096. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.yamllint.yml +43 -0
  3097. package/skills/vds-skill/vds-scripts/pdf_orchestrator/DEVELOPMENT_PLAN.md +80 -0
  3098. package/skills/vds-skill/vds-scripts/pdf_orchestrator/Dockerfile +87 -0
  3099. package/skills/vds-skill/vds-scripts/pdf_orchestrator/README.md +608 -0
  3100. package/skills/vds-skill/vds-scripts/pdf_orchestrator/cli_verification_test/test.md +6 -0
  3101. package/skills/vds-skill/vds-scripts/pdf_orchestrator/cli_verification_test/test.pdf +0 -0
  3102. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/alertmanager.yml +83 -0
  3103. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/prometheus.prod.yml +98 -0
  3104. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/prometheus.yml +40 -0
  3105. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/redis.conf +78 -0
  3106. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/COMPETITIVE_ANALYSIS_REPORT.md +309 -0
  3107. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/FEATURES_GUIDE.md +518 -0
  3108. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/MULTI_USER_DEPLOYMENT_GUIDE.md +615 -0
  3109. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/USER_GUIDE.md +829 -0
  3110. package/skills/vds-skill/vds-scripts/pdf_orchestrator/pyproject.toml +87 -0
  3111. package/skills/vds-skill/vds-scripts/pdf_orchestrator/pytest.ini +71 -0
  3112. package/skills/vds-skill/vds-scripts/pdf_orchestrator/ruff.toml +6 -0
  3113. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/debug_security_report.py +59 -0
  3114. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/demo_library_selector.py +109 -0
  3115. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/generate_project_stats.py +52 -0
  3116. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/generate_styled_pdf.py +95 -0
  3117. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/migrate_render_pdfs.py +285 -0
  3118. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/setup_team.bat +283 -0
  3119. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/setup_team.sh +324 -0
  3120. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/__init__.py +5 -0
  3121. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/cli.py +542 -0
  3122. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/config.py +33 -0
  3123. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/README.md +650 -0
  3124. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/__init__.py +0 -0
  3125. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/conftest.py +520 -0
  3126. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/requirements.txt +51 -0
  3127. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/run_tests.py +659 -0
  3128. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/test_config.py +36 -0
  3129. package/skills/vds-skill/vds-scripts/platform_core/pyproject.toml +49 -0
  3130. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/__init__.py +16 -0
  3131. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/alembic/__init__.py +18 -0
  3132. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/alembic/runtime.py +139 -0
  3133. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/config.py +88 -0
  3134. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/credentials.py +40 -0
  3135. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/env.py +24 -0
  3136. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/errors.py +127 -0
  3137. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/__init__.py +18 -0
  3138. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/auth.py +32 -0
  3139. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/errors.py +47 -0
  3140. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/pagination.py +65 -0
  3141. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/retry.py +62 -0
  3142. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/stack.py +61 -0
  3143. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/logging.py +132 -0
  3144. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/protocols.py +77 -0
  3145. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/serialization.py +80 -0
  3146. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/severity.py +175 -0
  3147. package/skills/vds-skill/vds-scripts/platform_core/tests/__init__.py +0 -0
  3148. package/skills/vds-skill/vds-scripts/platform_core/tests/conftest.py +1 -0
  3149. package/skills/vds-skill/vds-scripts/platform_core/tests/test_alembic_runtime.py +300 -0
  3150. package/skills/vds-skill/vds-scripts/platform_core/tests/test_auth.py +84 -0
  3151. package/skills/vds-skill/vds-scripts/platform_core/tests/test_config.py +83 -0
  3152. package/skills/vds-skill/vds-scripts/platform_core/tests/test_credentials.py +73 -0
  3153. package/skills/vds-skill/vds-scripts/platform_core/tests/test_env.py +56 -0
  3154. package/skills/vds-skill/vds-scripts/platform_core/tests/test_errors.py +201 -0
  3155. package/skills/vds-skill/vds-scripts/platform_core/tests/test_errors_http.py +74 -0
  3156. package/skills/vds-skill/vds-scripts/platform_core/tests/test_http_settings.py +116 -0
  3157. package/skills/vds-skill/vds-scripts/platform_core/tests/test_logging.py +148 -0
  3158. package/skills/vds-skill/vds-scripts/platform_core/tests/test_pagination.py +153 -0
  3159. package/skills/vds-skill/vds-scripts/platform_core/tests/test_protocols.py +132 -0
  3160. package/skills/vds-skill/vds-scripts/platform_core/tests/test_retry.py +151 -0
  3161. package/skills/vds-skill/vds-scripts/platform_core/tests/test_serialization.py +92 -0
  3162. package/skills/vds-skill/vds-scripts/platform_core/tests/test_severity.py +178 -0
  3163. package/skills/vds-skill/vds-scripts/platform_core/tests/test_stack.py +130 -0
  3164. package/skills/vds-skill/vds-scripts/platform_core/uv.lock +341 -0
  3165. package/skills/vds-skill/vds-scripts/pyproject.toml +145 -0
  3166. package/skills/vds-skill/vds-scripts/pyrightconfig.json +82 -0
  3167. package/skills/vds-skill/vds-scripts/repo-manifest.yaml +380 -0
  3168. package/skills/vds-skill/vds-scripts/repo-manifest.yaml.example +25 -0
  3169. package/skills/vds-skill/vds-scripts/ruff.toml +100 -0
  3170. package/skills/vds-skill/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +706 -0
  3171. package/skills/vds-skill/vds-scripts/scripts/BRD-Validation-README.md +308 -0
  3172. package/skills/vds-skill/vds-scripts/scripts/README.md +271 -0
  3173. package/skills/vds-skill/vds-scripts/scripts/_validate_alias_phase2.py +137 -0
  3174. package/skills/vds-skill/vds-scripts/scripts/audit-cli-patterns.sh +135 -0
  3175. package/skills/vds-skill/vds-scripts/scripts/audit-dashboard.sh +525 -0
  3176. package/skills/vds-skill/vds-scripts/scripts/backup.sh +123 -0
  3177. package/skills/vds-skill/vds-scripts/scripts/bootstrap_uv.sh +69 -0
  3178. package/skills/vds-skill/vds-scripts/scripts/brd-validation-environment.json +51 -0
  3179. package/skills/vds-skill/vds-scripts/scripts/brd-validation-test-results.json +13023 -0
  3180. package/skills/vds-skill/vds-scripts/scripts/brd_coverage_report.json +276 -0
  3181. package/skills/vds-skill/vds-scripts/scripts/check-future-annotations.py +22 -0
  3182. package/skills/vds-skill/vds-scripts/scripts/check-invalid-symlinks.py +183 -0
  3183. package/skills/vds-skill/vds-scripts/scripts/check-no-debug-markers.py +21 -0
  3184. package/skills/vds-skill/vds-scripts/scripts/check-no-unittest.py +21 -0
  3185. package/skills/vds-skill/vds-scripts/scripts/ci/assert_no_openspace_commits.sh +37 -0
  3186. package/skills/vds-skill/vds-scripts/scripts/ci/verify_branch_protection.sh +64 -0
  3187. package/skills/vds-skill/vds-scripts/scripts/closure/phase1_check.sh +483 -0
  3188. package/skills/vds-skill/vds-scripts/scripts/closure/phase2_check.sh +500 -0
  3189. package/skills/vds-skill/vds-scripts/scripts/create_memory_session.py +36 -0
  3190. package/skills/vds-skill/vds-scripts/scripts/deploy-bootstrap.sh +201 -0
  3191. package/skills/vds-skill/vds-scripts/scripts/deployment/load_docker_images_offline.sh +90 -0
  3192. package/skills/vds-skill/vds-scripts/scripts/dev/cli_smoke.sh +259 -0
  3193. package/skills/vds-skill/vds-scripts/scripts/final_completion_report.md +139 -0
  3194. package/skills/vds-skill/vds-scripts/scripts/folder_structure_report.json +321 -0
  3195. package/skills/vds-skill/vds-scripts/scripts/generate_completion_report.py +132 -0
  3196. package/skills/vds-skill/vds-scripts/scripts/generate_intellij_modules.py +154 -0
  3197. package/skills/vds-skill/vds-scripts/scripts/init-pgbouncer-userlist.sh +154 -0
  3198. package/skills/vds-skill/vds-scripts/scripts/link_integrity_report.json +807 -0
  3199. package/skills/vds-skill/vds-scripts/scripts/move_audit_artifact_pages.py +252 -0
  3200. package/skills/vds-skill/vds-scripts/scripts/move_audit_artifact_pages_rest.py +165 -0
  3201. package/skills/vds-skill/vds-scripts/scripts/move_wrong_dept_pages.py +235 -0
  3202. package/skills/vds-skill/vds-scripts/scripts/openspace_bootstrap.sh +56 -0
  3203. package/skills/vds-skill/vds-scripts/scripts/openspace_common.sh +75 -0
  3204. package/skills/vds-skill/vds-scripts/scripts/openspace_doctor.sh +61 -0
  3205. package/skills/vds-skill/vds-scripts/scripts/openspace_sync_shadow.sh +65 -0
  3206. package/skills/vds-skill/vds-scripts/scripts/phase7-baseline.sh +77 -0
  3207. package/skills/vds-skill/vds-scripts/scripts/preflight/env_check.sh +102 -0
  3208. package/skills/vds-skill/vds-scripts/scripts/repair_autopay_reports.sh +173 -0
  3209. package/skills/vds-skill/vds-scripts/scripts/rollback_drill.sh +659 -0
  3210. package/skills/vds-skill/vds-scripts/scripts/run-audit-in-tmux.sh +286 -0
  3211. package/skills/vds-skill/vds-scripts/scripts/run-department-audit.sh +495 -0
  3212. package/skills/vds-skill/vds-scripts/scripts/run-project-audit.sh +267 -0
  3213. package/skills/vds-skill/vds-scripts/scripts/save_intellij_memories.py +112 -0
  3214. package/skills/vds-skill/vds-scripts/scripts/save_memories_to_vds_ai.py +81 -0
  3215. package/skills/vds-skill/vds-scripts/scripts/save_memories_vds_style.py +133 -0
  3216. package/skills/vds-skill/vds-scripts/scripts/search_intellij_memories.py +48 -0
  3217. package/skills/vds-skill/vds-scripts/scripts/setup_intellij_workspace.py +71 -0
  3218. package/skills/vds-skill/vds-scripts/scripts/smoke-test-deploy.sh +137 -0
  3219. package/skills/vds-skill/vds-scripts/scripts/smoke_deploy_lib.py +205 -0
  3220. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/README.md +89 -0
  3221. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +27 -0
  3222. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/coordination.sh +114 -0
  3223. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +25 -0
  3224. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/docs_root.sh +22 -0
  3225. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +22 -0
  3226. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +25 -0
  3227. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +17 -0
  3228. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +25 -0
  3229. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/sync_confluence.sh +30 -0
  3230. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/update_dependencies.sh +19 -0
  3231. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_links.sh +86 -0
  3232. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_markdown.sh +52 -0
  3233. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_schemas.sh +26 -0
  3234. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_structure.sh +98 -0
  3235. package/skills/vds-skill/vds-scripts/scripts/tests/__init__.py +1 -0
  3236. package/skills/vds-skill/vds-scripts/scripts/tests/test_dockerfile_correctness.py +815 -0
  3237. package/skills/vds-skill/vds-scripts/scripts/tests/test_makefile_loadouts.py +560 -0
  3238. package/skills/vds-skill/vds-scripts/scripts/tests/test_smoke_deploy.py +313 -0
  3239. package/skills/vds-skill/vds-scripts/scripts/tests/test_verify_alembic.py +581 -0
  3240. package/skills/vds-skill/vds-scripts/scripts/tests/test_verify_infra_topology.py +254 -0
  3241. package/skills/vds-skill/vds-scripts/scripts/update_modules_xml.py +194 -0
  3242. package/skills/vds-skill/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +128 -0
  3243. package/skills/vds-skill/vds-scripts/scripts/uv-workspace-alignment-verification-2026-04-18.md +100 -0
  3244. package/skills/vds-skill/vds-scripts/scripts/validate-cli-standardization.sh +188 -0
  3245. package/skills/vds-skill/vds-scripts/scripts/validate_brd_coverage.py +197 -0
  3246. package/skills/vds-skill/vds-scripts/scripts/validate_folder_structure.py +234 -0
  3247. package/skills/vds-skill/vds-scripts/scripts/validate_link_integrity.py +274 -0
  3248. package/skills/vds-skill/vds-scripts/scripts/vami017-caller-compat-report.md +62 -0
  3249. package/skills/vds-skill/vds-scripts/scripts/vami017-phase-b-scaffold-notes.md +79 -0
  3250. package/skills/vds-skill/vds-scripts/scripts/vds_sh_helpers.sh +180 -0
  3251. package/skills/vds-skill/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +26 -0
  3252. package/skills/vds-skill/vds-scripts/scripts/verify-infra-topology.py +868 -0
  3253. package/skills/vds-skill/vds-scripts/scripts/verify-memory-cli-e2e.sh +598 -0
  3254. package/skills/vds-skill/vds-scripts/scripts/verify-worktree-features.sh +306 -0
  3255. package/skills/vds-skill/vds-scripts/scripts/worktree-add.sh +128 -0
  3256. package/skills/vds-skill/vds-scripts/scripts/worktree-remove.sh +112 -0
  3257. package/skills/vds-skill/vds-scripts/scripts/worktree_compose.sh +269 -0
  3258. package/skills/vds-skill/vds-scripts/scripts/worktree_uv.sh +77 -0
  3259. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/IMPLEMENTATION_AUDIT.md +376 -0
  3260. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/README.md +507 -0
  3261. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/pyproject.toml +106 -0
  3262. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/scripts/ensure_symlink.sh +38 -0
  3263. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/__init__.py +164 -0
  3264. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/batch.py +212 -0
  3265. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/cli.py +1407 -0
  3266. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/client.py +608 -0
  3267. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/config.py +260 -0
  3268. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/diff.py +220 -0
  3269. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/errors.py +34 -0
  3270. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/external_sca.py +932 -0
  3271. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/portfolio.py +225 -0
  3272. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/pr.py +505 -0
  3273. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/reports.py +342 -0
  3274. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/scanner.py +351 -0
  3275. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/webhooks.py +269 -0
  3276. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/__init__.py +0 -0
  3277. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/conftest.py +134 -0
  3278. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_batch.py +419 -0
  3279. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_config.py +145 -0
  3280. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_errors.py +78 -0
  3281. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_external_sca.py +466 -0
  3282. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_pr.py +471 -0
  3283. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_reports.py +511 -0
  3284. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_webhooks.py +660 -0
  3285. package/skills/vds-skill/vds-scripts/uv.lock +5046 -0
  3286. package/skills/vds-skill/vds-scripts/vds_agent_core/CHANGELOG.md +36 -0
  3287. package/skills/vds-skill/vds-scripts/vds_agent_core/README.md +453 -0
  3288. package/skills/vds-skill/vds-scripts/vds_agent_core/docs/PHASE9A_ASSESSMENT.md +50 -0
  3289. package/skills/vds-skill/vds-scripts/vds_agent_core/docs/embedding.md +468 -0
  3290. package/skills/vds-skill/vds-scripts/vds_agent_core/pyproject.toml +51 -0
  3291. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/__init__.py +29 -0
  3292. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/__init__.py +26 -0
  3293. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/hooks.py +119 -0
  3294. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/loop.py +864 -0
  3295. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/tools.py +41 -0
  3296. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/config.py +252 -0
  3297. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/__init__.py +55 -0
  3298. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/_cascade.py +143 -0
  3299. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/budget.py +353 -0
  3300. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/cache.py +373 -0
  3301. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/embedding.py +815 -0
  3302. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/provider.py +173 -0
  3303. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/schemas.py +45 -0
  3304. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/__init__.py +77 -0
  3305. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/decorators.py +258 -0
  3306. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/jsonl_exporter.py +236 -0
  3307. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/tracer.py +497 -0
  3308. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/profiles.py +2015 -0
  3309. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/runtime/__init__.py +0 -0
  3310. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/runtime/agent_id.py +60 -0
  3311. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/security/__init__.py +13 -0
  3312. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/security/credentials.py +106 -0
  3313. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/__init__.py +1 -0
  3314. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/executor.py +238 -0
  3315. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/manager.py +381 -0
  3316. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/policy.py +568 -0
  3317. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/__init__.py +19 -0
  3318. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/langgraph_runner.py +102 -0
  3319. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/protocols.py +81 -0
  3320. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/__init__.py +0 -0
  3321. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/conftest.py +62 -0
  3322. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/__init__.py +0 -0
  3323. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_audit_loop_hooks_integration.py +135 -0
  3324. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_audit_observability_integration.py +246 -0
  3325. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_public_api_stability.py +91 -0
  3326. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/__init__.py +0 -0
  3327. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/__init__.py +0 -0
  3328. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_call_site_parallelism.py +30 -0
  3329. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_dimension_guardrail.py +25 -0
  3330. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_drop_in_provider_extensibility.py +76 -0
  3331. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding.py +393 -0
  3332. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_cache.py +302 -0
  3333. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_extra.py +696 -0
  3334. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_subclass.py +49 -0
  3335. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_no_provider_leakage_in_env.py +34 -0
  3336. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_provider_auto_route.py +48 -0
  3337. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_runtime_log_clean.py +111 -0
  3338. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_w7_logic_fixes.py +219 -0
  3339. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/__init__.py +0 -0
  3340. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_embedding_block_parser.py +194 -0
  3341. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_env_resolver_allowlist.py +141 -0
  3342. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_profile_authorization.py +158 -0
  3343. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_profiles_w3_extra.py +547 -0
  3344. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_real_audit_profile_compat.py +129 -0
  3345. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/__init__.py +0 -0
  3346. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/test_for_agent.py +322 -0
  3347. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/test_w9_cascade_edges.py +369 -0
  3348. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/security/__init__.py +0 -0
  3349. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/security/test_credentials.py +132 -0
  3350. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agent_loop.py +663 -0
  3351. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agent_loop_coverage.py +429 -0
  3352. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agents_hooks_defaults.py +22 -0
  3353. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget.py +155 -0
  3354. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget_coverage.py +264 -0
  3355. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget_tracking_only.py +71 -0
  3356. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_cache.py +251 -0
  3357. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_cache_context.py +62 -0
  3358. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_config.py +155 -0
  3359. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_langgraph_runner.py +45 -0
  3360. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_langgraph_runner_coverage.py +98 -0
  3361. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_llm_cache_deep.py +113 -0
  3362. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_decorators.py +697 -0
  3363. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_hooks.py +217 -0
  3364. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_jsonl_exporter.py +542 -0
  3365. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_jsonl_wiring.py +313 -0
  3366. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_tracer.py +896 -0
  3367. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_profiles.py +1571 -0
  3368. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_profiles_coverage.py +444 -0
  3369. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_provider.py +316 -0
  3370. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_schemas.py +63 -0
  3371. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_executor.py +297 -0
  3372. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_manager.py +370 -0
  3373. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_manager_coverage.py +364 -0
  3374. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_policy.py +402 -0
  3375. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_rubric.py +47 -0
  3376. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_tools.py +51 -0
  3377. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_workflow_protocols.py +136 -0
  3378. package/skills/vds-skill/vds-scripts/vds_cli/README.md +201 -0
  3379. package/skills/vds-skill/vds-scripts/vds_cli/VERIFICATION_REPORT.md +41 -0
  3380. package/skills/vds-skill/vds-scripts/vds_cli/pyproject.toml +50 -0
  3381. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/__init__.py +3 -0
  3382. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/assets/git-credential-helper.py +235 -0
  3383. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/cli.py +1126 -0
  3384. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/commands/__init__.py +1 -0
  3385. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/commands/lint_cli.py +389 -0
  3386. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/confluence_sync.py +846 -0
  3387. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/__init__.py +7 -0
  3388. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/funnel.py +105 -0
  3389. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/scanner.py +211 -0
  3390. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/freshness/report.py +90 -0
  3391. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/types.py +27 -0
  3392. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_cmd.py +672 -0
  3393. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_metrics.py +75 -0
  3394. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +1171 -0
  3395. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem/__init__.py +39 -0
  3396. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem/report.py +439 -0
  3397. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem_docs.py +164 -0
  3398. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/env.py +111 -0
  3399. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/env_git_helper.py +281 -0
  3400. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +3 -0
  3401. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +173 -0
  3402. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/router.py +232 -0
  3403. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/skills_cmd.py +274 -0
  3404. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/sync_api.py +613 -0
  3405. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/sync_service.py +283 -0
  3406. package/skills/vds-skill/vds-scripts/vds_cli/tests/conftest.py +62 -0
  3407. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_env_git_helper_lifecycle.py +261 -0
  3408. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_git_credential_helper.py +240 -0
  3409. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_router_help_proxy.py +43 -0
  3410. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_cli.py +241 -0
  3411. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_cli_DOC004.py +110 -0
  3412. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_confluence_sync.py +315 -0
  3413. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_confluence_sync_wave7.py +375 -0
  3414. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_consumption_funnel.py +106 -0
  3415. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_consumption_scanner.py +144 -0
  3416. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_cmd.py +89 -0
  3417. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_cmd_wave8.py +161 -0
  3418. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_metrics.py +16 -0
  3419. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_quality_score.py +61 -0
  3420. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +417 -0
  3421. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_cli_dashboard.py +667 -0
  3422. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_cli_dashboard_rendering.py +143 -0
  3423. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_docs.py +63 -0
  3424. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_env.py +85 -0
  3425. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_freshness_report.py +125 -0
  3426. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_lint_cli.py +224 -0
  3427. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_router.py +101 -0
  3428. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_skills_cmd.py +419 -0
  3429. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_sync_api.py +357 -0
  3430. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_sync_service.py +170 -0
  3431. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/conftest.py +51 -0
  3432. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +32 -0
  3433. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +32 -0
  3434. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_jira_real.py +40 -0
  3435. package/skills/vds-skill/vds-scripts/vds_cli_common/README.md +190 -0
  3436. package/skills/vds-skill/vds-scripts/vds_cli_common/pyproject.toml +96 -0
  3437. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +36 -0
  3438. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/app.py +55 -0
  3439. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +139 -0
  3440. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +201 -0
  3441. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +163 -0
  3442. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +440 -0
  3443. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +284 -0
  3444. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +78 -0
  3445. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +211 -0
  3446. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +85 -0
  3447. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/__init__.py +0 -0
  3448. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_app.py +126 -0
  3449. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_completers.py +148 -0
  3450. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_context.py +192 -0
  3451. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_env.py +235 -0
  3452. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_errors.py +275 -0
  3453. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_output.py +229 -0
  3454. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_paths.py +61 -0
  3455. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_testing.py +138 -0
  3456. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_version.py +64 -0
  3457. package/skills/vds-skill/vds-scripts/vidp_orchestrator/README.md +31 -0
  3458. package/skills/vds-skill/vds-scripts/vidp_orchestrator/pyproject.toml +50 -0
  3459. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/__init__.py +26 -0
  3460. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/cli.py +246 -0
  3461. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/client.py +104 -0
  3462. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/config.py +82 -0
  3463. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.json +3 -0
  3464. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.py +130 -0
  3465. package/skills/vds-skill/vds-scripts-skill/.openskills.json +6 -0
  3466. package/skills/vds-skill/vds-scripts-skill/QUALITY.md +44 -0
  3467. package/skills/vds-skill/vds-scripts-skill/SKILL.md +129 -0
  3468. package/skills/vds-skill/vds-scripts-skill/references/audit-commands.md +171 -0
  3469. package/skills/vds-skill/vds-scripts-skill/references/capability-index.md +34 -0
  3470. package/skills/vds-skill/vds-scripts-skill/references/development-commands.md +12 -0
  3471. package/skills/vds-skill/vds-scripts-skill/references/google-sheets.md +71 -0
  3472. package/skills/vds-skill/vds-scripts-skill/references/integration-commands.md +17 -0
  3473. package/skills/vds-skill/vds-scripts-skill/references/platform-bootstrap.md +31 -0
  3474. package/skills/vds-skill/vds-scripts-skill/references/specialist-routing.md +14 -0
  3475. package/skills/vds-skill/vds-scripts-skill/references/validation-commands.md +15 -0
  3476. package/telemetry.defaults.json +7 -0
@@ -0,0 +1,2764 @@
1
+ #!/usr/bin/env python3
2
+ # id: EVAL-HARVESTER | dd_version: v1
3
+ """
4
+ Evaluation harvester for the NTAPP/BMAD AI-coding workflow.
5
+
6
+ Parses the structured sections that the Stage 1-5 skills already emit
7
+ (Change Log tables, Review Findings checkboxes, Completion Notes DEVIATIONs,
8
+ AC status tags, deferred-work.md bullets, archive/ versions) and produces a
9
+ per-SLICE baseline scorecard for the three evaluation axes:
10
+
11
+ A. Hieu qua (Effectiveness) -> First-Pass Yield, deviation density
12
+ B. Hieu suat (Efficiency) -> rework (archive versions), changelog depth
13
+ C. Defer / CR / Change Log -> defer backlog, avoidability index, AC churn
14
+
15
+ Outputs (single root, per CLAUDE.md):
16
+ NTAPP-output/evaluation/metrics.json (raw machine-readable)
17
+ NTAPP-output/evaluation/scorecard.md (human-readable baseline)
18
+
19
+ Pure stdlib. Run from spec-repo root: python3 scripts/eval-harvester.py
20
+ The numbers are HARVESTED, not authoritative judgement -- parser heuristics
21
+ and their known blind spots are documented in scorecard.md section "Limits".
22
+
23
+ Token-burn engine (gop tu build_token_log.py): real token burn duoc tu gom tu
24
+ session JSONL cua Claude Code -> token-log.json. Khong con file rieng; chay
25
+ `python3 scripts/eval-harvester.py --refresh-burn` de re-harvest burn cache.
26
+ """
27
+ import datetime
28
+ import json
29
+ import os
30
+ import re
31
+ import statistics
32
+ import sys
33
+ from collections import defaultdict
34
+ from pathlib import Path
35
+
36
+ # Project "current date" for aging math (EFF-8). Bump when re-running on a real clock.
37
+ AS_OF = datetime.date(2026, 6, 11)
38
+ # G2 — ngưỡng độ phủ session-log: phiên phủ ≥ ngần này khoảng git → coi là 'đủ',
39
+ # dưới ngưỡng → burn đánh dấu 'một phần (cận dưới)'.
40
+ COVERAGE_FULL = 0.8
41
+ DEFER_CATEGORY_ORDER = ["contract-blocked", "arch-limit", "asset-gap", "scope-deferred",
42
+ "test-deferred", "cross-slice-dep", "deferred-bug", "security-hardening"]
43
+
44
+ ROOT = Path(__file__).resolve().parent.parent
45
+ # Output root: ưu tiên '_bmad-output' (tên cũ trước commit rename), fallback
46
+ # 'NTAPP-output' (tên mới) để đọc được cả cây dự án đã/chưa migrate. Default
47
+ # '_bmad-output' nếu chưa có thư mục nào (project chưa chạy).
48
+ BMAD_OUT = next((ROOT / n for n in ("_bmad-output", "NTAPP-output") if (ROOT / n).is_dir()),
49
+ ROOT / "_bmad-output")
50
+ S5 = BMAD_OUT / "Stage_5_Build_Verify"
51
+ SLICES_DIR = BMAD_OUT / "Stage_2_Architecture" / "slices"
52
+ DESIGN_DIR = BMAD_OUT / "Stage_4_Design"
53
+ UI_SCHEMA_DIR = DESIGN_DIR / "ui_schema" # drift_report_*.md sống ở đây (G8)
54
+ DD_DIR = DESIGN_DIR / "detailed_design" # *_detailed_design.md (CR table + drift §1.2 — G10)
55
+ DD_ARCHIVE = DD_DIR / "archive"
56
+ OUT_DIR = BMAD_OUT / "evaluation"
57
+
58
+ # --- Cost lens (Bộ C) -------------------------------------------------------
59
+ # Token PROXY: deliverable weight, NOT real LLM burn. ~4 chars/token (rough,
60
+ # language-agnostic). Real burn (input+thinking+retries+re-reads) is typically
61
+ # 5-50x this. Burn nay AUTO-harvest tu session JSONL qua harvest_burn() (engine
62
+ # gop trong chinh file nay) khi token-log.json chua co (hoac --refresh-burn) --
63
+ # xem load_token_log() + section "Token-burn engine" o cuoi file.
64
+ CHARS_PER_TOKEN = 4
65
+ # Mở rộng cho cả FE (TS/JS/Vue/...) lẫn BE (Java/Kotlin/Go/Rust/C#/...) — multi-repo.
66
+ CODE_EXT = re.compile(
67
+ r"\.(ts|tsx|js|jsx|mjs|cjs|css|scss|sass|less|vue|svelte|py"
68
+ r"|java|kt|kts|go|rs|cs|rb|php|scala|swift|c|cc|cpp|cxx|h|hpp|hxx)$")
69
+ # Test-detection: pattern JS (.test./.spec./.cy.) + path/name convention BE.
70
+ TEST_FILE = re.compile(r"\.(test|spec|cy)\.|\.integration\.test\.")
71
+ TEST_NAME = re.compile(r"(Test|Tests|IT|Spec)\.[A-Za-z]+$|_test\.(go|py|rb)$|_spec\.rb$")
72
+ TEST_PATH = re.compile(r"(^|/)(tests?|__tests__|spec|specs)/|/src/test/|(^|/)src/test/")
73
+ # Thư mục build/dep KHÔNG đo (khớp theo segment, kể cả khi lồng trong module con).
74
+ SKIP_DIRS = {"node_modules", "build", "dist", ".pnpm-store", "target", ".gradle",
75
+ "out", "vendor", "__pycache__", ".venv", "venv", ".next", ".nuxt",
76
+ "coverage", "obj"}
77
+ ID_HEADER = re.compile(r"id:\s*([A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+)")
78
+ TOKEN_LOG = OUT_DIR / "token-log.json" # real-burn cache (auto-harvested if missing)
79
+
80
+ # --- Claude API pricing (hard reference) ------------------------------------
81
+ # Nguon: Claude API pricing. USD / 1 TRIEU token. Quy uoc chung moi model:
82
+ # cache_write = 1.25x input (5-min TTL); cache_read = 0.1x input.
83
+ # PRICE_PER_MTOK = default/fallback (Opus 4.8) cho model khong nam trong
84
+ # PRICE_BY_MODEL. Chi phi tinh THEO TUNG MODEL qua price_for_model() (session dung
85
+ # ca Opus lan Haiku cho sub-agent → dinh gia phang mot model se lech).
86
+ PRICING_MODEL = "claude-opus-4-8"
87
+ PRICE_PER_MTOK = {
88
+ "input": 5.00, # input_tokens (uncached)
89
+ "cache_write": 6.25, # cache_creation_input_tokens (1.25x, ephemeral 5-min)
90
+ "cache_read": 0.50, # cache_read_input_tokens (0.1x)
91
+ "output": 25.00, # output_tokens
92
+ }
93
+ # Bang gia per-model (input, output tra cuu; cache_write=1.25x, cache_read=0.1x input).
94
+ # Key = base model id (đã bỏ hậu tố [1m]/-YYYYMMDD qua _price_norm).
95
+ PRICE_BY_MODEL = {
96
+ "claude-opus-4-8": {"input": 5.00, "cache_write": 6.25, "cache_read": 0.50, "output": 25.00},
97
+ "claude-opus-4-7": {"input": 5.00, "cache_write": 6.25, "cache_read": 0.50, "output": 25.00},
98
+ "claude-opus-4-6": {"input": 5.00, "cache_write": 6.25, "cache_read": 0.50, "output": 25.00},
99
+ "claude-sonnet-5": {"input": 3.00, "cache_write": 3.75, "cache_read": 0.30, "output": 15.00},
100
+ "claude-sonnet-4-6": {"input": 3.00, "cache_write": 3.75, "cache_read": 0.30, "output": 15.00},
101
+ "claude-sonnet-4-5": {"input": 3.00, "cache_write": 3.75, "cache_read": 0.30, "output": 15.00},
102
+ "claude-haiku-4-5": {"input": 1.00, "cache_write": 1.25, "cache_read": 0.10, "output": 5.00},
103
+ "claude-fable-5": {"input": 10.00, "cache_write": 12.50, "cache_read": 1.00, "output": 50.00},
104
+ "claude-mythos-5": {"input": 10.00, "cache_write": 12.50, "cache_read": 1.00, "output": 50.00},
105
+ }
106
+
107
+
108
+ def _price_norm(mid):
109
+ """Chuẩn hoá model_id thô → base id để tra PRICE_BY_MODEL (bỏ [1m]/-YYYYMMDD)."""
110
+ base = re.sub(r"\[.*?\]$", "", mid or "")
111
+ return re.sub(r"-\d{8}$", "", base)
112
+
113
+
114
+ def price_for_model(mid):
115
+ """Bảng giá 4 thành phần cho 1 model; fallback Opus 4.8 nếu model lạ."""
116
+ return PRICE_BY_MODEL.get(_price_norm(mid), PRICE_PER_MTOK)
117
+
118
+ # --- Model display names (model_id thô trong session JSONL → tên gọn) ----------
119
+ MODEL_NAMES = {
120
+ "claude-opus-4-8": "Opus 4.8", "claude-opus-4-7": "Opus 4.7", "claude-opus-4-6": "Opus 4.6",
121
+ "claude-sonnet-5": "Sonnet 5",
122
+ "claude-sonnet-4-6": "Sonnet 4.6", "claude-sonnet-4-5": "Sonnet 4.5",
123
+ "claude-haiku-4-5": "Haiku 4.5", "claude-fable-5": "Fable 5", "claude-mythos-5": "Mythos 5",
124
+ }
125
+
126
+
127
+ def model_label(mid):
128
+ """Chuẩn hoá model_id (bỏ hậu tố [1m]/-YYYYMMDD) rồi map sang tên gọn."""
129
+ if not mid:
130
+ return "unknown"
131
+ base = re.sub(r"\[.*?\]$", "", mid) # bỏ '[1m]'
132
+ base = re.sub(r"-\d{8}$", "", base) # bỏ date-suffix
133
+ return MODEL_NAMES.get(base, base)
134
+
135
+
136
+ def merge_models(dicts):
137
+ """Gộp nhiều dict {model_id:{input,output}} lại (cộng token)."""
138
+ out = {}
139
+ for d in dicts:
140
+ for mid, v in (d or {}).items():
141
+ o = out.setdefault(mid, {"input": 0, "output": 0})
142
+ o["input"] += v.get("input", 0)
143
+ o["output"] += v.get("output", 0)
144
+ return out
145
+
146
+
147
+ def model_share(by_model):
148
+ """{model_id: {input, output}} → 'Opus 4.8 (15%), Sonnet 4.6 (85%)' theo token total."""
149
+ if not by_model:
150
+ return "n/a"
151
+ tot = {}
152
+ for mid, v in by_model.items():
153
+ tot[model_label(mid)] = tot.get(model_label(mid), 0) + v.get("input", 0) + v.get("output", 0)
154
+ grand = sum(tot.values())
155
+ if not grand:
156
+ return "n/a"
157
+ items = sorted(tot.items(), key=lambda kv: -kv[1])
158
+ return ", ".join(f"{name} ({round(100 * t / grand)}%)" for name, t in items if t)
159
+
160
+ def read(path):
161
+ return path.read_text(encoding="utf-8") if path.exists() else ""
162
+
163
+
164
+ def parse_slices():
165
+ """slice_id -> [unit_id]; also unit_id -> slice_id, plus slice meta (type)."""
166
+ slice_units, unit_slice, slice_meta = {}, {}, {}
167
+ for f in sorted(SLICES_DIR.glob("SLICE-*.md")):
168
+ txt = read(f)
169
+ sid_m = re.search(r"SLICE-(\d+)", f.name)
170
+ sid = f"SLICE-{int(sid_m.group(1))}" if sid_m else f.stem
171
+ units = re.findall(r"-\s*\{\s*id:\s*([A-Z0-9-]+)", txt)
172
+ slice_units[sid] = units
173
+ for u in units:
174
+ unit_slice[u] = sid
175
+ stype = "HITL" if re.search(r"^type:\s*HITL", txt, re.M) else "AFK"
176
+ demo = (re.search(r"demo_status:\s*(\w+)", txt) or [None, "?"])[1]
177
+ slice_meta[sid] = {"type": stype, "demo_status": demo}
178
+ return slice_units, unit_slice, slice_meta
179
+
180
+
181
+ def section(txt, start_pat, end_pat=r"\n##\s"):
182
+ """Return text of the section starting at start_pat up to next end_pat."""
183
+ m = re.search(start_pat, txt)
184
+ if not m:
185
+ return ""
186
+ rest = txt[m.end():]
187
+ e = re.search(end_pat, rest)
188
+ return rest[: e.start()] if e else rest
189
+
190
+
191
+ def count_ac(txt):
192
+ """AC total + method. Prefer bold headers (**AC-N); fall back qua nhiều style.
193
+
194
+ Thứ tự ưu tiên: bold-header → numbered-bold (WGT) → referenced AC-id →
195
+ plain-list (BE/prose). Nhánh plain-list bắt unit BE liệt kê tiêu chí bằng
196
+ list thường (KHÔNG `**AC-N**`, KHÔNG AC-id) — nếu thiếu nhánh này, unit BE
197
+ trả 0 AC, làm mẫu số FPY lệch nguồn so với tử số `[Review][Patch]` và đẩy
198
+ FPY xuống âm (xem build(): guard `fpy_ac`)."""
199
+ ac_sec = section(txt, r"##\s*Acceptance Criteria")
200
+ bold = set(re.findall(r"\*\*AC-?(\d+)", ac_sec)) # **AC-N —** header style
201
+ numbered = re.findall(r"^\d+\.\s+\*\*", ac_sec, re.M) # N. **Title.** list style (WGT)
202
+ if len(bold) > 1:
203
+ return len(bold), "bold-header"
204
+ if len(numbered) > 1:
205
+ return len(numbered), "numbered-list"
206
+ refs = set(re.findall(r"\bAC-?(\d+)\b", ac_sec))
207
+ if len(refs) > 1:
208
+ return len(refs), "referenced"
209
+ # BE/prose: list thường top-level (không thụt đầu dòng → khỏi đếm sub-bullet
210
+ # giải thích). Lấy max(numbered, bullet) để không cộng dồn 2 kiểu list.
211
+ plain = max(len(re.findall(r"^\d+\.\s+\S", ac_sec, re.M)),
212
+ len(re.findall(r"^[-*]\s+\S", ac_sec, re.M)))
213
+ if plain > 1:
214
+ return plain, "plain-list"
215
+ return (len(refs), "referenced") if refs else (0, "none")
216
+
217
+
218
+ def count_ac_churn(txt):
219
+ """AC status changes flagged in the AC callout: [vN] [cancelled] [defer] [vN-caveat].
220
+ `vN` khớp MỌI số phiên ([v2]/[v3]/[v4]/...) — trước đây hardcode 'v3' nên AC
221
+ đổi ở phiên khác bị sót im lặng, làm 'tỉ lệ yêu cầu đổi giữa chừng' hụt."""
222
+ ac_sec = section(txt, r"##\s*Acceptance Criteria")
223
+ tags = re.findall(r"\[(v\d+(?:-caveat)?|cancelled|defer)\]", ac_sec)
224
+ by = defaultdict(int)
225
+ for t in tags:
226
+ by[t] += 1
227
+ return len(tags), dict(by)
228
+
229
+
230
+ def count_deviations(txt):
231
+ """Explicit 'DEVIATION N' tokens + numbered items under a 'Deviation' labelled
232
+ bullet. DEDUP within-doc: 1 numbered child mang sẵn token `DEVIATION N` thì đã
233
+ nằm trong `explicit` (set theo số) → KHÔNG cộng lần 2. Trước đây
234
+ `len(explicit) + listed` chồng nhau khi story vừa đánh số `DEVIATION N` vừa liệt
235
+ kê chính nó dưới header 'Deviations:' → phồng số lệch."""
236
+ explicit = set(re.findall(r"DEVIATION ?(\d+)", txt, re.I))
237
+ listed_extra = 0
238
+ # find a bullet/line that introduces a deviation list, count its numbered children
239
+ for m in re.finditer(r"Deviations?\b[^\n]*:[^\n]*\n", txt):
240
+ block = txt[m.end():]
241
+ stop = re.search(r"\n#{2,3}\s|\n- \*\*[^D]", block) # next section or next top bullet
242
+ block = block[: stop.start()] if stop else block
243
+ for ln in re.findall(r"^\s+\d+\.\s+\*\*.*$", block, re.M):
244
+ # child có token `DEVIATION N` → đã đếm ở `explicit`; chỉ child KHÔNG
245
+ # mang token mới là deviation chưa được đếm.
246
+ if not re.search(r"DEVIATION ?\d+", ln, re.I):
247
+ listed_extra += 1
248
+ return len(explicit) + listed_extra
249
+
250
+
251
+ def count_findings(txt):
252
+ return (len(re.findall(r"\[Review\]\[Patch\]", txt)),
253
+ len(re.findall(r"\[Review\]\[Defer\]", txt)))
254
+
255
+
256
+ # ── Phân loại patch cho F-FPY (Functional First-Pass Yield) ──────────────────
257
+ # Mục tiêu chỉ số: "tính năng chạy ĐÚNG SPEC sau lần code đầu từ spec+design".
258
+ # CHỈ lỗi chức năng (luồng chính / AC sai) mới trừ điểm. Lỗi bảo mật, edge-case,
259
+ # chất lượng/convention = feature VẪN chạy, chỉ cần gia cố → KHÔNG trừ F-FPY.
260
+ #
261
+ # Anchor: 3 layer review của `/bmad-code-review` map gần 1:1 với phân loại này —
262
+ # Acceptance Auditor → đúng AC/chức năng (TÍNH vào F-FPY)
263
+ # Edge Case Hunter → biên/hiếm (loại)
264
+ # Blind Hunter → adversarial/bảo mật (loại)
265
+ # Patch corpus tự gắn tag lăng kính `(auditor)` / `(blind+edge)` / ... ở cuối bullet.
266
+ _HUNTER_PAREN = re.compile(r"\(([^)]*\b(?:blind|edge|auditor|acceptance)\b[^)]*)\)", re.I)
267
+ # T2 fallback (story KHÔNG tag — 6/17 story HUB rơi vào đây): lexicon nội dung.
268
+ _AC_REF = re.compile(r"\bAC-?\d+\b")
269
+ _FUNC_VERB = re.compile(
270
+ r"\b(sai|thiếu|lệch\s*DD|broken|wrong|incorrect|missing|mismatch|fails?\b|"
271
+ r"does\s*n.?t|returns?\s+(?:wrong|null|sai))\b"
272
+ r"|không\s+(?:trả|chạy|đúng|match|khớp|hoạt động)"
273
+ r"|chưa\s+(?:đúng|implement|trả|chạy)", re.I)
274
+ _SEC = re.compile(
275
+ r"\b(password|token|auth|inject|mask(?:ing|ed)?|vault|signature|secret|TLS|"
276
+ r"SSRF|XSS|CSRF|leak|sanitiz|escap|defen[cs]e[- ]in[- ]depth|hardening|poison)\b", re.I)
277
+ _EDGE = re.compile(
278
+ r"\b(edge|boundary|biên|race|concurren|overflow|null[- ]?check|empty|rỗng|"
279
+ r"hiếm|rare|DLQ|retry|backoff|timeout|idempoten)\b", re.I)
280
+ _QUAL = re.compile(
281
+ r"\b(convention|naming|lint|refactor|dead\s*code|log[- ]?level|style|"
282
+ r"observability|gauge|metric|magic\s*number|đặt\s*tên)\b", re.I)
283
+
284
+
285
+ def _excl_class(text):
286
+ """Lớp của 1 patch bị loại khỏi F-FPY, ưu tiên bảo mật > edge > chất lượng."""
287
+ if _SEC.search(text):
288
+ return "security"
289
+ if _EDGE.search(text):
290
+ return "edge"
291
+ if _QUAL.search(text):
292
+ return "quality"
293
+ return None
294
+
295
+
296
+ def classify_patch(text):
297
+ """Phân loại 1 patch review → (bucket, method, klass).
298
+
299
+ bucket: 'functional' = Acceptance Auditor / luồng AC hỏng → TÍNH vào F-FPY
300
+ 'excluded' = bảo mật / edge / chất lượng → feature vẫn chạy, chỉ gia cố
301
+ 'unclassified' = không đủ tín hiệu → KHÔNG ngầm tính clean, report riêng
302
+ method: 'tag' (lăng kính review — tin cao) > 'inferred' (lexicon) > 'unclassified'
303
+ klass : với 'excluded' = 'security'|'edge'|'quality'; còn lại None."""
304
+ tags = _HUNTER_PAREN.findall(text)
305
+ if tags:
306
+ joined = " ".join(tags).lower()
307
+ if re.search(r"\b(auditor|acceptance)\b", joined):
308
+ return "functional", "tag", None
309
+ return "excluded", "tag", (_excl_class(text) or ("edge" if "edge" in joined else "security"))
310
+ # T2 — không tag: dẫn AC-id + động từ hỏng chức năng ⇒ functional
311
+ if _AC_REF.search(text) and _FUNC_VERB.search(text):
312
+ return "functional", "inferred", None
313
+ klass = _excl_class(text)
314
+ if klass:
315
+ return "excluded", "inferred", klass
316
+ return "unclassified", "unclassified", None
317
+
318
+
319
+ def parse_patches(txt):
320
+ """Trích từng bullet `[Review][Patch]` (gồm dòng wrap) để classify. Marker chỉ
321
+ xuất hiện ở checklist Patch — Change Log narrative ghi 'N patch' nên không lẫn."""
322
+ out = []
323
+ for m in re.finditer(r"\[Review\]\[Patch\]", txt):
324
+ seg = txt[m.end():]
325
+ stop = re.search(r"\n\s*[-*]\s|\n#{1,6}\s|\n\s*\n", seg) # bullet/heading/blank kế tiếp
326
+ out.append(seg[: stop.start()] if stop else seg[:400])
327
+ return out
328
+
329
+
330
+ def classify_unit_patches(txt):
331
+ """Gộp classify mọi patch của 1 unit → dict đếm + method trội + breakdown lớp loại."""
332
+ func = excl = uncl = 0
333
+ excl_by = defaultdict(int)
334
+ methods = set()
335
+ for p in parse_patches(txt):
336
+ bucket, method, klass = classify_patch(p)
337
+ methods.add(method)
338
+ if bucket == "functional":
339
+ func += 1
340
+ elif bucket == "excluded":
341
+ excl += 1
342
+ excl_by[klass] += 1
343
+ else:
344
+ uncl += 1
345
+ # method trội phục vụ cờ độ tin: 'tag' (story có tag) > 'inferred' > 'none'
346
+ pm = "tag" if "tag" in methods else ("inferred" if "inferred" in methods else "none")
347
+ return {
348
+ "functional_patch": func,
349
+ "patch_excluded": excl,
350
+ "patch_unclassified": uncl,
351
+ "patch_excluded_by": dict(excl_by),
352
+ "patch_class_method": pm,
353
+ }
354
+
355
+
356
+ def count_changelog(txt):
357
+ """Số lần CẬP NHẬT sau khi tạo unit = (số dòng Change Log có ngày) − 1.
358
+ Dòng đầu tiên = dòng khai sinh (tạo story / scaffold), không tính là 'thay đổi'.
359
+ Clamp max(0, …) để unit thiếu Change Log không ra số âm. Lưu ý heuristic: giả
360
+ định dòng-1 luôn là dòng tạo; nếu Change Log bắt đầu giữa chừng sẽ hụt 1."""
361
+ # end_pat chặn ở `##` HOẶC `###` kế tiếp: Change Log thường là `###`, mặc định
362
+ # `\n##\s` không dừng ở `###` sau nó → đọc lố sang section khác có bảng `| 20xx-`.
363
+ sec = section(txt, r"#{2,3}\s*Change Log", end_pat=r"\n#{2,3}\s")
364
+ rows = len(re.findall(r"^\|\s*20\d{2}-", sec, re.M))
365
+ return max(0, rows - 1)
366
+
367
+
368
+ def find_unit_story(unit_id):
369
+ """Định vị file story Stage 5 của unit_id, KHOAN DUNG khi AI ảo giác và tự
370
+ chèn tiền tố lạ vào tên file (vd `STORY-SCR-FOO.md`, `1.2-SCR-FOO.md`,
371
+ `slice3_MPF-01.md`). Tìm theo unit_id trước, rồi mới nới regex:
372
+
373
+ 1. Khớp đúng: S5/{unit_id}.md (canonical — skill emit chuẩn)
374
+ 2. Khớp đuôi: S5/*.md có stem KẾT THÚC bằng {unit_id} tại token boundary
375
+ (AI thêm prefix nhưng giữ nguyên unit_id ở cuối)
376
+ 3. Khớp giữa: S5/*.md có stem CHỨA {unit_id} giữa 2 token boundary
377
+ (unit_id bị kẹp giữa prefix lẫn suffix lạ)
378
+
379
+ Trả về Path (kể cả khi không tồn tại) để caller vẫn read() bình thường."""
380
+ exact = S5 / f"{unit_id}.md"
381
+ if exact.exists() or not S5.is_dir():
382
+ return exact
383
+ uid = re.escape(unit_id)
384
+ suffix_re = re.compile(rf"(?:^|[^A-Za-z0-9]){uid}$") # ...-{uid}
385
+ embed_re = re.compile(rf"(?:^|[^A-Za-z0-9]){uid}(?:[^A-Za-z0-9]|$)") # ...{uid}...
386
+ suffix_hits, embed_hits = [], []
387
+ for f in sorted(S5.glob("*.md")):
388
+ if f.stem == unit_id: # phòng race với check exact ở trên
389
+ return f
390
+ if suffix_re.search(f.stem):
391
+ suffix_hits.append(f)
392
+ elif embed_re.search(f.stem):
393
+ embed_hits.append(f)
394
+ pool = suffix_hits or embed_hits
395
+ if pool:
396
+ # stem ngắn nhất = ít rác ảo giác bao quanh unit_id thật nhất
397
+ best = min(pool, key=lambda p: len(p.stem))
398
+ print(f"[eval-harvester] story '{unit_id}' khớp mờ qua tên file "
399
+ f"'{best.name}' (đã khoan dung tiền tố ảo giác)")
400
+ return best
401
+ return exact
402
+
403
+
404
+ def parse_unit(unit_id):
405
+ txt = read(find_unit_story(unit_id))
406
+ if not txt:
407
+ return None
408
+ ac, ac_method = count_ac(txt)
409
+ churn, churn_by = count_ac_churn(txt)
410
+ patch, rdefer = count_findings(txt)
411
+ rec = {
412
+ "unit": unit_id,
413
+ "ac_total": ac,
414
+ "ac_count_method": ac_method,
415
+ "ac_churn": churn,
416
+ "ac_churn_by": churn_by,
417
+ "deviations": count_deviations(txt),
418
+ "review_patch": patch,
419
+ "review_defer": rdefer,
420
+ "changelog_rows": count_changelog(txt),
421
+ }
422
+ rec.update(classify_unit_patches(txt)) # F-FPY: tách patch chức năng vs gia cố
423
+ return rec
424
+
425
+
426
+ def _parse_date(s):
427
+ if not s:
428
+ return None
429
+ m = re.match(r"(\d{4})-(\d{2})-(\d{2})", s)
430
+ return datetime.date(int(m.group(1)), int(m.group(2)), int(m.group(3))) if m else None
431
+
432
+
433
+ def parse_defers(unit_slice):
434
+ """Parse the defer-ledger từ `deferred-work.md`. Đọc HAI format (G1 —
435
+ xem NTAPP_Evaluation/harvester_upgrade.md):
436
+
437
+ 1. Block giàu trường `### DEF-<ID> — title` + opened/status/category/
438
+ avoidable/... → record đầy đủ (`source='ledger'`). Chuẩn lý tưởng,
439
+ hiện chưa skill nào phát.
440
+ 2. Bullet `- [x] [Review][Defer] <title> [file:line] — reason` dưới heading
441
+ `## Deferred from: <nguồn> (<date>)` — ĐÂY là format `bmad-code-review`
442
+ đang phát. Sinh record NHẸ (`source='bullet'`, avoidable=None vì thiếu
443
+ trường) qua _parse_defer_bullets(). Trước G1 các bullet này bị bỏ qua
444
+ hoàn toàn → defer_count=0 dù review sinh defer.
445
+
446
+ Consumer-only: harvester đọc hiểu artifact skill phát, KHÔNG sửa skill."""
447
+ txt = read(S5 / "deferred-work.md")
448
+ defers = []
449
+ for chunk in txt.split("\n### ")[1:]:
450
+ first, _, body = chunk.partition("\n")
451
+ h = re.match(r"(DEF-[A-Z0-9-]+)\s*[—-]+\s*(.*)", first)
452
+ if not h:
453
+ continue
454
+ did, title = h.group(1), h.group(2).strip()
455
+
456
+ def field(key, default=None):
457
+ m = re.search(rf"\b{key}:\s*([^\n·]+)", body)
458
+ return m.group(1).strip() if m else default
459
+
460
+ opened = _parse_date(field("opened"))
461
+ closed = _parse_date(field("closed"))
462
+ status = (field("status", "open") or "open").lower()
463
+ age_days = ((closed or AS_OF) - opened).days if opened else None
464
+ defers.append({
465
+ "id": did,
466
+ "title": title,
467
+ "slice": field("slice") or unit_slice.get((field("unit") or "").strip()),
468
+ "unit": field("unit"),
469
+ "owner": field("owner"),
470
+ "category": field("category", "uncategorized"),
471
+ "avoidable": (field("avoidable", "no") or "no").lower() == "yes",
472
+ "severity": field("severity"),
473
+ "status": status,
474
+ "opened": opened.isoformat() if opened else None,
475
+ "closed": closed.isoformat() if closed else None,
476
+ "age_days": age_days,
477
+ "blocking_condition": field("blocking-condition"),
478
+ "target_reentry": field("target-reentry"),
479
+ "excludable_by": _norm_excludable(field("excludable-by")),
480
+ "source": "ledger",
481
+ })
482
+ defers.extend(_parse_defer_bullets(txt, unit_slice))
483
+ return defers
484
+
485
+
486
+ def _parse_defer_bullets(txt, unit_slice):
487
+ """Format bullet mà bmad-code-review phát (G1). Heading
488
+ `## Deferred from: <nguồn> (<date>)` + bullet `[Review][Defer]`. Record NHẸ:
489
+ thiếu category/avoidable nên để consumer ĐO ĐƯỢC capture-rate, nhưng KHÔNG
490
+ đưa vào mẫu số avoidability (`avoidable=None`) — không suy diễn bừa."""
491
+ records = []
492
+ units = sorted((u for u in unit_slice if u), key=len, reverse=True) # khớp dài trước
493
+ for part in re.split(r"\n##\s+Deferred from:\s*", txt)[1:]:
494
+ head, _, body = part.partition("\n")
495
+ dm = re.search(r"\((\d{4}-\d{2}-\d{2})\)", head)
496
+ opened = _parse_date(dm.group(1)) if dm else None
497
+ unit = next((u for u in units if u in head), None) # nguồn chứa unit_id đã biết?
498
+ sid = unit_slice.get(unit) if unit else None
499
+ seq = 0
500
+ for line in body.splitlines():
501
+ if line.startswith("## "): # sang section khác cùng cấp → dừng
502
+ break
503
+ if "[Review][Defer]" not in line:
504
+ continue
505
+ seq += 1
506
+ title = re.sub(r"^[\s>*-]*\[[ xX]\]\s*\[Review\]\[Defer\]\s*", "", line).strip()
507
+ records.append({
508
+ # 'rev' = phân biệt với DEF-<ID> block giàu, tránh trùng id.
509
+ "id": f"DEF-{(unit or 'REVIEW')}-rev{seq}",
510
+ "title": title[:120],
511
+ "slice": sid,
512
+ "unit": unit,
513
+ "owner": None,
514
+ "category": "uncategorized",
515
+ "avoidable": None, # unknown — loại khỏi mẫu số EFF-7
516
+ "severity": None,
517
+ "status": "open", # defer = nợ đang mở
518
+ "opened": opened.isoformat() if opened else None,
519
+ "closed": None,
520
+ "age_days": ((AS_OF - opened).days if opened else None),
521
+ "blocking_condition": None,
522
+ "target_reentry": None,
523
+ "excludable_by": None,
524
+ "source": "bullet",
525
+ })
526
+ return records
527
+
528
+
529
+ def _norm_excludable(v):
530
+ """Normalise excludable-by; treat dash/empty as scattered (no single-action close)."""
531
+ if not v or v.strip() in {"—", "-", "none", "n/a"}:
532
+ return None
533
+ return v.strip()
534
+
535
+
536
+ def cluster_defers(defers):
537
+ """Group OPEN defers by excludable-by action. Returns sorted list of clusters."""
538
+ by = defaultdict(lambda: {"count": 0, "avoidable": 0, "slices": set(), "ids": []})
539
+ scattered = {"count": 0, "avoidable": 0, "slices": set(), "ids": []}
540
+ for d in defers:
541
+ if d["status"] == "closed":
542
+ continue
543
+ bucket = by[d["excludable_by"]] if d["excludable_by"] else scattered
544
+ bucket["count"] += 1
545
+ bucket["avoidable"] += 1 if d["avoidable"] else 0
546
+ bucket["slices"].add(d["slice"])
547
+ bucket["ids"].append(d["id"])
548
+ out = [{"action": k, **v, "slices": sorted(v["slices"])} for k, v in by.items()]
549
+ out.sort(key=lambda c: (-c["count"], c["action"]))
550
+ scat = {"action": "— (rải rác)", **scattered, "slices": sorted(scattered["slices"])}
551
+ return out, scat
552
+
553
+
554
+ # ============================================================================
555
+ # Drift gate L3↔L2 (G8) — đọc drift_report_*.md ở Stage_4_Design/ui_schema.
556
+ # Đo số lệch thiết-kế(L3) ↔ hợp-đồng-dữ-liệu(L2) BẮT ĐƯỢC ở cổng thiết kế trước
557
+ # khi vào code. Format thực tế biến thiên: item dạng `### Item N`, `### NB-N`,
558
+ # `- **Item N**`; section `## [BLOCKING]/[NON-BLOCKING]/[RECONCILED]` (có thể kèm
559
+ # hậu tố `— RECONCILED`); section rỗng ghi `(none …)`. Mỗi unit có thể có 2 file
560
+ # (flat `drift_report_<ID>.md` + nested `<ID>/drift_report.md`, re-run) → dedup
561
+ # theo ngày mới nhất. Đây là heuristic đếm — không phải phán xử.
562
+ # ============================================================================
563
+ DRIFT_ITEM_RE = re.compile(r"^[ \t]*(?:#{3,4}[ \t]+|[-*][ \t]+\*\*)(?:Item\b|NB-|N\d+\b)[^\n]*", re.M)
564
+ DRIFT_H2_RE = re.compile(r"^##\s+(.*)$", re.M)
565
+
566
+
567
+ def _drift_unit_from_path(p):
568
+ if p.name == "drift_report.md":
569
+ return p.parent.name
570
+ m = re.match(r"drift_report_(.+)\.md$", p.name)
571
+ return m.group(1) if m else p.stem
572
+
573
+
574
+ def _drift_date(txt):
575
+ head = "\n".join(txt.splitlines()[:14]) # header blockquote
576
+ m = re.search(r"\b(20\d{2}-\d{2}-\d{2})\b", head)
577
+ return m.group(1) if m else None
578
+
579
+
580
+ def _drift_item_key(text):
581
+ """ID phân biệt của 1 drift item từ dòng tiêu đề (`Item 3` / `NB-2` / `N4`).
582
+ Giữ NGUYÊN loại (item/nb/n) để `NB-2` ≠ `Item 2`. None nếu không bắt được số →
583
+ item không định danh, KHÔNG dedup được (đếm thô như cũ)."""
584
+ m = re.search(r"\bItem\s*(\d+)\b|\bNB-?(\d+)\b|\bN(\d+)\b", text, re.I)
585
+ if not m:
586
+ return None
587
+ if m.group(1):
588
+ return "item" + m.group(1)
589
+ if m.group(2):
590
+ return "nb" + m.group(2)
591
+ return "n" + m.group(3)
592
+
593
+
594
+ def _drift_section_items(body):
595
+ """(active_ids, recon_ids, active_idless, recon_idless) của 1 section. `*_ids` =
596
+ list ID drift item (để dedup xuyên section ở `_parse_one_drift`); `*_idless` = số
597
+ item KHÔNG định danh (đếm thô). '(none' → rỗng, nhưng vớt được số trong câu
598
+ '… N (historic) items reconciled' (prose-only re-run) để khỏi hụt im lặng."""
599
+ for line in body.splitlines():
600
+ s = line.strip()
601
+ if not s or s.startswith(">"):
602
+ continue
603
+ if s.lower().startswith("(none"):
604
+ pm = re.search(r"(\d+)\s+(?:historic\s+)?items?\s+reconciled", body, re.I)
605
+ return [], [], 0, (int(pm.group(1)) if pm else 0)
606
+ break
607
+ a_ids, r_ids, a_idless, r_idless = [], [], 0, 0
608
+ for m in DRIFT_ITEM_RE.finditer(body):
609
+ key = _drift_item_key(m.group(0))
610
+ if "RECONCILED" in m.group(0).upper():
611
+ r_ids.append(key) if key else None
612
+ r_idless += 0 if key else 1
613
+ else:
614
+ a_ids.append(key) if key else None
615
+ a_idless += 0 if key else 1
616
+ return a_ids, r_ids, a_idless, r_idless
617
+
618
+
619
+ # Precedence khi 1 item-id xuất hiện ở nhiều section: trạng thái "mới/đã giải quyết
620
+ # hơn" thắng — reconciled > blocking > nonblocking. Tránh đếm 1 item cả ở BLOCKING
621
+ # lẫn RECONCILED (lifecycle move) thành 2.
622
+ _DRIFT_PREC = {"nonblocking": 0, "blocking": 1, "reconciled": 2}
623
+
624
+
625
+ def _parse_one_drift(txt, unit):
626
+ rec = {"unit": unit, "date": _drift_date(txt),
627
+ "blocking": 0, "reconciled": 0, "nonblocking": 0,
628
+ "gate_outcome": None, "res_l2": 0, "res_l3": 0}
629
+ item_bucket = {} # id → bucket cuối (dedup xuyên section)
630
+ idless = {"blocking": 0, "reconciled": 0, "nonblocking": 0}
631
+
632
+ def assign(key, bucket):
633
+ cur = item_bucket.get(key)
634
+ if cur is None or _DRIFT_PREC[bucket] > _DRIFT_PREC[cur]:
635
+ item_bucket[key] = bucket
636
+
637
+ heads = list(DRIFT_H2_RE.finditer(txt))
638
+ for i, m in enumerate(heads):
639
+ tm = re.match(r"\[(BLOCKING|NON-BLOCKING|RECONCILED)\]", m.group(1))
640
+ if not tm:
641
+ continue
642
+ tag = tm.group(1)
643
+ sec_reconciled = "RECONCILED" in m.group(1).upper()
644
+ end = heads[i + 1].start() if i + 1 < len(heads) else len(txt)
645
+ a_ids, r_ids, a_idless, r_idless = _drift_section_items(txt[m.end():end])
646
+ if tag == "NON-BLOCKING":
647
+ for k in a_ids + r_ids:
648
+ assign(k, "nonblocking")
649
+ idless["nonblocking"] += a_idless + r_idless
650
+ elif tag == "RECONCILED":
651
+ for k in a_ids + r_ids:
652
+ assign(k, "reconciled")
653
+ idless["reconciled"] += a_idless + r_idless
654
+ else: # BLOCKING (có thể đã reconciled qua hậu tố section hoặc per-item)
655
+ if sec_reconciled:
656
+ for k in a_ids + r_ids:
657
+ assign(k, "reconciled")
658
+ idless["reconciled"] += a_idless + r_idless
659
+ else:
660
+ for k in a_ids:
661
+ assign(k, "blocking")
662
+ for k in r_ids:
663
+ assign(k, "reconciled")
664
+ idless["blocking"] += a_idless
665
+ idless["reconciled"] += r_idless
666
+ for b in item_bucket.values(): # mỗi item-id chỉ tính 1 lần
667
+ rec[b] += 1
668
+ for b, n in idless.items():
669
+ rec[b] += n
670
+ rec["res_l2"] = len(re.findall(r"\[L2\]|update L2", txt, re.I))
671
+ rec["res_l3"] = len(re.findall(r"\[L3\]|update L3", txt, re.I))
672
+ # Cổng = đọc RIÊNG dòng Verdict/Outcome (fallback Status) — không quét cả doc,
673
+ # vì 'HALT' hay xuất hiện khi mô tả lần chạy TRƯỚC → false positive.
674
+ vm = re.search(r"(?im)^\s*>?\s*\*\*(?:Verdict|Outcome)\b[^\n]*", txt) \
675
+ or re.search(r"(?im)^\s*>?\s*\*\*Status:[^\n]*", txt)
676
+ vline = vm.group(0).upper() if vm else ""
677
+ if "HALT" in vline:
678
+ rec["gate_outcome"] = "halted"
679
+ elif re.search(r"NO BLOCKING|PASS|PROCEED|RESOLVED|UNBLOCK", vline):
680
+ rec["gate_outcome"] = "proceeded"
681
+ else:
682
+ rec["gate_outcome"] = "halted" if rec["blocking"] else "proceeded"
683
+ return rec
684
+
685
+
686
+ def parse_drift_reports(ui_dir=None):
687
+ """Đọc mọi drift_report ở Stage_4_Design/ui_schema → đếm BLOCKING/RECONCILED/
688
+ NON-BLOCKING bắt ở cổng thiết kế (G8). Dedup 2 file/unit theo ngày mới nhất
689
+ (tie → bản nested re-run thắng)."""
690
+ d = ui_dir or UI_SCHEMA_DIR
691
+ out = {"available": False, "reports": 0, "blocking": 0, "reconciled": 0,
692
+ "nonblocking": 0, "halted": 0, "res_l2": 0, "res_l3": 0, "by_unit": {}}
693
+ if not d.exists():
694
+ return out
695
+ files = sorted(d.glob("drift_report_*.md")) + sorted(d.glob("*/drift_report.md"))
696
+ if not files:
697
+ return out
698
+ best = {} # unit -> (sortkey, record)
699
+ for f in files:
700
+ txt = read(f)
701
+ if not txt:
702
+ continue
703
+ unit = _drift_unit_from_path(f)
704
+ rec = _parse_one_drift(txt, unit)
705
+ key = (rec["date"] or "", 1 if f.name == "drift_report.md" else 0)
706
+ if unit not in best or key > best[unit][0]:
707
+ best[unit] = (key, rec)
708
+ out["available"] = True
709
+ out["reports"] = len(best)
710
+ for unit, (_, rec) in sorted(best.items()):
711
+ out["by_unit"][unit] = rec
712
+ for k in ("blocking", "reconciled", "nonblocking", "res_l2", "res_l3"):
713
+ out[k] += rec[k]
714
+ out["halted"] += 1 if rec["gate_outcome"] == "halted" else 0
715
+ return out
716
+
717
+
718
+ def parse_rework():
719
+ """unit -> archived DD versions (current = archived + 1)."""
720
+ rework = defaultdict(int)
721
+ for f in DD_ARCHIVE.glob("*_detailed_design_v*.md"):
722
+ m = re.match(r"(.+)_detailed_design_v(\d+)", f.name)
723
+ if m:
724
+ rework[m.group(1)] = max(rework[m.group(1)], int(m.group(2)))
725
+ return dict(rework)
726
+
727
+
728
+ # ============================================================================
729
+ # CR & drift trong Detailed Design L3 (G10) — đọc detailed_design/*_detailed_design.md.
730
+ # DD chứa 3 khối tín hiệu mà trước đây harvester KHÔNG đọc (chỉ cân token-proxy):
731
+ # 1. `## BẢNG LỊCH SỬ THAY ĐỔI` — bảng CR/change-history (cột Link CR/Jira, A/M/D,
732
+ # Phiên bản). count_changelog cũ khớp 'Change Log' tiếng Anh + chỉ chạy trên
733
+ # story Stage-5 → bảng này vô hình.
734
+ # 2. `### 1.2 Drift resolution log` — bảng D1..Dn (L3↔TechSpec). Khác hẳn G8
735
+ # (G8 = drift UI L3↔L2 schema ở ui_schema/drift_report). Với feature BE
736
+ # (id_type=feature_id, không UI) KHÔNG có drift_report → §1.2 là NGUỒN DRIFT
737
+ # DUY NHẤT. Bổ khuyết điểm mù drift BE.
738
+ # 3. `[TBD-confirm]` / `[TBD…]` — quyết định thiết kế treo (defer ở tầng thiết kế).
739
+ # Heuristic đếm theo cấu trúc bảng markdown — không phải phán xử. Bù trục C
740
+ # (Defer / CR / Change Log) vốn chỉ đọc từ Stage-5.
741
+ # ============================================================================
742
+ def _md_table(block):
743
+ """(headers, rows) của bảng markdown đầu tiên trong block. headers = list cell
744
+ dòng tiêu đề; rows = list[list cell] data. Bỏ separator (:---); dừng ở dòng
745
+ đầu tiên KHÔNG bắt đầu '|' sau khi bảng đã mở."""
746
+ cells_rows, started = [], False
747
+ for ln in block.splitlines():
748
+ s = ln.strip()
749
+ if not s.startswith("|"):
750
+ if started:
751
+ break
752
+ continue
753
+ started = True
754
+ if re.fullmatch(r"[:\-\s|]+", s): # dòng separator
755
+ continue
756
+ cells_rows.append([c.strip() for c in s.strip("|").split("|")])
757
+ if not cells_rows:
758
+ return [], []
759
+ return cells_rows[0], cells_rows[1:]
760
+
761
+
762
+ def _col_idx(headers, *keywords):
763
+ """Index cột đầu tiên có header chứa 1 trong keywords (lower-case substring)."""
764
+ for i, h in enumerate(headers):
765
+ hl = h.lower()
766
+ if any(k in hl for k in keywords):
767
+ return i
768
+ return None
769
+
770
+
771
+ # Ticket CR/Jira THẬT: token `CR-123`/`CR 123`, hoặc URL Jira/Atlassian/`/browse/`.
772
+ # Cố ý KHÔNG nhận: `[TBD]`, story-ref ('E3 Story 3.2'), tên file, prose, URL bất kỳ
773
+ # (staging/schema URL lẫn trong mô tả), và KHÔNG nhận `[A-Z]{2,}-\d+` vì đụng chính
774
+ # WBS-ID (`HUB-12`/`PMT-EXT-01`). Tác giả DD điền cột "Link CR/Jira" rất tùy tiện nên
775
+ # 'có chữ' ≠ 'có CR ngoài' — pattern chặt để cr_ticketed không bị thổi. Vẫn portable:
776
+ # project thật sự dùng Jira (link `/browse/PROJ-123`) vẫn bắt được.
777
+ DD_TICKET_RE = re.compile(r"\bCR[-\s]?\d+\b|https?://\S*(?:jira|atlassian|/browse/)", re.I)
778
+
779
+
780
+ # G11 — tombstone (DD của feature bị XÓA theo CR): header `dd_version: v*-removed`
781
+ # hoặc banner `🚫 REMOVED` ở đầu file. Đây KHÔNG phải deliverable sống → tách khỏi
782
+ # mẫu số DD, drift/CR/TBD; surface riêng thành tín hiệu trục-C scope-removal. Quét
783
+ # 800 ký tự đầu (header + banner). Bắt kèm CR-id để quy nhóm. Consumer-only: harvester
784
+ # nhận diện format skill ĐÃ emit (`-removed` + `🚫 REMOVED`), không sửa skill gốc.
785
+ DD_REMOVED_RE = re.compile(
786
+ r"dd_version:\s*v[\w.]*-removed|🚫\s*\*{0,2}\s*REMOVED\b|—\s*REMOVED\s*$", re.I | re.M)
787
+ DD_REMOVED_CR_RE = re.compile(r"\bCR-[A-Z0-9][A-Z0-9-]*\b")
788
+
789
+
790
+ def _dd_removed_info(txt):
791
+ """Nếu DD là tombstone (feature bị xóa theo CR) → {removed: True, cr, date}; ngược
792
+ lại {removed: False}. Chỉ soi 800 ký tự đầu (header + banner XÓA)."""
793
+ head = txt[:800]
794
+ if not DD_REMOVED_RE.search(head):
795
+ return {"removed": False}
796
+ crm = DD_REMOVED_CR_RE.search(head)
797
+ dm = re.search(r"REMOVED\s+(\d{4}-\d{2}-\d{2})", head)
798
+ return {"removed": True, "cr": crm.group(0) if crm else None,
799
+ "date": dm.group(1) if dm else None}
800
+
801
+
802
+ def _dd_cr_table(txt):
803
+ """Bảng `## BẢNG LỊCH SỬ THAY ĐỔI` → cr_total (= số lần sửa DD, tín hiệu chính),
804
+ cr_ticketed (số dòng có link CR/Jira NGOÀI chính thức — strict), A/M/D, version,
805
+ D-id tham chiếu. Map cột theo tên tiêu đề (chịu được DD đổi thứ tự cột)."""
806
+ block = section(txt, r"##\s*BẢNG LỊCH SỬ THAY ĐỔI", end_pat=r"\n##\s")
807
+ headers, rows = _md_table(block)
808
+ if not rows:
809
+ return None
810
+ i_type = _col_idx(headers, "a*", "a, m", "m, d") # cột A/M/D
811
+ i_cr = _col_idx(headers, "cr", "jira")
812
+ i_ver = _col_idx(headers, "phiên bản", "version")
813
+ i_desc = _col_idx(headers, "mô tả")
814
+ by_type, versions, drift_refs = defaultdict(int), set(), set()
815
+ total = ticketed = 0
816
+ for r in rows:
817
+ total += 1
818
+ if i_cr is not None and i_cr < len(r) and DD_TICKET_RE.search(r[i_cr]):
819
+ ticketed += 1
820
+ if i_type is not None and i_type < len(r):
821
+ for t in re.findall(r"\b([AMD])\b", r[i_type]):
822
+ by_type[t] += 1
823
+ if i_ver is not None and i_ver < len(r):
824
+ vm = re.search(r"v\d+(?:\.\d+)*", r[i_ver])
825
+ if vm:
826
+ versions.add(vm.group(0))
827
+ if i_desc is not None and i_desc < len(r):
828
+ for d in re.findall(r"\bD\d+\b", r[i_desc]):
829
+ drift_refs.add(d)
830
+ return {"cr_total": total, "cr_ticketed": ticketed,
831
+ "by_type": dict(by_type), "versions": versions, "drift_refs": drift_refs}
832
+
833
+
834
+ # --- G10 drift: per-unit VERDICT, KHÔNG đếm per-item `Dn` ---------------------
835
+ # Validate trên 13 file có section drift cho thấy ID drift đa convention
836
+ # (`Dn` / `drift-N` / `D-DRIFT-N` / `DW-<unit>-N` / chỉ nêu prose) và status nằm ở
837
+ # cấp section/verdict CHỨ KHÔNG per-row → đếm `Dn` ra số sai (HUB-18 từng bị chấm
838
+ # 4/4-open trong khi file ghi "ĐÃ RESOLVED"; HUB-07 bị bỏ sót vì `D-DRIFT-1`≠`Dn`).
839
+ # Thay bằng phân 3 bucket: resolved (mọi finding đã LAND — kể cả fix tại
840
+ # L2/Module-0/WBS) / flags (≥1 finding còn treo: [TBD], 'cần upstream resolve',
841
+ # build trên mock, finding-row thiếu ✅) / none (section có nhưng không drift finding).
842
+ DRIFT_KEEP = re.compile(r"drift|inheritance\s+compliance|phát hiện (trước|cần)|đối soát l2", re.I)
843
+ DRIFT_SKIP = re.compile(r"đối soát (fe-be|logic|chất lượng|vết)|traceability", re.I)
844
+ DRIFT_DEDICATED = re.compile(r"drift\s+(resolution|notes|register|flags|&|và)", re.I)
845
+ FINDING_ID = re.compile(r"\b(?:drift[-\s]?\d+|D-DRIFT-\d+|DW-[A-Z0-9]+-\d+)\b", re.I)
846
+ BARE_DN = re.compile(r"\bD\d+\b")
847
+ RESOLVED_MARK = re.compile(
848
+ r"✅|\bRESOLVED\b|đã đóng|đã chốt|\bDone\b|không còn blocked|zero (internal )?drift", re.I)
849
+ PENDING_MARK = re.compile(
850
+ r"\[TBD|cần\s+upstream|cần[^\n]{0,12}resolve|chưa (resolve|fix|đóng|chốt)|"
851
+ r"build[^\n]{0,6}mock|carried|logged[^\n]{0,8}non-?block|không block release|"
852
+ r"ghi nhận[^\n]{0,14}không block|pass-?with-?flags|với mock", re.I)
853
+
854
+
855
+ def _dd_drift_status(txt):
856
+ """Phân loại verdict drift L3↔TechSpec của 1 DD → {verdict, findings, open}.
857
+ verdict ∈ {resolved, flags, none}. Anchor vào section drift/inheritance (loại
858
+ P1-P4 QA-sync), đếm finding-row mang ID drift (bare `Dn` chỉ trong bảng drift
859
+ chuyên dụng → tránh false-positive `Dn`=cột-DB), chấm resolved theo marker
860
+ ✅/RESOLVED/Done ở row, fallback theo marker của heading section."""
861
+ heads = [(m.start(), m.end(), m.group(1))
862
+ for m in re.finditer(r"(?im)^#{2,4}\s+(.*)$", txt)]
863
+ saw_section = saw_resolved_heading = False
864
+ res_map, pend_map = {}, {} # finding-id (lower) → đã-thấy-resolved / đã-thấy-pending
865
+ for i, (s, e, title) in enumerate(heads):
866
+ if not DRIFT_KEEP.search(title) or DRIFT_SKIP.search(title):
867
+ continue
868
+ saw_section = True
869
+ nxt = heads[i + 1][0] if i + 1 < len(heads) else len(txt)
870
+ body = txt[e:nxt]
871
+ dedicated = bool(DRIFT_DEDICATED.search(title))
872
+ h_res = bool(RESOLVED_MARK.search(title))
873
+ h_pend = bool(PENDING_MARK.search(title))
874
+ default_open = h_pend and not h_res
875
+ if h_res:
876
+ saw_resolved_heading = True
877
+ for ln in body.splitlines():
878
+ ls = ln.strip()
879
+ is_bullet = bool(re.match(r"[-*]\s*\**\[?(?:drift|DW-|D-DRIFT)", ls, re.I)) \
880
+ and FINDING_ID.search(ls)
881
+ is_row = ls.startswith("|") and not re.fullmatch(r"[:\-\s|]+", ls)
882
+ if not (is_bullet or is_row):
883
+ continue
884
+ fid = FINDING_ID.search(ls)
885
+ if fid:
886
+ key = re.sub(r"[\s-]", "", fid.group(0).lower())
887
+ elif is_row and dedicated and BARE_DN.search(ls):
888
+ key = BARE_DN.search(ls).group(0).lower()
889
+ else:
890
+ continue
891
+ r = bool(RESOLVED_MARK.search(ls))
892
+ # resolved-marker THẮNG pending cùng dòng: '✅ RESOLVED … không còn [TBD]'
893
+ # là tác giả xác nhận đóng, không phải còn treo.
894
+ p = bool(PENDING_MARK.search(ls)) and not r
895
+ if not r and not p: # row trung tính → kế thừa marker heading section
896
+ r, p = h_res, default_open
897
+ res_map[key] = res_map.get(key, False) or r
898
+ pend_map[key] = pend_map.get(key, False) or p
899
+ if not saw_section:
900
+ return {"verdict": "none", "findings": 0, "open": 0}
901
+ findings = [(res_map[k] and not pend_map[k]) for k in res_map]
902
+ if not findings:
903
+ return {"verdict": "resolved" if saw_resolved_heading else "none",
904
+ "findings": 0, "open": 0}
905
+ open_ = sum(1 for ok in findings if not ok)
906
+ return {"verdict": "flags" if open_ else "resolved",
907
+ "findings": len(findings), "open": open_}
908
+
909
+
910
+ def _dd_count_tbd(txt):
911
+ """Đếm marker `[TBD…]` còn treo. BỎ mention bị phủ định — DD hay viết 'không
912
+ còn [TBD]', '0 [TBD]', 'Gỡ toàn bộ [TBD]', 'Ghi nhận 3 [TBD]' (lịch sử đã đóng),
913
+ hay tiêu đề 'Trạng thái [TBD]'; đếm thô thổi số quyết-định-treo (HUB-16 báo 12,
914
+ thực tế 0). Quét cả prefix (phủ định trước) lẫn suffix gần (status sau)."""
915
+ NEG = re.compile(
916
+ r"không còn|đã gỡ|gỡ bỏ|gỡ toàn bộ|đã chốt|resolved|đã xử lý|"
917
+ r"\b0\s*[`'\"]*$|ghi nhận\s+\d+\s*[`'\"]*$|trạng thái\s*[`'\"]*$", re.I)
918
+ # DEDUP within-doc: cùng 1 quyết định treo CÓ payload phân biệt (vd
919
+ # `[TBD-confirm: latency budget]`, `[TBD-PUSH-03]`) nhắc lại nhiều chỗ → đếm 1.
920
+ # KHÔNG dedup marker generic (`[TBD]`, `[TBD-confirm]`) vì nhiều quyết định khác
921
+ # nhau cùng viết generic → gộp lại sẽ HỤT số (over-dedup).
922
+ GENERIC = {"[tbd]", "[tbd-confirm]", "[tbd confirm]"}
923
+ seen = set()
924
+ n = 0
925
+ for m in re.finditer(r"\[TBD[^\]]*\]", txt):
926
+ pre = txt[max(0, m.start() - 30):m.start()]
927
+ post = txt[m.end():m.end() + 24].lower()
928
+ if NEG.search(pre):
929
+ continue
930
+ if re.search(r"đã (chốt|đóng|resolve|xử lý)|resolved|→\s*\S", post):
931
+ continue
932
+ key = re.sub(r"\s+", "", m.group(0).lower())
933
+ if key not in GENERIC: # có payload → lặp lại = cùng 1 TBD
934
+ if key in seen:
935
+ continue
936
+ seen.add(key)
937
+ n += 1
938
+ return n
939
+
940
+
941
+ def parse_dd_reports(dd_dir=None):
942
+ """Đọc mọi detailed_design/*_detailed_design.md (KHÔNG đệ quy → bỏ archive/ +
943
+ feature_design_parts/) → CR + drift L3↔TechSpec + TBD (G10)."""
944
+ d = dd_dir or DD_DIR
945
+ out = {"available": False, "files": 0,
946
+ "cr_total": 0, "cr_ticketed": 0, "by_type": {},
947
+ "verdict_counts": {"resolved": 0, "flags": 0, "none": 0},
948
+ "flagged_units": [], "findings_open": 0,
949
+ "tbd_confirm": 0, "by_unit": {},
950
+ "removed_units": [], "removed_by_cr": {}}
951
+ if not d.exists():
952
+ return out
953
+ files = sorted(d.glob("*_detailed_design.md"))
954
+ if not files:
955
+ return out
956
+ by_type = defaultdict(int)
957
+ for f in files:
958
+ txt = read(f)
959
+ if not txt:
960
+ continue
961
+ um = re.match(r"(.+)_detailed_design\.md$", f.name)
962
+ unit = um.group(1) if um else f.stem
963
+ rmv = _dd_removed_info(txt)
964
+ if rmv["removed"]:
965
+ # Tombstone: KHÔNG vào mẫu số DD / drift / CR / TBD. Gom riêng trục-C.
966
+ out["removed_units"].append(unit)
967
+ cr_key = rmv["cr"] or "(CR không rõ)"
968
+ out["removed_by_cr"].setdefault(cr_key, []).append(unit)
969
+ out["by_unit"][unit] = {"version": "removed", "cr_total": 0,
970
+ "cr_ticketed": 0, "drift_verdict": "removed",
971
+ "drift_findings": 0, "drift_open": 0, "tbd": 0,
972
+ "removed": True, "removed_cr": rmv["cr"],
973
+ "removed_date": rmv["date"]}
974
+ continue
975
+ cr = _dd_cr_table(txt)
976
+ dr = _dd_drift_status(txt)
977
+ tbd = _dd_count_tbd(txt)
978
+ rec = {"version": None, "cr_total": 0, "cr_ticketed": 0,
979
+ "drift_verdict": dr["verdict"], "drift_findings": dr["findings"],
980
+ "drift_open": dr["open"], "tbd": tbd}
981
+ if cr:
982
+ rec.update(cr_total=cr["cr_total"], cr_ticketed=cr["cr_ticketed"],
983
+ version=(sorted(cr["versions"])[-1] if cr["versions"] else None))
984
+ out["cr_total"] += cr["cr_total"]
985
+ out["cr_ticketed"] += cr["cr_ticketed"]
986
+ for t, n in cr["by_type"].items():
987
+ by_type[t] += n
988
+ out["verdict_counts"][dr["verdict"]] += 1
989
+ if dr["verdict"] == "flags":
990
+ out["flagged_units"].append(unit)
991
+ out["findings_open"] += dr["open"]
992
+ out["tbd_confirm"] += tbd
993
+ out["by_unit"][unit] = rec
994
+ out["available"] = True
995
+ # Mẫu số DD = chỉ deliverable sống (loại tombstone). by_unit vẫn giữ tombstone
996
+ # (đánh dấu removed) để render bảng nhưng KHÔNG tính vào "files".
997
+ out["files"] = len(out["by_unit"]) - len(out["removed_units"])
998
+ out["by_type"] = dict(by_type)
999
+ return out
1000
+
1001
+
1002
+ def est_tokens(text):
1003
+ """Deliverable-weight proxy. NOT real LLM burn — see module header."""
1004
+ return len(text) / CHARS_PER_TOKEN
1005
+
1006
+
1007
+ # Marker file nhận diện code repo — FE (package.json) + BE đa ngôn ngữ.
1008
+ REPO_MARKERS = ("package.json", "pom.xml", "build.gradle", "build.gradle.kts",
1009
+ "settings.gradle", "settings.gradle.kts", "go.mod", "Cargo.toml",
1010
+ "build.sbt", "composer.json", "pyproject.toml", "requirements.txt",
1011
+ "*.csproj", "*.sln")
1012
+
1013
+
1014
+ def _looks_like_code_repo(d):
1015
+ """True nếu d có marker của 1 code repo (FE hoặc BE). Bỏ qua spec/meta repo."""
1016
+ for marker in REPO_MARKERS:
1017
+ if "*" in marker:
1018
+ if any(d.glob(marker)):
1019
+ return True
1020
+ elif (d / marker).exists():
1021
+ return True
1022
+ return False
1023
+
1024
+
1025
+ def resolve_code_roots():
1026
+ """Danh sách code repo. Override qua EVAL_CODE_ROOT (1 hoặc nhiều path, ngăn bằng
1027
+ os.pathsep ':' hoặc ','). Mặc định: quét sibling của spec repo, nhận mọi thư mục
1028
+ có marker (package.json / pom.xml / build.gradle / go.mod / Cargo.toml / ...) →
1029
+ hỗ trợ multi-repo + backend Java/Kotlin/Go trong cùng workspace."""
1030
+ env = os.environ.get("EVAL_CODE_ROOT")
1031
+ if env:
1032
+ roots = []
1033
+ for part in re.split(r"[%s,]" % re.escape(os.pathsep), env):
1034
+ part = part.strip()
1035
+ if not part:
1036
+ continue
1037
+ p = Path(part).expanduser()
1038
+ if p.is_dir():
1039
+ roots.append(p)
1040
+ return roots
1041
+ roots = []
1042
+ for d in sorted(ROOT.parent.iterdir()):
1043
+ if d.resolve() == ROOT or not d.is_dir():
1044
+ continue
1045
+ if _looks_like_code_repo(d):
1046
+ roots.append(d)
1047
+ return roots
1048
+
1049
+
1050
+ def _classify_artifact(rel):
1051
+ """rel = posix path under NTAPP-output → (bucket, archived) or None to skip."""
1052
+ if rel.startswith("evaluation/"):
1053
+ return None # don't measure our own outputs
1054
+ archived = "/archive/" in rel or "/_v" in rel
1055
+ head = rel.split("/", 1)[0]
1056
+ bucket = {
1057
+ "Stage_1_Discovery": "discovery",
1058
+ "Stage_2_Architecture": "architecture",
1059
+ "Stage_3_Specs": "spec",
1060
+ "Stage_4_Design": "design",
1061
+ "design-system": "design_system",
1062
+ }.get(head)
1063
+ if head == "Stage_5_Build_Verify":
1064
+ bucket = "test_audit" if ("/atdd/" in rel or "test-artifacts" in rel
1065
+ or "test-framework" in rel) else "build_review"
1066
+ return (bucket, archived) if bucket else None
1067
+
1068
+
1069
+ def harvest_artifact_tokens():
1070
+ """Token-proxy weight per artifact bucket, split current vs archived (rework)."""
1071
+ buckets = defaultdict(lambda: {"files": 0, "tokens": 0.0,
1072
+ "arch_files": 0, "arch_tokens": 0.0})
1073
+ for f in BMAD_OUT.rglob("*"):
1074
+ if not f.is_file() or f.suffix not in (".md", ".json"):
1075
+ continue
1076
+ rel = f.relative_to(BMAD_OUT).as_posix()
1077
+ c = _classify_artifact(rel)
1078
+ if not c:
1079
+ continue
1080
+ bucket, archived = c
1081
+ tok = est_tokens(read(f))
1082
+ b = buckets[bucket]
1083
+ if archived:
1084
+ b["arch_files"] += 1
1085
+ b["arch_tokens"] += tok
1086
+ else:
1087
+ b["files"] += 1
1088
+ b["tokens"] += tok
1089
+ return {k: dict(v) for k, v in buckets.items()}
1090
+
1091
+
1092
+ def _unit_for_name(name, units_by_len):
1093
+ """First (longest) workflow unit id appearing in a filename."""
1094
+ for u in units_by_len:
1095
+ if u in name:
1096
+ return u
1097
+ return None
1098
+
1099
+
1100
+ def _skip_path(rel):
1101
+ """True nếu rel nằm trong thư mục build/dep (khớp segment, kể cả lồng module con)."""
1102
+ return any(seg in SKIP_DIRS for seg in rel.split("/")[:-1])
1103
+
1104
+
1105
+ def _is_test(rel, name):
1106
+ """Test code? — pattern JS (.test/.spec/.cy) + convention BE (src/test/, *Test.java,
1107
+ *_test.go, tests/...)."""
1108
+ return bool(TEST_FILE.search(name) or TEST_NAME.search(name) or TEST_PATH.search(rel))
1109
+
1110
+
1111
+ def harvest_code_tokens(unit_slice):
1112
+ """Walk các code repo; attribute tagged files (id: header) to prod/test + slice.
1113
+
1114
+ Hỗ trợ multi-repo (FE + BE Java/Kotlin/Go/...): gộp số liệu qua mọi code root."""
1115
+ roots = resolve_code_roots()
1116
+ out = {"code_roots": [str(r) for r in roots],
1117
+ "prod": {"files": 0, "tokens": 0.0}, "test": {"files": 0, "tokens": 0.0},
1118
+ "by_slice": defaultdict(lambda: {"prod": 0.0, "test": 0.0}),
1119
+ "untagged_tests": {"files": 0, "tokens": 0.0}}
1120
+ if not roots:
1121
+ out["by_slice"] = {}
1122
+ return out
1123
+ for code_root in roots:
1124
+ for f in code_root.rglob("*"):
1125
+ if not f.is_file() or not CODE_EXT.search(f.name):
1126
+ continue
1127
+ rel = f.relative_to(code_root).as_posix()
1128
+ if _skip_path(rel):
1129
+ continue
1130
+ txt = read(f)
1131
+ m = ID_HEADER.search(txt[:600])
1132
+ is_test = _is_test(rel, f.name)
1133
+ if not m:
1134
+ # untagged test code (e.g. e2e, src/test) — counted separately, not attributed
1135
+ if is_test:
1136
+ out["untagged_tests"]["files"] += 1
1137
+ out["untagged_tests"]["tokens"] += est_tokens(txt)
1138
+ continue
1139
+ uid = m.group(1)
1140
+ tok = est_tokens(txt)
1141
+ kind = "test" if is_test else "prod"
1142
+ out[kind]["files"] += 1
1143
+ out[kind]["tokens"] += tok
1144
+ sid = unit_slice.get(uid, "(unmapped)")
1145
+ out["by_slice"][sid][kind] += tok
1146
+ out["by_slice"] = {k: dict(v) for k, v in out["by_slice"].items()}
1147
+ return out
1148
+
1149
+
1150
+ def _loc(txt):
1151
+ """Dòng code (LOC) thô: đếm \\n, +1 nếu file không kết thúc bằng newline."""
1152
+ if not txt:
1153
+ return 0
1154
+ return txt.count("\n") + (0 if txt.endswith("\n") else 1)
1155
+
1156
+
1157
+ def _current_code_index(code_root, unit_slice):
1158
+ """rel-path → {kind: prod|test, slice, loc} cho file code đang nằm trên đĩa.
1159
+
1160
+ Dùng để (a) phân loại churn theo path và (b) lấy LOC sống-sót làm mẫu số
1161
+ EFFY-3b. Cùng quy ước attribution với harvest_code_tokens (header id:)."""
1162
+ idx = {}
1163
+ if not code_root:
1164
+ return idx
1165
+ for f in code_root.rglob("*"):
1166
+ if not f.is_file() or not CODE_EXT.search(f.name):
1167
+ continue
1168
+ rel = f.relative_to(code_root).as_posix()
1169
+ if _skip_path(rel):
1170
+ continue
1171
+ txt = read(f)
1172
+ m = ID_HEADER.search(txt[:600])
1173
+ is_test = _is_test(rel, f.name)
1174
+ loc = _loc(txt)
1175
+ if not m:
1176
+ if is_test:
1177
+ idx[rel] = {"kind": "test", "slice": None, "loc": loc}
1178
+ continue
1179
+ idx[rel] = {"kind": "test" if is_test else "prod",
1180
+ "slice": unit_slice.get(m.group(1), "(unmapped)"), "loc": loc}
1181
+ return idx
1182
+
1183
+
1184
+ def harvest_code_churn(unit_slice):
1185
+ """LOC committed (added/deleted) qua git history của code repo → EFFY-3b.
1186
+
1187
+ Số TUYỆT ĐỐI added/deleted là base data; churn_ratio = Σ(added+deleted) prod
1188
+ ÷ LOC prod sống-sót (=net) là chỉ số phái sinh (1.0 = mọi dòng viết ra đều
1189
+ sống; >1 = viết-rồi-xoá-rồi-viết-lại, code thrash). KHÔNG phụ thuộc timestamp
1190
+ nên đo được ngay (🟢) dù mọi mốc Change Log đều giả."""
1191
+ import subprocess
1192
+ roots = resolve_code_roots()
1193
+ out = {"available": False, "code_roots": [str(r) for r in roots],
1194
+ "commits": 0,
1195
+ "prod": {"added": 0, "deleted": 0, "net_loc": 0, "churn_ratio": None},
1196
+ "test": {"added": 0, "deleted": 0},
1197
+ "other": {"added": 0, "deleted": 0},
1198
+ "by_slice": {}}
1199
+ if not roots:
1200
+ return out
1201
+ by_slice = defaultdict(lambda: {"added": 0, "deleted": 0})
1202
+ for code_root in roots:
1203
+ idx = _current_code_index(code_root, unit_slice)
1204
+ out["prod"]["net_loc"] += sum(v["loc"] for v in idx.values()
1205
+ if v["kind"] == "prod")
1206
+ try:
1207
+ res = subprocess.run(
1208
+ ["git", "-C", str(code_root), "log", "--numstat", "--format=tformat:__C__"],
1209
+ capture_output=True, text=True, timeout=60)
1210
+ except (OSError, subprocess.SubprocessError):
1211
+ continue
1212
+ if res.returncode != 0:
1213
+ continue # repo này không phải git / git thiếu → bỏ qua, repo khác vẫn đo
1214
+ out["available"] = True
1215
+ for ln in res.stdout.splitlines():
1216
+ if ln.startswith("__C__"):
1217
+ out["commits"] += 1
1218
+ continue
1219
+ m = re.match(r"^(\d+|-)\t(\d+|-)\t(.+)$", ln)
1220
+ if not m:
1221
+ continue
1222
+ a, d, path = m.group(1), m.group(2), m.group(3)
1223
+ if a == "-" or d == "-": # binary file → numstat cho "-"
1224
+ continue
1225
+ if not CODE_EXT.search(path) or _skip_path(path):
1226
+ continue
1227
+ added, deleted = int(a), int(d)
1228
+ info = idx.get(path)
1229
+ if info and info["kind"] == "prod":
1230
+ bucket = "prod"
1231
+ by_slice[info["slice"]]["added"] += added
1232
+ by_slice[info["slice"]]["deleted"] += deleted
1233
+ elif (info and info["kind"] == "test") or _is_test(path, path.rsplit("/", 1)[-1]):
1234
+ bucket = "test"
1235
+ else:
1236
+ bucket = "other" # file đã xoá / không gắn id → không quy được prod
1237
+ out[bucket]["added"] += added
1238
+ out[bucket]["deleted"] += deleted
1239
+ pr = out["prod"]
1240
+ net = pr["net_loc"]
1241
+ pr["churn_ratio"] = ((pr["added"] + pr["deleted"]) / net) if net else None
1242
+ out["by_slice"] = {k: dict(v) for k, v in by_slice.items()}
1243
+ return out
1244
+
1245
+
1246
+ # ============================================================================
1247
+ # Token-burn engine — gộp từ build_token_log.py (file cũ đã xoá sau khi merge).
1248
+ # ----------------------------------------------------------------------------
1249
+ # Gom token THẬT (burn / ra tiền) từ session JSONL của Claude Code:
1250
+ # ~/.claude/projects/<project-slug>/*.jsonl (phiên chính) + transcript của
1251
+ # MỖI sub-agent do tool Agent/Task sinh ra ở <session-id>/subagents/*.jsonl.
1252
+ # Bản Claude Code hiện tại KHÔNG còn ghi sub-agent inline (isSidechain) mà tách
1253
+ # ra thư mục con → glob top-level `*.jsonl` bỏ sót toàn bộ burn sub-agent (có
1254
+ # phiên tới ~6% input + model Haiku phụ). Vì vậy đọc cả nested, nhóm theo phiên
1255
+ # cha (_burn_order_files) để burn sub-agent kế thừa slice/stage của cha, không
1256
+ # rơi _unattributed. Mỗi dòng assistant có message.usage {input_tokens,
1257
+ # cache_creation_input_tokens, cache_read_input_tokens, output_tokens} + message.model.
1258
+ # Quy ước gộp (xấp xỉ cận-trên về token, không phải $ chính xác vì cache_read rẻ ~10×):
1259
+ # input = input_tokens + cache_creation_input_tokens + cache_read_input_tokens
1260
+ # output = output_tokens
1261
+ # Gán per-turn ra by_slice / by_stage / by_model theo resolve_context():
1262
+ # 1. Explicit marker: lastPrompt = slash-command + arg (SLICE-N hoặc unit-id).
1263
+ # 2. File-header: Edit/Write → id (tên artifact hoặc header `id:` code file) → slice.
1264
+ # 3. Sticky: turn không tín hiệu kế thừa context gần nhất (reset mỗi phiên).
1265
+ # 4. _unattributed: turn đầu phiên trước mọi tín hiệu.
1266
+ # Đảm bảo Σ(by_slice) == total. Reuse CODE_EXT/ID_HEADER (định nghĩa ở trên, trùng hệt).
1267
+ # ============================================================================
1268
+ UNIT_ID = re.compile(r"\b([A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+)\b")
1269
+ SLICE_RE = re.compile(r"\bSLICE-0*(\d+)\b", re.I)
1270
+ TECHSPEC_DIR = BMAD_OUT / "Stage_3_Specs" / "techspec"
1271
+
1272
+ # slash-command (prefix, case-insensitive) → stage label
1273
+ CMD_STAGE = [
1274
+ ("market-research", "Stage_1"), ("product-research", "Stage_1"),
1275
+ ("create-prd", "Stage_1"), ("create-epics", "Stage_1"), ("brainstorm", "Stage_1"),
1276
+ ("grill", "Stage_1"), ("feature-triage", "Stage_1"),
1277
+ ("architecture-design", "Stage_2"), ("system-overview", "Stage_2"),
1278
+ ("slice-planning", "Stage_2b"),
1279
+ ("technical-design", "Stage_3"), ("ux-design", "Stage_3"), ("ux-sketch", "Stage_3"),
1280
+ ("feature-design", "Stage_4"), ("ui-generation", "Stage_4"), ("ds-", "Stage_4"),
1281
+ ("dev-story", "Stage_5"), ("code-review", "Stage_5"), ("testarch", "Stage_5"),
1282
+ ("dev-this", "Stage_5"), ("feature-complete", "Stage_5"), ("quick-dev", "Stage_5"),
1283
+ ]
1284
+
1285
+
1286
+ def _burn_norm_slice(n):
1287
+ return "SLICE-%d" % int(n)
1288
+
1289
+
1290
+ def _burn_load_slice_map():
1291
+ """unit_id → SLICE-N, từ frontmatter `units[].id` của mỗi slice file."""
1292
+ m = {}
1293
+ if not SLICES_DIR.exists():
1294
+ return m
1295
+ for f in sorted(SLICES_DIR.glob("SLICE-*.md")):
1296
+ sm = SLICE_RE.search(f.stem)
1297
+ if not sm:
1298
+ continue
1299
+ slice_id = _burn_norm_slice(sm.group(1))
1300
+ txt = read(f)
1301
+ fm = txt.split("---", 2)
1302
+ body = fm[1] if len(fm) >= 3 else txt
1303
+ for uid in re.findall(r"id:\s*([A-Z][A-Z0-9-]+)", body):
1304
+ if not uid.startswith("SLICE-"):
1305
+ m[uid] = slice_id
1306
+ return m
1307
+
1308
+
1309
+ def _burn_load_techspec_units():
1310
+ """{MODULE: [unit_id,...]} từ cột đầu bảng §2.1 'Đối soát kiến trúc' của mỗi
1311
+ {MODULE}_techspec.md. MODULE = stem bỏ hậu tố '_techspec'."""
1312
+ out = {}
1313
+ if not TECHSPEC_DIR.exists():
1314
+ return out
1315
+ for f in sorted(TECHSPEC_DIR.glob("*_techspec.md")):
1316
+ module = f.stem[:-len("_techspec")] if f.stem.endswith("_techspec") else f.stem
1317
+ lines = read(f).splitlines()
1318
+ units, in_audit = [], False
1319
+ for ln in lines:
1320
+ if re.search(r"2\.1.*[Đđ]ối\s*so[áa]t", ln):
1321
+ in_audit = True
1322
+ continue
1323
+ if in_audit:
1324
+ if re.match(r"^\s*#{1,4}\s", ln) or re.match(r"^\s*---\s*$", ln):
1325
+ break # sang section khác
1326
+ if ln.lstrip().startswith("|"):
1327
+ cell = ln.split("|")[1].strip().strip("`")
1328
+ mm = UNIT_ID.fullmatch(cell)
1329
+ if mm:
1330
+ units.append(cell)
1331
+ if units:
1332
+ out[module.upper()] = units
1333
+ return out
1334
+
1335
+
1336
+ def _burn_default_sessions_dir():
1337
+ """~/.claude/projects/<slug> — slug = abs path, mọi ký tự non-alnum → '-'."""
1338
+ slug = re.sub(r"[^A-Za-z0-9]", "-", str(ROOT))
1339
+ d = Path.home() / ".claude" / "projects" / slug
1340
+ return d if d.exists() else None
1341
+
1342
+
1343
+ def _burn_iter_records(jsonl_path):
1344
+ for ln in jsonl_path.read_text(errors="replace").splitlines():
1345
+ ln = ln.strip()
1346
+ if not ln:
1347
+ continue
1348
+ try:
1349
+ yield json.loads(ln)
1350
+ except json.JSONDecodeError:
1351
+ continue
1352
+
1353
+
1354
+ def _burn_stage_from_cmd(cmd):
1355
+ """Stage từ slash-command. Chỉ xét TÊN lệnh (token đầu sau '/'), KHÔNG quét arg
1356
+ — key ngắn như 'ds-' dễ trúng nhầm trong đường dẫn/arg (vd '/code-review
1357
+ cards-list.tsx' chứa 'ds-' ở 'cards-list' → Stage_4 sai). Vẫn để 'in' để khoan
1358
+ dung tiền tố wrapper ('ntapp-'/'bmad-' trong '/ntapp-architecture-design')."""
1359
+ m = re.match(r"\s*/(\S+)", cmd)
1360
+ name = m.group(1).lower() if m else cmd.lower()
1361
+ for key, stage in CMD_STAGE:
1362
+ if key in name:
1363
+ return stage
1364
+ return None
1365
+
1366
+
1367
+ def _burn_id_from_path(path, slice_map):
1368
+ """Tên artifact (SCR-FOO.md) hoặc header `id:` của code file → unit id."""
1369
+ base = Path(path).stem
1370
+ if base in slice_map:
1371
+ return base
1372
+ for uid in UNIT_ID.findall(base):
1373
+ if uid in slice_map:
1374
+ return uid
1375
+ if CODE_EXT.search(path):
1376
+ p = Path(path)
1377
+ if p.exists():
1378
+ head = "\n".join(p.read_text(errors="replace").splitlines()[:10])
1379
+ hm = ID_HEADER.search(head)
1380
+ if hm:
1381
+ return hm.group(1)
1382
+ return None
1383
+
1384
+
1385
+ def _burn_resolve_context(rec, slice_map, techspec_units):
1386
+ """(slice, stage, is_cmd, techspec_module) của record này."""
1387
+ slice_hit = stage_hit = ts_module = None
1388
+ is_cmd = False
1389
+ lp = rec.get("lastPrompt")
1390
+ if isinstance(lp, str) and lp.strip().startswith("/"):
1391
+ is_cmd = True
1392
+ stage_hit = _burn_stage_from_cmd(lp)
1393
+ if "technical-design" in lp.lower():
1394
+ for mod in techspec_units:
1395
+ if re.search(r"\b" + re.escape(mod) + r"\b", lp, re.I):
1396
+ ts_module = mod
1397
+ break
1398
+ sm = SLICE_RE.search(lp)
1399
+ if sm:
1400
+ slice_hit = _burn_norm_slice(sm.group(1))
1401
+ else: # unit-id arg → slice qua slice plan
1402
+ for uid in UNIT_ID.findall(lp):
1403
+ if uid in slice_map:
1404
+ slice_hit = slice_map[uid]
1405
+ break
1406
+ msg = rec.get("message")
1407
+ if slice_hit is None and ts_module is None and isinstance(msg, dict):
1408
+ c = msg.get("content")
1409
+ if isinstance(c, list):
1410
+ for b in c:
1411
+ if isinstance(b, dict) and b.get("type") == "tool_use" \
1412
+ and b.get("name") in ("Edit", "Write", "NotebookEdit"):
1413
+ fp = (b.get("input") or {}).get("file_path", "")
1414
+ uid = _burn_id_from_path(fp, slice_map) if fp else None
1415
+ if uid and uid in slice_map:
1416
+ slice_hit = slice_map[uid]
1417
+ break
1418
+ return slice_hit, stage_hit, is_cmd, ts_module
1419
+
1420
+
1421
+ def _burn_finalize(buckets, total_in, total_out):
1422
+ """Làm tròn float → int, dồn residual vào bucket lớn nhất để Σ khớp."""
1423
+ rounded = {k: {"input": round(v["input"]), "output": round(v["output"])}
1424
+ for k, v in buckets.items()}
1425
+ for key, tot in (("input", total_in), ("output", total_out)):
1426
+ diff = tot - sum(b[key] for b in rounded.values())
1427
+ if diff and rounded:
1428
+ big = max(rounded, key=lambda k: rounded[k][key])
1429
+ rounded[big][key] += diff
1430
+ return rounded
1431
+
1432
+
1433
+ def _burn_accumulate(ordered, slice_map, techspec_units):
1434
+ """`ordered` = list[(Path, is_group_start)] từ _burn_order_files: mỗi file
1435
+ phiên cha đứng ngay trước transcript sub-agent của nó. Sticky-context reset ở
1436
+ ranh giới NHÓM (is_group_start=True), KHÔNG reset giữa cha ↔ sub-agent → burn
1437
+ sub-agent kế thừa slice/stage của phiên cha thay vì rơi _unattributed."""
1438
+ inp = out = 0
1439
+ breakdown = {"input_tokens": 0, "cache_creation_input_tokens": 0,
1440
+ "cache_read_input_tokens": 0, "output_tokens": 0}
1441
+ n_msgs = 0
1442
+ by_slice = defaultdict(lambda: {"input": 0.0, "output": 0.0})
1443
+ by_stage = defaultdict(lambda: {"input": 0.0, "output": 0.0})
1444
+ by_model = defaultdict(lambda: {"input": 0.0, "output": 0.0})
1445
+ # per-model 4-component breakdown → định giá chính xác theo bảng giá từng model
1446
+ by_model_breakdown = defaultdict(lambda: {"input_tokens": 0, "cache_creation_input_tokens": 0,
1447
+ "cache_read_input_tokens": 0, "output_tokens": 0})
1448
+ by_slice_model = defaultdict(lambda: defaultdict(lambda: {"input": 0.0, "output": 0.0}))
1449
+ by_stage_model = defaultdict(lambda: defaultdict(lambda: {"input": 0.0, "output": 0.0}))
1450
+ ts_min = ts_max = None # G2 — khoảng ngày phiên (đo độ phủ session-log)
1451
+ cur_slice = cur_stage = cur_ts = None
1452
+ for f, group_start in ordered:
1453
+ if group_start:
1454
+ cur_slice = cur_stage = cur_ts = None # reset mỗi NHÓM (phiên cha + sub-agent)
1455
+ else:
1456
+ cur_ts = None # sub-agent: giữ slice/stage của cha, thoát techspec-split mode
1457
+ for rec in _burn_iter_records(f):
1458
+ rts = rec.get("timestamp")
1459
+ if isinstance(rts, str) and len(rts) >= 10:
1460
+ day = rts[:10]
1461
+ if ts_min is None or day < ts_min:
1462
+ ts_min = day
1463
+ if ts_max is None or day > ts_max:
1464
+ ts_max = day
1465
+ s, st, is_cmd, ts = _burn_resolve_context(rec, slice_map, techspec_units)
1466
+ if is_cmd:
1467
+ cur_ts = ts # command mới: vào techspec mode, hoặc thoát nó
1468
+ if s:
1469
+ cur_slice = s
1470
+ if st:
1471
+ cur_stage = st
1472
+ msg = rec.get("message")
1473
+ if not (isinstance(msg, dict) and isinstance(msg.get("usage"), dict)):
1474
+ continue
1475
+ u = msg["usage"]
1476
+ it = u.get("input_tokens", 0) or 0
1477
+ cc = u.get("cache_creation_input_tokens", 0) or 0
1478
+ cr = u.get("cache_read_input_tokens", 0) or 0
1479
+ ot = u.get("output_tokens", 0) or 0
1480
+ ti, to = it + cc + cr, ot
1481
+ model = msg.get("model") or "unknown"
1482
+ n_msgs += 1
1483
+ breakdown["input_tokens"] += it
1484
+ breakdown["cache_creation_input_tokens"] += cc
1485
+ breakdown["cache_read_input_tokens"] += cr
1486
+ breakdown["output_tokens"] += ot
1487
+ inp += ti
1488
+ out += to
1489
+ by_model[model]["input"] += ti
1490
+ by_model[model]["output"] += to
1491
+ bmb = by_model_breakdown[model]
1492
+ bmb["input_tokens"] += it
1493
+ bmb["cache_creation_input_tokens"] += cc
1494
+ bmb["cache_read_input_tokens"] += cr
1495
+ bmb["output_tokens"] += ot
1496
+ # --- by_slice: techspec → chia đều cho unit của §2.1; ngược lại sticky
1497
+ if cur_ts:
1498
+ units = techspec_units[cur_ts]
1499
+ n = len(units)
1500
+ for uid in units:
1501
+ tgt = slice_map.get(uid, "_unattributed")
1502
+ by_slice[tgt]["input"] += ti / n
1503
+ by_slice[tgt]["output"] += to / n
1504
+ by_slice_model[tgt][model]["input"] += ti / n
1505
+ by_slice_model[tgt][model]["output"] += to / n
1506
+ else:
1507
+ sk = cur_slice or "_unattributed"
1508
+ by_slice[sk]["input"] += ti
1509
+ by_slice[sk]["output"] += to
1510
+ by_slice_model[sk][model]["input"] += ti
1511
+ by_slice_model[sk][model]["output"] += to
1512
+ stk = cur_stage or "_unattributed"
1513
+ by_stage[stk]["input"] += ti
1514
+ by_stage[stk]["output"] += to
1515
+ by_stage_model[stk][model]["input"] += ti
1516
+ by_stage_model[stk][model]["output"] += to
1517
+
1518
+ def round_nested(d):
1519
+ return {k: {m: {"input": round(v["input"]), "output": round(v["output"])}
1520
+ for m, v in mv.items()} for k, mv in d.items()}
1521
+
1522
+ return {
1523
+ "input": inp, "output": out, "breakdown": breakdown, "n_msgs": n_msgs,
1524
+ "ts_min": ts_min, "ts_max": ts_max,
1525
+ "by_slice": _burn_finalize(by_slice, inp, out),
1526
+ "by_stage": _burn_finalize(by_stage, inp, out),
1527
+ "by_model": _burn_finalize(by_model, inp, out),
1528
+ "by_model_breakdown": {m: dict(bd) for m, bd in by_model_breakdown.items()},
1529
+ "by_slice_model": round_nested(by_slice_model),
1530
+ "by_stage_model": round_nested(by_stage_model),
1531
+ }
1532
+
1533
+
1534
+ def _burn_resolve_files(sessions_dir=None, session=None):
1535
+ """Danh sách file .jsonl cần đọc: phiên chính top-level + transcript sub-agent
1536
+ lồng trong <session-id>/subagents/*.jsonl (bản Claude Code mới tách sub-agent
1537
+ ra thư mục con, không còn inline isSidechain → glob non-recursive bỏ sót toàn
1538
+ bộ burn sub-agent). Trả [] nếu không tìm thấy."""
1539
+ if session:
1540
+ p = Path(session)
1541
+ # <session>.jsonl ↔ subagents của nó ở <session-dir>/<stem>/subagents/
1542
+ return [p] + sorted((p.parent / p.stem / "subagents").glob("*.jsonl"))
1543
+ d = Path(sessions_dir) if sessions_dir else _burn_default_sessions_dir()
1544
+ if not d or not d.exists():
1545
+ return []
1546
+ return sorted(d.glob("*.jsonl")) + sorted(d.glob("*/subagents/*.jsonl"))
1547
+
1548
+
1549
+ def _burn_order_files(files):
1550
+ """Sắp `files` theo NHÓM: mỗi file phiên cha (top-level) đứng ngay trước các
1551
+ transcript sub-agent của nó (<session-id>/subagents/*.jsonl). Trả
1552
+ list[(path, is_group_start)] — is_group_start=True ở file cha (=False ở
1553
+ sub-agent) để _burn_accumulate reset sticky-context theo nhóm, cho sub-agent
1554
+ kế thừa slice/stage của phiên cha. Sub-agent mồ côi (không thấy file cha
1555
+ trong `files`) tự mở nhóm riêng — vẫn được đếm vào total."""
1556
+ subs_by_parent = defaultdict(list)
1557
+ tops = []
1558
+ for f in files:
1559
+ if f.parent.name == "subagents":
1560
+ subs_by_parent[f.parent.parent.name].append(f)
1561
+ else:
1562
+ tops.append(f)
1563
+ ordered, seen = [], set()
1564
+ for f in sorted(tops):
1565
+ ordered.append((f, True))
1566
+ seen.add(f.stem)
1567
+ for s in sorted(subs_by_parent.get(f.stem, [])):
1568
+ ordered.append((s, False))
1569
+ for parent, subs in sorted(subs_by_parent.items()): # sub-agent mồ côi
1570
+ if parent not in seen:
1571
+ for i, s in enumerate(sorted(subs)):
1572
+ ordered.append((s, i == 0))
1573
+ return ordered
1574
+
1575
+
1576
+ def _burn_build_log_dict(files, total_only=False):
1577
+ """Dựng dict token-log từ files (schema mà load_token_log đọc)."""
1578
+ slice_map = {} if total_only else _burn_load_slice_map()
1579
+ techspec_units = {} if total_only else _burn_load_techspec_units()
1580
+ r = _burn_accumulate(_burn_order_files(files), slice_map, techspec_units)
1581
+ inp, out, bd, n = r["input"], r["output"], r["breakdown"], r["n_msgs"]
1582
+ by_slice, by_stage = r["by_slice"], r["by_stage"]
1583
+ log = {
1584
+ "total": {"input": inp, "output": out},
1585
+ "_meta": {
1586
+ "source": "claude-code session jsonl",
1587
+ "files": len(files),
1588
+ "assistant_messages": n,
1589
+ "session_date_min": r.get("ts_min"), # G2 — độ phủ session-log
1590
+ "session_date_max": r.get("ts_max"),
1591
+ "breakdown_raw": bd,
1592
+ "slice_plan_units": len(slice_map),
1593
+ "techspec_split": {m: techspec_units[m] for m in techspec_units},
1594
+ "by_model": r["by_model"], # model_id → {input, output} (toàn cục)
1595
+ "by_model_breakdown": r["by_model_breakdown"], # model_id → 4 thành phần (định giá per-model)
1596
+ "by_slice_model": r["by_slice_model"], # slice → model_id → {input, output}
1597
+ "by_stage_model": r["by_stage_model"], # stage → model_id → {input, output}
1598
+ "note": "input = input_tokens + cache_creation + cache_read; output = output_tokens",
1599
+ },
1600
+ }
1601
+ if not total_only:
1602
+ log["by_slice"] = by_slice
1603
+ log["by_stage"] = by_stage
1604
+ si = sum(v["input"] for v in by_slice.values())
1605
+ so = sum(v["output"] for v in by_slice.values())
1606
+ assert (si, so) == (inp, out), f"by_slice mismatch: {(si, so)} != {(inp, out)}"
1607
+ return log
1608
+
1609
+
1610
+ def harvest_burn(sessions_dir=None, session=None, write=False, total_only=False):
1611
+ """High-level entry. Trả dict token-log, hoặc None nếu không có session.
1612
+ write=True → ghi TOKEN_LOG (token-log.json)."""
1613
+ files = _burn_resolve_files(sessions_dir, session)
1614
+ if not files:
1615
+ return None
1616
+ log = _burn_build_log_dict(files, total_only=total_only)
1617
+ if write:
1618
+ TOKEN_LOG.parent.mkdir(parents=True, exist_ok=True)
1619
+ TOKEN_LOG.write_text(json.dumps(log, indent=2, ensure_ascii=False), encoding="utf-8")
1620
+ return log
1621
+
1622
+
1623
+ def _burn_cache_stale():
1624
+ """True nếu có transcript phiên mới hơn cache burn (so theo thời gian sửa file).
1625
+ Nghĩa là cache đang bỏ sót burn của phiên vừa chạy. Thiếu cache hoặc thiếu
1626
+ phiên nào để đối chiếu → False, nhường quyết định cho nhánh gọi."""
1627
+ if not TOKEN_LOG.exists():
1628
+ return False
1629
+ try:
1630
+ cache_mtime = TOKEN_LOG.stat().st_mtime
1631
+ except OSError:
1632
+ return False
1633
+ for f in _burn_resolve_files():
1634
+ try:
1635
+ if f.stat().st_mtime > cache_mtime:
1636
+ return True
1637
+ except OSError:
1638
+ continue
1639
+ return False
1640
+
1641
+
1642
+ def load_token_log(refresh=False):
1643
+ """Real-burn input. Schema: {total:{input,output}, by_stage:{...}, by_slice:{...}}.
1644
+
1645
+ Tự harvest từ session JSONL (harvest_burn — engine gộp ở trên) khi:
1646
+ - file token-log.json chưa tồn tại, hoặc
1647
+ - refresh=True (cờ --refresh-burn) — đọc lại session mới nhất, hoặc
1648
+ - cache cũ hơn transcript phiên mới (auto — chống bẫy dùng burn cũ).
1649
+ Có file + còn mới + không refresh → dùng cached. Không có session → None (hiển thị 🔴 n/a)."""
1650
+ stale = _burn_cache_stale()
1651
+ if TOKEN_LOG.exists() and not refresh and not stale:
1652
+ try:
1653
+ return json.loads(read(TOKEN_LOG))
1654
+ except (json.JSONDecodeError, ValueError):
1655
+ pass
1656
+ if stale and not refresh:
1657
+ print("[eval-harvester] cache burn cũ hơn phiên mới → tự re-harvest")
1658
+ try:
1659
+ log = harvest_burn(write=True) # ghi luôn token-log.json
1660
+ if log:
1661
+ print(f"[eval-harvester] auto-harvested burn từ session JSONL "
1662
+ f"({log['_meta']['files']} files, {log['_meta']['assistant_messages']} msgs)")
1663
+ return log
1664
+ except Exception as e: # harvest lỗi → fallback file cũ nếu có, ngược lại None
1665
+ print(f"[eval-harvester] burn auto-harvest skip: {e}")
1666
+ if TOKEN_LOG.exists():
1667
+ try:
1668
+ return json.loads(read(TOKEN_LOG))
1669
+ except (json.JSONDecodeError, ValueError):
1670
+ return None
1671
+ return None
1672
+
1673
+
1674
+ def _git_commit_span():
1675
+ """(first_date, last_date, n_commits) theo author-date qua mọi code root.
1676
+ Trả (None, None, 0) nếu không repo nào đọc được git. Dùng cho G2 — đối
1677
+ chiếu khoảng hoạt động git với khoảng phiên Claude Code để bắt 'thiếu phiên'."""
1678
+ import subprocess
1679
+ dates = []
1680
+ for r in resolve_code_roots():
1681
+ try:
1682
+ res = subprocess.run(
1683
+ ["git", "-C", str(r), "log", "--format=%ad", "--date=short"],
1684
+ capture_output=True, text=True, timeout=60)
1685
+ except (OSError, subprocess.SubprocessError):
1686
+ continue
1687
+ if res.returncode != 0:
1688
+ continue
1689
+ dates += [l.strip() for l in res.stdout.splitlines() if l.strip()]
1690
+ if not dates:
1691
+ return None, None, 0
1692
+ return min(dates), max(dates), len(dates)
1693
+
1694
+
1695
+ def _burn_coverage(meta):
1696
+ """G2 — tín hiệu độ phủ session-log. So khoảng ngày phiên (session_date_*)
1697
+ với khoảng author-date của commit git. Burn gom từ JSONL từng máy; nếu phiên
1698
+ chạy ở máy khác / đã xoá thì burn hụt trong im lặng. Phủ thấp → đánh dấu burn
1699
+ 'một phần (cận dưới)' thay vì để số trần.
1700
+
1701
+ Trả dict {level: full|partial|unknown, lower_bound: bool, ratio, ...}.
1702
+ 'unknown' khi thiếu mốc git hoặc thiếu mốc phiên → không kết luận, không cảnh báo sai."""
1703
+ smin, smax = (meta or {}).get("session_date_min"), (meta or {}).get("session_date_max")
1704
+ gfirst, glast, gn = _git_commit_span()
1705
+ cov = {"session_min": smin, "session_max": smax,
1706
+ "git_first": gfirst, "git_last": glast, "git_commits": gn,
1707
+ "span_days": None, "covered_days": None, "ratio": None,
1708
+ "level": "unknown", "lower_bound": False}
1709
+ sd0, sd1 = _parse_date(smin), _parse_date(smax)
1710
+ gd0, gd1 = _parse_date(gfirst), _parse_date(glast)
1711
+ if not (sd0 and sd1 and gd0 and gd1):
1712
+ return cov # thiếu một đầu mốc → unknown
1713
+ span = (gd1 - gd0).days + 1
1714
+ ov0, ov1 = max(sd0, gd0), min(sd1, gd1)
1715
+ covered = (ov1 - ov0).days + 1 if ov1 >= ov0 else 0
1716
+ ratio = covered / span if span else None
1717
+ cov.update(span_days=span, covered_days=covered, ratio=ratio)
1718
+ if ratio is not None:
1719
+ cov["level"] = "full" if ratio >= COVERAGE_FULL else "partial"
1720
+ cov["lower_bound"] = ratio < COVERAGE_FULL
1721
+ return cov
1722
+
1723
+
1724
+ def build_cost(art, code, totals, token_log, units):
1725
+ """Assemble the Bộ C cost block: proxy ratios (🟢) + real-burn (🔴 if logged)."""
1726
+ def tok(bucket):
1727
+ return art.get(bucket, {}).get("tokens", 0.0)
1728
+
1729
+ prod = code["prod"]["tokens"]
1730
+ spec_design = tok("spec") + tok("design")
1731
+ review_test = (tok("build_review") + tok("test_audit") + code["test"]["tokens"]
1732
+ + code["untagged_tests"]["tokens"])
1733
+ governance = tok("discovery") + tok("architecture") + tok("design_system")
1734
+ all_artifact = sum(tok(b) for b in ("discovery", "architecture", "spec",
1735
+ "design", "build_review", "test_audit",
1736
+ "design_system"))
1737
+ # archive waste = superseded (archived) versions of the iterated design artifacts
1738
+ archived_arch = sum(art.get(b, {}).get("arch_tokens", 0.0)
1739
+ for b in ("architecture", "design"))
1740
+ archived_curr = sum(art.get(b, {}).get("tokens", 0.0)
1741
+ for b in ("architecture", "design"))
1742
+
1743
+ def ratio(n, d):
1744
+ return (n / d) if d else None
1745
+
1746
+ delivered = all_artifact + prod + code["test"]["tokens"]
1747
+ meta = (token_log.get("_meta") or {}) if token_log else {}
1748
+ burn = None
1749
+ if token_log and token_log.get("total"):
1750
+ t = token_log["total"]
1751
+ burn_total = (t.get("input", 0) + t.get("output", 0))
1752
+ ac = totals.get("ac_total") or 0
1753
+ # Phan ra 4 thanh phan input tu breakdown_raw (neu co); quy doi chi phi $.
1754
+ bd = (token_log.get("_meta") or {}).get("breakdown_raw") or {}
1755
+ comp = {
1756
+ "input": bd.get("input_tokens", 0),
1757
+ "cache_write": bd.get("cache_creation_input_tokens", 0),
1758
+ "cache_read": bd.get("cache_read_input_tokens", 0),
1759
+ "output": bd.get("output_tokens", t.get("output", 0)),
1760
+ }
1761
+ # Định giá THEO TỪNG MODEL (session dùng cả Opus lẫn Haiku cho sub-agent →
1762
+ # định giá phẳng một model sẽ lệch). Fallback định giá phẳng Opus nếu
1763
+ # token-log.json cũ chưa có by_model_breakdown.
1764
+ bmb = meta.get("by_model_breakdown") or {}
1765
+ cost_by_model = {}
1766
+ for mid, bd_m in bmb.items():
1767
+ comp_m = {
1768
+ "input": bd_m.get("input_tokens", 0),
1769
+ "cache_write": bd_m.get("cache_creation_input_tokens", 0),
1770
+ "cache_read": bd_m.get("cache_read_input_tokens", 0),
1771
+ "output": bd_m.get("output_tokens", 0),
1772
+ }
1773
+ if sum(comp_m.values()) == 0: # model 0 token (vd '<synthetic>') → bỏ, khỏi rối bảng
1774
+ continue
1775
+ price = price_for_model(mid)
1776
+ cusd = {k: comp_m[k] / 1_000_000 * price[k] for k in comp_m}
1777
+ cost_by_model[mid] = {
1778
+ "label": model_label(mid), "components": comp_m, "cost_usd": cusd,
1779
+ "cost_total_usd": sum(cusd.values()), "tokens_total": sum(comp_m.values()),
1780
+ }
1781
+ if cost_by_model: # per-component $ = tổng qua các model (giá khác nhau) → tổng đúng
1782
+ cost = {k: sum(c["cost_usd"][k] for c in cost_by_model.values())
1783
+ for k in ("input", "cache_write", "cache_read", "output")}
1784
+ else:
1785
+ cost = {k: comp[k] / 1_000_000 * PRICE_PER_MTOK[k] for k in comp}
1786
+ burn = {
1787
+ "input": t.get("input"), "output": t.get("output"), "total": burn_total,
1788
+ "per_ac": ratio(burn_total, ac),
1789
+ "amplification": ratio(burn_total, delivered), # burn ÷ delivered weight
1790
+ "by_stage": token_log.get("by_stage"),
1791
+ "by_slice": token_log.get("by_slice"),
1792
+ "components": comp if bd else None, # 4-way input/output split (toàn cục)
1793
+ "cost_usd": cost if bd else None, # per-component $ (blended per-model)
1794
+ "cost_total_usd": sum(cost.values()) if bd else None,
1795
+ # per-model, sắp theo chi phí giảm dần (list; label carries model id)
1796
+ "cost_by_model": sorted(cost_by_model.values(),
1797
+ key=lambda c: -c["cost_total_usd"]) or None,
1798
+ "cost_priced_per_model": bool(cost_by_model),
1799
+ "coverage": _burn_coverage(meta), # G2 — độ phủ session-log
1800
+ }
1801
+ return {
1802
+ "unit": "token-proxy (~chars/%d)" % CHARS_PER_TOKEN,
1803
+ "buckets": {k: round(art[k].get("tokens", 0.0)) for k in sorted(art)},
1804
+ "buckets_archived": {k: round(art[k].get("arch_tokens", 0.0))
1805
+ for k in sorted(art) if art[k].get("arch_tokens")},
1806
+ "code_prod_tokens": round(prod),
1807
+ "code_test_tokens": round(code["test"]["tokens"]),
1808
+ "code_untagged_test_tokens": round(code["untagged_tests"]["tokens"]),
1809
+ "code_roots": code["code_roots"],
1810
+ "ratios": {
1811
+ "spec_design_to_code": ratio(spec_design, prod), # COST-2
1812
+ "review_test_to_code": ratio(review_test, prod), # COST-3
1813
+ "all_artifact_to_code": ratio(all_artifact, prod), # COST-4
1814
+ "governance_to_code": ratio(governance, prod), # COST-5
1815
+ "archive_waste": ratio(archived_arch, archived_curr + archived_arch), # COST-6
1816
+ },
1817
+ "delivered_tokens": round(delivered),
1818
+ "burn": burn, # COST-1/7/8 — None unless token-log.json present
1819
+ "by_slice": code.get("by_slice", {}),
1820
+ "by_model": meta.get("by_model") or {}, # model_id → {input, output}
1821
+ "by_slice_model": meta.get("by_slice_model") or {}, # slice → model_id → {input, output}
1822
+ "by_stage_model": meta.get("by_stage_model") or {}, # stage → model_id → {input, output}
1823
+ }
1824
+
1825
+
1826
+ def fmt_pct(x):
1827
+ return f"{round(100 * x):d}%" if x is not None else "n/a"
1828
+
1829
+
1830
+ def fmt_ratio(x):
1831
+ return f"{x:.2f}×" if x is not None else "n/a"
1832
+
1833
+
1834
+ def fmt_tok(x):
1835
+ """Token gọn theo bậc: ≥1 tỉ → B, ≥1 triệu → M, ≥1 nghìn → k."""
1836
+ if not x:
1837
+ return "0"
1838
+ if abs(x) >= 1_000_000_000:
1839
+ return f"{x/1_000_000_000:.2f}B"
1840
+ if abs(x) >= 1_000_000:
1841
+ return f"{x/1_000_000:.1f}M"
1842
+ return f"{round(x/1000, 1)}k"
1843
+
1844
+
1845
+ def build(refresh_burn=False):
1846
+ slice_units, unit_slice, slice_meta = parse_slices()
1847
+ units = {u: parse_unit(u) for sl in slice_units.values() for u in sl}
1848
+ units = {u: v for u, v in units.items() if v}
1849
+ defers = parse_defers(unit_slice)
1850
+ drift = parse_drift_reports() # G8 — lệch L3↔L2 (UI schema) bắt ở cổng thiết kế
1851
+ dd = parse_dd_reports() # G10 — CR + drift L3↔TechSpec + TBD trong DD
1852
+ rework = parse_rework()
1853
+
1854
+ # G11 — unit bị XÓA theo CR (tombstone DD `dd_version: v*-removed`). Loại khỏi
1855
+ # mọi chấm điểm FPY/AC/slice: chúng KHÔNG phải deliverable sống. Vẫn liệt kê
1856
+ # riêng (removed_slices / removed_in_slice) để surface trục-C scope-removal.
1857
+ removed = set(dd.get("removed_units") or [])
1858
+ removed_slices = []
1859
+
1860
+ slices = {}
1861
+ for sid, ulist in slice_units.items():
1862
+ live_ulist = [u for u in ulist if u not in removed]
1863
+ rin_slice = [u for u in ulist if u in removed]
1864
+ us = [units[u] for u in live_ulist if u in units]
1865
+ if not us:
1866
+ # Slice rỗng SAU khi loại scope-removal = slice bị CR xóa hẳn → report
1867
+ # riêng thay vì nuốt im lặng (trước G11 bị `continue` bỏ qua vô hình).
1868
+ if rin_slice:
1869
+ removed_slices.append({"slice": sid, "units": rin_slice,
1870
+ "type": slice_meta.get(sid, {}).get("type"),
1871
+ "demo_status": slice_meta.get(sid, {}).get("demo_status")})
1872
+ continue
1873
+ ac_total = sum(u["ac_total"] for u in us)
1874
+ patch = sum(u["review_patch"] for u in us)
1875
+ # FPY chỉ tính trên unit CÓ AC đếm được (ac_total>0): tử & mẫu cùng nguồn.
1876
+ # Unit có patch nhưng AC=0 (parser trượt) bị loại khỏi tỉ lệ + gắn cờ,
1877
+ # tránh tử số `[Review][Patch]` ăn vào mẫu số 0 → FPY âm vô nghĩa.
1878
+ ac_bearing = [u for u in us if u["ac_total"] > 0]
1879
+ fpy_ac = sum(u["ac_total"] for u in ac_bearing)
1880
+ fpy_patch = sum(u["review_patch"] for u in ac_bearing)
1881
+ # F-FPY: tử số = CHỈ patch chức năng (Acceptance). Bảo mật/edge/quality loại.
1882
+ fpy_func = sum(u["functional_patch"] for u in ac_bearing)
1883
+ func_patch = sum(u["functional_patch"] for u in us)
1884
+ patch_excl = sum(u["patch_excluded"] for u in us)
1885
+ patch_uncl = sum(u["patch_unclassified"] for u in us)
1886
+ slice_excl_by = defaultdict(int)
1887
+ for u in us:
1888
+ for k, v in (u.get("patch_excluded_by") or {}).items():
1889
+ slice_excl_by[k] += v
1890
+ # Headline = unit-incidence: bao nhiêu unit chạy đúng luồng chính ngay lần đầu
1891
+ units_func_clean = sum(1 for u in ac_bearing if u["functional_patch"] == 0)
1892
+ # Cờ độ tin: story có tag lăng kính (tin cao) hay phải suy luận lexicon
1893
+ patch_inferred = any(u.get("patch_class_method") == "inferred" for u in ac_bearing)
1894
+ unscored_patch_units = [u["unit"] for u in us
1895
+ if u["ac_total"] == 0 and u["review_patch"] > 0]
1896
+ rdefer = sum(u["review_defer"] for u in us)
1897
+ churn = sum(u["ac_churn"] for u in us)
1898
+ dev = sum(u["deviations"] for u in us)
1899
+ clog = sum(u["changelog_rows"] for u in us)
1900
+ sl_defers = [d for d in defers if d["slice"] == sid]
1901
+ # Avoidability chỉ tính trên record GIÀU trường (avoidable đã ghi rõ);
1902
+ # record bullet (avoidable=None) bị loại khỏi mẫu số — xem G1.
1903
+ sl_rich = [d for d in sl_defers if d["avoidable"] is not None]
1904
+ avoidable = sum(1 for d in sl_rich if d["avoidable"])
1905
+ closed = sum(1 for d in sl_defers if d["status"] == "closed")
1906
+ open_ages = [d["age_days"] for d in sl_defers if d["status"] != "closed" and d["age_days"] is not None]
1907
+ rework_versions = max([rework.get(u, 1) for u in live_ulist] + [1])
1908
+ slices[sid] = {
1909
+ "units": live_ulist,
1910
+ "removed_units_in_slice": rin_slice,
1911
+ "type": slice_meta.get(sid, {}).get("type"),
1912
+ "demo_status": slice_meta.get(sid, {}).get("demo_status"),
1913
+ "ac_total": ac_total,
1914
+ "review_patch": patch,
1915
+ "review_defer": rdefer,
1916
+ "fpy_ac": fpy_ac,
1917
+ "fpy_patch": fpy_patch,
1918
+ "fpy_func": fpy_func,
1919
+ # F-FPY headline = unit-incidence chức năng: % unit (feature) chạy đúng
1920
+ # luồng chính ngay lần đầu (functional_patch==0). Dễ "hình dung" hơn tỉ lệ.
1921
+ "fpy": (units_func_clean / len(ac_bearing)) if ac_bearing else None,
1922
+ "units_func_clean": units_func_clean,
1923
+ "units_ac_bearing": len(ac_bearing),
1924
+ # AC-normalized functional (phụ): 1 − lỗi-chức-năng/AC.
1925
+ "ffpy_acnorm": (max(0.0, 1 - fpy_func / fpy_ac) if fpy_ac else None),
1926
+ "func_density": (fpy_func / fpy_ac) if fpy_ac else None,
1927
+ # SFPY = yield GỒM CẢ hardening (số FPY cũ) — giữ để so sánh gánh nặng review.
1928
+ "sfpy": (max(0.0, 1 - fpy_patch / fpy_ac) if fpy_ac else None),
1929
+ "patch_density": (fpy_patch / fpy_ac) if fpy_ac else None,
1930
+ "functional_patch": func_patch,
1931
+ "patch_excluded": patch_excl,
1932
+ "patch_unclassified": patch_uncl,
1933
+ "patch_excluded_by": dict(slice_excl_by),
1934
+ "patch_inferred": patch_inferred,
1935
+ "unscored_patch_units": unscored_patch_units,
1936
+ "ac_churn": churn,
1937
+ "ac_churn_rate": (churn / ac_total) if ac_total else None,
1938
+ "deviations": dev,
1939
+ "changelog_rows": clog,
1940
+ "defer_count": len(sl_defers),
1941
+ "defer_avoidable": avoidable,
1942
+ "avoidability_index": (avoidable / len(sl_rich)) if sl_rich else None,
1943
+ # G1: defer ghi vào sổ ÷ defer review sinh ra. <1 = nợ mất dấu.
1944
+ "defer_capture_rate": (len(sl_defers) / rdefer) if rdefer else None,
1945
+ "defer_by_category": dict(_count_cat(sl_defers)),
1946
+ "defer_closed": closed,
1947
+ "defer_open": len(sl_defers) - closed,
1948
+ "closure_rate": (closed / len(sl_defers)) if sl_defers else None,
1949
+ "median_open_age_days": (statistics.median(open_ages) if open_ages else None),
1950
+ "rework_versions": rework_versions,
1951
+ }
1952
+
1953
+ clusters, scattered = cluster_defers(defers)
1954
+ totals = _totals(slices, defers)
1955
+ art = harvest_artifact_tokens()
1956
+ code = harvest_code_tokens(unit_slice)
1957
+ churn = harvest_code_churn(unit_slice)
1958
+ # Gắn LOC committed (prod, đã gắn id) per-slice vào slice dict cho §1.
1959
+ for sid, sd in slices.items():
1960
+ cs = churn["by_slice"].get(sid)
1961
+ sd["code_added"] = cs["added"] if cs else 0
1962
+ sd["code_deleted"] = cs["deleted"] if cs else 0
1963
+ cost = build_cost(art, code, totals, load_token_log(refresh=refresh_burn), set(units))
1964
+ return {
1965
+ "slices": slices,
1966
+ "units": units,
1967
+ "defers": defers,
1968
+ "totals": totals,
1969
+ "clusters": clusters,
1970
+ "scattered": scattered,
1971
+ "cost": cost,
1972
+ "code_churn": churn,
1973
+ "drift": drift,
1974
+ "dd": dd,
1975
+ "removed_slices": removed_slices,
1976
+ }
1977
+
1978
+
1979
+ def _count_cat(defers):
1980
+ c = defaultdict(int)
1981
+ for d in defers:
1982
+ c[d["category"]] += 1
1983
+ return c
1984
+
1985
+
1986
+ def _totals(slices, defers):
1987
+ ac = sum(s["ac_total"] for s in slices.values())
1988
+ patch = sum(s["review_patch"] for s in slices.values())
1989
+ # FPY tổng: cùng nguồn AC-bearing như per-slice (xem build()), không phải
1990
+ # patch/ac thô — gộp tử/mẫu đã lọc rồi mới chia + clamp.
1991
+ fpy_ac = sum(s["fpy_ac"] for s in slices.values())
1992
+ fpy_patch = sum(s["fpy_patch"] for s in slices.values())
1993
+ fpy_func = sum(s["fpy_func"] for s in slices.values())
1994
+ units_clean = sum(s["units_func_clean"] for s in slices.values())
1995
+ units_ab = sum(s["units_ac_bearing"] for s in slices.values())
1996
+ func_patch = sum(s["functional_patch"] for s in slices.values())
1997
+ patch_excl = sum(s["patch_excluded"] for s in slices.values())
1998
+ patch_uncl = sum(s["patch_unclassified"] for s in slices.values())
1999
+ excl_by = defaultdict(int)
2000
+ for s in slices.values():
2001
+ for k, v in (s.get("patch_excluded_by") or {}).items():
2002
+ excl_by[k] += v
2003
+ closed = sum(1 for d in defers if d["status"] == "closed")
2004
+ rich = [d for d in defers if d["avoidable"] is not None] # G1: chỉ record giàu
2005
+ rdefer = sum(s["review_defer"] for s in slices.values())
2006
+ return {
2007
+ "ac_total": ac,
2008
+ "review_patch": patch,
2009
+ "review_defer": rdefer,
2010
+ "defer_count": len(defers),
2011
+ "defer_avoidable": sum(1 for d in rich if d["avoidable"]),
2012
+ "defer_rich": len(rich),
2013
+ "defer_bullet": len(defers) - len(rich),
2014
+ # G1: tỉ lệ defer review-time được ghi vào sổ deferred-work.md.
2015
+ "defer_capture_rate": (len(defers) / rdefer) if rdefer else None,
2016
+ "defer_closed": closed,
2017
+ "closure_rate": (closed / len(defers)) if defers else None,
2018
+ # F-FPY headline = unit-incidence chức năng (xem build()).
2019
+ "fpy": (units_clean / units_ab) if units_ab else None,
2020
+ "units_func_clean": units_clean,
2021
+ "units_ac_bearing": units_ab,
2022
+ "ffpy_acnorm": (max(0.0, 1 - fpy_func / fpy_ac) if fpy_ac else None),
2023
+ "func_density": (fpy_func / fpy_ac) if fpy_ac else None,
2024
+ "sfpy": max(0.0, 1 - fpy_patch / fpy_ac) if fpy_ac else None,
2025
+ "patch_density": (fpy_patch / fpy_ac) if fpy_ac else None,
2026
+ "functional_patch": func_patch,
2027
+ "patch_excluded": patch_excl,
2028
+ "patch_unclassified": patch_uncl,
2029
+ "patch_excluded_by": dict(excl_by),
2030
+ "defer_by_category": dict(_count_cat(defers)),
2031
+ }
2032
+
2033
+
2034
+ def render_scorecard(data, run_meta=None):
2035
+ s = data["slices"]
2036
+ order = sorted(s.keys(), key=lambda x: int(re.search(r"\d+", x).group()))
2037
+ L = []
2038
+ w = L.append
2039
+ w("# Báo cáo đánh giá quy trình code bằng AI (bản nền)\n")
2040
+ if run_meta:
2041
+ w(f"**Ngày đánh giá:** {run_meta['date']} · **Lần đánh giá thứ:** {run_meta['round']}\n")
2042
+ bym = (data.get("cost") or {}).get("by_model") or {}
2043
+ if bym:
2044
+ w(f"**Model AI đã dùng:** {model_share(bym)} *(tỉ lệ tính theo tổng token input+output)*\n")
2045
+ w("> Báo cáo này do `scripts/eval-harvester.py` **tự đọc các tài liệu Stage 1–5 rồi đếm ra số**, "
2046
+ "KHÔNG phải nhận xét chủ quan của con người. Mỗi con số chỉ phản ánh đúng những gì tài liệu ghi lại; "
2047
+ "muốn biết chỗ nào dễ sai, đọc mục **6. Giới hạn** trước khi kết luận.\n")
2048
+ w(f"**Phạm vi:** {len(order)} lát cắt (slice) — {', '.join(order)}. "
2049
+ "*Lát cắt (slice) = một mảng tính năng làm trọn vẹn từ thiết kế đến code+test.*\n")
2050
+ dd0 = data.get("dd") or {}
2051
+ rmv_units = dd0.get("removed_units") or []
2052
+ rmv_slices = data.get("removed_slices") or []
2053
+ if rmv_units:
2054
+ by_cr = dd0.get("removed_by_cr") or {}
2055
+ crbits = "; ".join(f"**{cr}** xóa {', '.join(us)}" for cr, us in by_cr.items())
2056
+ emptied = ", ".join(f"{r['slice']} ({', '.join(r['units'])})" for r in rmv_slices)
2057
+ emptynote = (f" Trong đó **{len(rmv_slices)}** lát cắt không còn unit sống chấm điểm "
2058
+ f"được sau khi loại scope-removal ({emptied}) → bỏ khỏi bảng tổng hợp "
2059
+ "(trước đây các lát cắt này bị chấm FPY DỰA TRÊN unit đã xóa)."
2060
+ if rmv_slices else "")
2061
+ w(f"> 🚫 **Phạm vi bị CR xóa (trục C — KHÔNG tính là sản phẩm):** {len(rmv_units)} feature "
2062
+ f"đã bị xóa hẳn — {crbits}. Các unit này đã **loại khỏi mọi chấm điểm FPY/AC/slice** "
2063
+ f"(tombstone DD `dd_version: v*-removed`).{emptynote} Effort thiết kế+story từng đổ vào "
2064
+ "scope này là **lãng phí trục-C**, không phải output — xem §3c.\n")
2065
+
2066
+ w("\n## 1. Bảng tổng hợp từng lát cắt\n")
2067
+ w("> Mỗi cột là một lát cắt; mỗi dòng là một chỉ số. Các chỉ số được xếp theo **4 nhóm kể "
2068
+ "thành một mạch** — đọc từ trên xuống là đi hết vòng đời một lát cắt:\n"
2069
+ ">\n"
2070
+ "> **① Quy mô** (làm bao nhiêu) → **② Chất lượng ngay lần đầu** (code sạch tới đâu trước khi sửa) "
2071
+ "→ **③ Độ ổn định** (yêu cầu & thiết kế có phải làm đi làm lại không) → **④ Nợ để lại** "
2072
+ "(việc đã biết nhưng cố ý hoãn sang sau).\n"
2073
+ ">\n"
2074
+ "> Tên viết tắt (FPY, EFF-…) giữ để tra cứu, nhưng luôn kèm nghĩa tiếng Việt.\n")
2075
+ w("| Chỉ số | " + " | ".join(order) + " |")
2076
+ w("|---|" + "|".join(["---"] * len(order)) + "|")
2077
+ GROUP = object() # dòng tiêu đề nhóm (label-only, các ô lát cắt để trống)
2078
+ rows = [
2079
+ (GROUP, "▸ ① QUY MÔ — lát cắt này gồm những gì"),
2080
+ ("Số đơn vị code (unit)", lambda x: str(len(x["units"]))),
2081
+ ("Kiểu chạy (AFK tự động / HITL có người duyệt)", lambda x: x["type"] or "?"),
2082
+ ("Số tiêu chí nghiệm thu (AC)", lambda x: str(x["ac_total"])),
2083
+ (GROUP, "▸ ② TÍNH NĂNG CHẠY ĐÚNG NGAY LẦN ĐẦU — đo đúng-spec, không tính gia cố"),
2084
+ ("Số lỗi review phải sửa (tổng Patch)", lambda x: str(x["review_patch"])),
2085
+ (" ↳ lỗi CHỨC NĂNG (Acceptance) / gia cố (bảo mật·edge·chất lượng) / chưa rõ",
2086
+ lambda x: f"{x['functional_patch']}/{x['patch_excluded']}/{x['patch_unclassified']}"
2087
+ + (" ⚠️suy luận" if x.get("patch_inferred") else "")),
2088
+ ("**Tính năng chạy đúng ngay lần đầu — F-FPY** (% feature KHÔNG lỗi chức năng; càng cao càng tốt)",
2089
+ lambda x: fmt_pct(x["fpy"])),
2090
+ (" ↳ theo mật độ AC (1 − lỗi-chức-năng/AC; dịu hơn, không nhị phân hoá cả unit)",
2091
+ lambda x: fmt_pct(x["ffpy_acnorm"])),
2092
+ ("Yield gồm CẢ gia cố — SFPY (số FPY kiểu cũ; F-FPY≫SFPY = chạy được nhưng tốn công gia cố)",
2093
+ lambda x: fmt_pct(x["sfpy"])),
2094
+ (GROUP, "▸ ③ ĐỘ ỔN ĐỊNH — yêu cầu & thiết kế có phải làm lại không"),
2095
+ ("Số yêu cầu đổi giữa chừng (hủy/sửa/hoãn AC)", lambda x: str(x["ac_churn"])),
2096
+ ("Tỉ lệ yêu cầu đổi giữa chừng (càng thấp càng ổn định)", lambda x: fmt_pct(x["ac_churn_rate"])),
2097
+ ("Số lần làm khác thiết kế (Deviation)", lambda x: str(x["deviations"])),
2098
+ ("Dòng code thêm/xoá đã commit (LOC +/−, prod đã gắn id)", lambda x: f"+{x['code_added']}/−{x['code_deleted']}"),
2099
+ ("Số lần làm lại thiết kế (phiên bản DD)", lambda x: f"v{x['rework_versions']}"),
2100
+ ("Số lần cập nhật sau khi tạo (Change Log, đã trừ dòng khai sinh)", lambda x: str(x["changelog_rows"])),
2101
+ (GROUP, "▸ ④ NỢ ĐỂ LẠI — việc đã biết nhưng cố ý hoãn sang sau"),
2102
+ ("**Việc bị hoãn lại** (đang mở / đã đóng)", lambda x: f"{x['defer_count']} ({x['defer_open']}/{x['defer_closed']})"),
2103
+ ("**Defer review ghi vào sổ — G1** (sổ ÷ review-defer)", lambda x: fmt_pct(x["defer_capture_rate"])),
2104
+ ("Trong đó: lẽ ra tránh được", lambda x: str(x["defer_avoidable"])),
2105
+ ("**Tỉ lệ nợ lẽ-ra-tránh-được — EFF-7** (càng thấp càng tốt)", lambda x: fmt_pct(x["avoidability_index"])),
2106
+ ("**Tỉ lệ nợ đã xử lý xong — EFF-8** (càng cao càng tốt)", lambda x: fmt_pct(x["closure_rate"])),
2107
+ ("Số ngày trung bình nợ còn treo (EFF-8)", lambda x: ("—" if x["median_open_age_days"] is None else str(int(x["median_open_age_days"])))),
2108
+ ]
2109
+ blanks = " | ".join([""] * len(order))
2110
+ for entry in rows:
2111
+ if entry[0] is GROUP:
2112
+ w(f"| **{entry[1]}** | {blanks} |")
2113
+ else:
2114
+ label, fn = entry
2115
+ w(f"| {label} | " + " | ".join(fn(s[o]) for o in order) + " |")
2116
+ bsm = (data.get("cost") or {}).get("by_slice_model") or {}
2117
+ if bsm:
2118
+ def slice_models(sid):
2119
+ return model_share(bsm.get(sid) or {}) if bsm.get(sid) else "—"
2120
+ w("| Model AI dùng (% token) | " + " | ".join(slice_models(o) for o in order) + " |")
2121
+ w("\n*Cách đọc nhanh — lần theo đúng 4 nhóm:* "
2122
+ "**② F-FPY thấp** → tính năng KHÔNG chạy đúng spec ngay lần đầu (Acceptance Auditor phải sửa "
2123
+ "lỗi luồng chính/AC). *F-FPY chỉ đếm lỗi chức năng; lỗi bảo mật/edge/chất lượng nằm ở SFPY — "
2124
+ "F-FPY cao nhưng SFPY thấp = feature chạy được nhưng tốn nhiều công gia cố.* "
2125
+ "**③ Tỉ lệ đổi-giữa-chừng cao / Deviation nhiều / DD lên nhiều phiên bản** → yêu cầu & thiết kế "
2126
+ "chưa được chốt kỹ trước khi code. "
2127
+ "**④ Tỉ lệ nợ tránh-được cao** → phần lớn việc bị hoãn là do quy trình, không phải lý do khách quan.\n")
2128
+
2129
+ w("\n## 2. Việc bị hoãn lại — phân theo lý do\n")
2130
+ w("> \"Việc bị hoãn\" (defer) = phần đã biết nhưng cố ý để làm sau. Chia 2 nhóm: "
2131
+ "**hợp lệ** (lý do khách quan, ngoài tầm kiểm soát) và **lẽ ra tránh được** (in đậm — nợ do quy trình). "
2132
+ "Mục tiêu là kéo nhóm tránh-được về 0.\n")
2133
+ # G1 — đối soát defer: review sinh bao nhiêu vs sổ deferred-work.md ghi bao nhiêu.
2134
+ t0 = data["totals"]
2135
+ trd, tdc, cap = t0["review_defer"], t0["defer_count"], t0.get("defer_capture_rate")
2136
+ if trd and (tdc == 0 or (cap is not None and cap < 0.5)):
2137
+ w(f"> ⚠️ **Lỗ hổng truy vết defer (G1):** review sinh **{trd}** defer "
2138
+ f"(`[Review][Defer]` trong story) nhưng sổ `deferred-work.md` chỉ đọc được **{tdc}** "
2139
+ f"(**{fmt_pct(cap)}** ghi sổ). Phần thiếu = nợ đã nhận diện nhưng **mất dấu** — "
2140
+ "không phân biệt được \"sạch nợ\" với \"không ghi sổ\". Xem `harvester_upgrade.md` G1.\n")
2141
+ elif trd:
2142
+ bullet = t0.get("defer_bullet", 0)
2143
+ w(f"> **Đối soát defer (G1):** {tdc}/{trd} defer review-time có trong sổ "
2144
+ f"(**{fmt_pct(cap)}** ghi sổ; {bullet} từ bullet `## Deferred from:`, "
2145
+ f"{t0.get('defer_rich', 0)} từ block `### DEF-`). "
2146
+ "*Capture-rate là tín hiệu định hướng — sổ có thể chứa defer ngoài review nên không phải 1:1.*\n")
2147
+ cats = DEFER_CATEGORY_ORDER + ["uncategorized"]
2148
+ w("| Lý do hoãn | " + " | ".join(order) + " | Tổng | Đánh giá bản chất |")
2149
+ w("|---|" + "|".join(["---"] * (len(order) + 2)) + "|")
2150
+ nature = {"contract-blocked": "chờ chốt hợp đồng API bên ngoài → hợp lệ",
2151
+ "arch-limit": "giới hạn kiến trúc đã biết, cố ý → hợp lệ",
2152
+ "asset-gap": "chờ tài nguyên/thiết kế bên ngoài → hợp lệ",
2153
+ "scope-deferred": "chủ động cắt bớt phạm vi → hợp lệ",
2154
+ "test-deferred": "**bỏ viết test → nợ quy trình (tránh được)**",
2155
+ "cross-slice-dep": "**chờ lát cắt khác xong → nợ điều phối (tránh được)**",
2156
+ "deferred-bug": "**bug/UX để lại làm sau → tránh được**",
2157
+ "security-hardening": "**gia cố bảo mật để sau → tránh được**",
2158
+ "uncategorized": "chưa ghi rõ lý do"}
2159
+ label_cat = {"contract-blocked": "Chờ hợp đồng API", "arch-limit": "Giới hạn kiến trúc",
2160
+ "asset-gap": "Thiếu tài nguyên", "scope-deferred": "Cắt phạm vi",
2161
+ "test-deferred": "Bỏ test", "cross-slice-dep": "Phụ thuộc lát cắt khác",
2162
+ "deferred-bug": "Bug để sau", "security-hardening": "Bảo mật để sau",
2163
+ "uncategorized": "Chưa phân loại"}
2164
+ tot = data["totals"]["defer_by_category"]
2165
+ for c in cats:
2166
+ if tot.get(c, 0) == 0:
2167
+ continue
2168
+ cells = [str(s[o]["defer_by_category"].get(c, 0)) for o in order]
2169
+ w(f"| {label_cat.get(c,c)} `{c}` | " + " | ".join(cells) + f" | {tot.get(c,0)} | {nature.get(c,'?')} |")
2170
+ t = data["totals"]
2171
+ if t["defer_count"]:
2172
+ rich = t.get("defer_rich", t["defer_count"]) # chỉ record có avoidable đã ghi
2173
+ bullet = t.get("defer_bullet", 0)
2174
+ if rich:
2175
+ avoid_pct = fmt_pct(t["defer_avoidable"] / rich) # mẫu số = record đã phân loại
2176
+ w(f"\n**Tổng cộng {t['defer_count']} việc bị hoãn**, trong đó {rich} việc đã phân loại — "
2177
+ f"**{t['defer_avoidable']} ({avoid_pct}) lẽ ra tránh được** (nợ do quy trình, nên ưu tiên xử lý).")
2178
+ else:
2179
+ w(f"\n**Tổng cộng {t['defer_count']} việc bị hoãn.**")
2180
+ if bullet:
2181
+ w(f" Trong đó **{bullet}** việc từ review (bullet `## Deferred from:`) **chưa phân loại** "
2182
+ "avoidable/category — cần enrich → block `### DEF-` để chấm (G1).")
2183
+ w("\n")
2184
+ else:
2185
+ w("\n**Chưa có việc hoãn nào được ghi nhận** — không có nợ quy trình để xử lý ở thời điểm này.\n")
2186
+
2187
+ w("\n## 2b. Gom nợ theo \"một hành động đóng được nhiều việc\"\n")
2188
+ w("> Nhiều việc bị hoãn thực ra cùng chờ MỘT điều kiện. Bảng này gom chúng lại: mỗi dòng là một hành động "
2189
+ "(hoặc sự kiện) mà khi xong sẽ đóng luôn nhiều việc cùng lúc — giúp biết nên ưu tiên làm gì. "
2190
+ "Dòng `— (rải rác)` = các việc không gom được, phải xử lý lẻ từng cái.\n")
2191
+ w("| Hành động đóng nợ | Số việc đóng được | Trong đó tránh-được | Thuộc lát cắt |")
2192
+ w("|---|--:|--:|---|")
2193
+ clusters = data["clusters"]
2194
+ for c in clusters:
2195
+ w(f"| `{c['action']}` | {c['count']} | {c['avoidable']} | {', '.join(c['slices'])} |")
2196
+ sc = data["scattered"]
2197
+ w(f"| **{sc['action']}** | {sc['count']} | {sc['avoidable']} | {', '.join(sc['slices'])} |")
2198
+ open_total = sum(c["count"] for c in clusters) + sc["count"]
2199
+ open_av = sum(c["avoidable"] for c in clusters) + sc["avoidable"]
2200
+ clustered_av = sum(c["avoidable"] for c in clusters) # closeable by 1 action / dependency event
2201
+ w(f"\n**Đang mở {open_av} việc tránh-được**: **{clustered_av} việc gom cụm được** "
2202
+ f"(chỉ cần làm xong 1 hành động/sự kiện là đóng cả cụm) + **{sc['avoidable']} việc rải rác** "
2203
+ "(phải xử lý từng cái). "
2204
+ f"→ Phần rải-rác chiếm {fmt_pct(sc['avoidable']/open_total) if open_total else 'n/a'} — "
2205
+ "đây mới là phần khó giải quyết thật sự (không có đòn bẩy chung).\n")
2206
+
2207
+ w("\n## 3. Lỗi sinh ra ở đâu, bắt được ở đâu (từng đơn vị code)\n")
2208
+ w("> Bảng truy ngược theo từng unit: nhiều lỗi review (Patch) + ít việc hoãn → lỗi bị dồn về cuối; "
2209
+ "ngược lại nhiều việc hoãn → vấn đề được nhận ra nhưng đẩy sang sau.\n")
2210
+ w("> Cột **Lỗi chức năng** = patch luồng chính/AC (trừ F-FPY); **Gia cố** = bảo mật·edge·chất lượng "
2211
+ "(không trừ F-FPY). `⚠️suy luận` = story không tag lăng kính review nên phải đoán từ nội dung.\n")
2212
+ w("| Đơn vị code | Lát cắt | Số AC | Lỗi chức năng | Gia cố | Tổng Patch | Việc hoãn | Làm khác thiết kế | Lần cập nhật sau tạo |")
2213
+ w("|---|---|--:|--:|--:|--:|--:|--:|--:|")
2214
+ for o in order:
2215
+ for u in s[o]["units"]:
2216
+ uu = data["units"].get(u)
2217
+ if not uu:
2218
+ continue
2219
+ note = " ⚠️(đếm gián tiếp)" if uu["ac_count_method"] in ("referenced", "plain-list") else ""
2220
+ fnote = " ⚠️suy luận" if uu.get("patch_class_method") == "inferred" else ""
2221
+ uncl = uu.get("patch_unclassified", 0)
2222
+ unote = f" (+{uncl}?)" if uncl else ""
2223
+ w(f"| {u} | {o} | {uu['ac_total']}{note} | {uu.get('functional_patch', 0)}{fnote} | "
2224
+ f"{uu.get('patch_excluded', 0)}{unote} | {uu['review_patch']} | "
2225
+ f"{uu['review_defer']} | {uu['deviations']} | {uu['changelog_rows']} |")
2226
+
2227
+ render_drift(w, data)
2228
+ render_dd(w, data)
2229
+ render_crosslayer(w, data)
2230
+
2231
+ w("\n## 4. Cảnh báo tự động — lát cắt nào cần chú ý\n")
2232
+ w("> Máy tự gắn cờ khi một chỉ số vượt ngưỡng đáng lo. Không có cờ = chỉ số trong vùng an toàn.\n")
2233
+ for o in order:
2234
+ x = s[o]
2235
+ flags = []
2236
+ if x["fpy"] is not None and x["fpy"] < 0.8:
2237
+ dens = x.get("func_density")
2238
+ extra = (f" — mật độ {fmt_ratio(dens)} lỗi-chức-năng/AC" if dens else "")
2239
+ inf = " *(suy luận — story không tag review)*" if x.get("patch_inferred") else ""
2240
+ flags.append(f"Tính-năng-chạy-đúng-lần-đầu chỉ {fmt_pct(x['fpy'])} (<80%){extra}{inf} → "
2241
+ "Acceptance Auditor phải sửa lỗi luồng chính/AC mà lẽ ra spec+design Stage 3–4 "
2242
+ "phải làm rõ trước")
2243
+ if x.get("patch_unclassified", 0) >= 3:
2244
+ flags.append(f"{x['patch_unclassified']} patch chưa phân loại được (không tag, không khớp lexicon) "
2245
+ "→ F-FPY của lát cắt này kém chắc; soi tay mục *Patch* để xác nhận chức năng hay gia cố")
2246
+ if x.get("unscored_patch_units"):
2247
+ flags.append(f"{len(x['unscored_patch_units'])} unit có lỗi review nhưng parser không đếm được AC "
2248
+ f"({', '.join(x['unscored_patch_units'])}) → đã loại khỏi F-FPY; kiểm tra mục "
2249
+ "*Acceptance Criteria* của các unit này có viết đúng style không")
2250
+ if x["ac_churn_rate"] and x["ac_churn_rate"] >= 0.15:
2251
+ flags.append(f"Yêu cầu đổi giữa chừng {fmt_pct(x['ac_churn_rate'])} (cao) → yêu cầu chưa chốt kỹ "
2252
+ "trước khi bắt tay code")
2253
+ if x["avoidability_index"] and x["avoidability_index"] >= 0.4:
2254
+ flags.append(f"{fmt_pct(x['avoidability_index'])} việc hoãn là loại tránh-được → phần lớn nợ do quy trình")
2255
+ if x["rework_versions"] >= 3:
2256
+ flags.append(f"Thiết kế đã làm lại tới phiên bản v{x['rework_versions']} → tốn nhiều vòng sửa thiết kế")
2257
+ if x["code_added"] and x["code_deleted"] / x["code_added"] >= 0.5:
2258
+ flags.append(f"Code viết-rồi-xoá nhiều (+{x['code_added']}/−{x['code_deleted']} dòng, "
2259
+ f"xoá ≈ {fmt_pct(x['code_deleted']/x['code_added'])} số dòng thêm) → thrash ở tầng code (EFFY-3b)")
2260
+ w(f"- **{o}**: " + ("; ".join(flags) if flags else "không có cảnh báo nào — ổn ✓"))
2261
+
2262
+ render_cost(w, data)
2263
+
2264
+ w("\n## 6. Giới hạn của báo cáo — đọc trước khi kết luận\n")
2265
+ w("> Báo cáo do máy đọc văn bản đếm ra, nên có những chỗ dễ lệch. Biết trước các giới hạn này để "
2266
+ "không hiểu sai con số.\n")
2267
+ w("- **Cách đếm số tiêu chí nghiệm thu (AC)**: máy thử 3 cách theo thứ tự ưu tiên — (1) đề mục đậm "
2268
+ "`**AC-N**`, (2) danh sách đánh số `N. **…**`. Cả hai đều đáng tin. Chỉ khi cả hai đều trượt mới rơi "
2269
+ "xuống (3) *đếm gián tiếp* (`⚠️`): gom mọi chuỗi `AC-N` xuất hiện trong phần AC rồi đếm số khác nhau — "
2270
+ "cách này dễ lệch (không nở dải `AC7–AC14`, đếm nhầm cả tham chiếu chéo) nên FPY của unit đó kém tin cậy. "
2271
+ "*Hiện chưa unit nào rơi vào cách (3); nếu thấy `⚠️` ở §3 thì mới cần dè chừng.*")
2272
+ w("- **F-FPY chỉ đo lỗi CHỨC NĂNG, không đo gia cố**: tử số chỉ gồm patch khiến *tính năng chạy "
2273
+ "sai spec/luồng chính* — bám theo lăng kính **Acceptance Auditor** của `/bmad-code-review`. Lỗi "
2274
+ "bảo mật, edge-case, chất lượng/convention **cố ý loại** (feature vẫn chạy, chỉ cần gia cố) → "
2275
+ "xem ở **SFPY** và cột *Gia cố* §3. Cách phân loại 3 tầng: (1) **tag lăng kính** `(auditor)`/`(blind+edge)` "
2276
+ "ở cuối bullet patch — tin cao; (2) story không tag → *suy luận* (`⚠️`): dẫn `AC-N` + động từ hỏng "
2277
+ "⇒ chức năng, còn lexicon bảo mật/edge/quality ⇒ gia cố; (3) không đủ tín hiệu → **chưa phân loại** "
2278
+ "(cột Gia cố ghi `(+N?)`), KHÔNG ngầm tính sạch. *6/17 story HUB không tag lăng kính → rơi tầng (2), "
2279
+ "F-FPY của chúng kém chắc hơn — đã gắn `⚠️suy luận`.* Ngưỡng severity (Critical/High) hiện CHƯA dùng "
2280
+ "để lọc; một AC-nit nhỏ vẫn tính như một lỗi chức năng.")
2281
+ w("- **Chưa đo được tốc độ làm việc**: mọi mốc thời gian trong Change Log đều ghi cùng một ngày, "
2282
+ "nên không tính được mất bao lâu cho mỗi bước. Muốn đo cần ghi mốc bắt đầu/kết thúc cho từng stage.")
2283
+ w("- **\"Số lần cập nhật sau khi tạo\"**: đếm số dòng Change Log có ngày rồi **trừ 1 dòng khai sinh** "
2284
+ "(dòng \"tạo story / scaffold\" đầu tiên) — để unit tạo-xong-là-done tính 0 lần sửa, không phải 1. "
2285
+ "Giả định dòng đầu luôn là dòng tạo; nếu một unit ghi Change Log bắt đầu giữa chừng (thiếu dòng tạo) "
2286
+ "thì con số sẽ bị hụt 1.")
2287
+ w("- **Có thể sót \"làm khác thiết kế\"**: máy chỉ bắt được khi ghi rõ là deviation; nếu viết lẫn trong "
2288
+ "đoạn văn dài thì có thể bỏ lọt.")
2289
+ w(f"- **Phân loại việc-hoãn do người ghi**: lý do/đánh-giá-tránh-được/trạng-thái lấy thẳng từ sổ "
2290
+ f"`deferred-work.md` (do người điền), không phải máy đoán. Tuổi nợ tính tới ngày mốc {AS_OF.isoformat()}.")
2291
+ w("- **Số liệu do AI tự khai**: số lần làm-khác-thiết-kế và việc-hoãn là do agent tự ghi, nên phụ thuộc "
2292
+ "mức độ trung thực khi ghi chép.")
2293
+ w("- **Dòng code thêm/xoá (LOC committed, §5.3b)**: đếm từ `git log --numstat` của **mọi code repo** phát "
2294
+ "hiện được (multi-repo FE+BE: gộp qua từng repo, mỗi repo chạy git log riêng). Churn của "
2295
+ "file đã **bị xoá hẳn** không quy được về prod/lát cắt (không còn header `id:`) → gom vào dòng \"Khác\". "
2296
+ "Repo brownfield **chưa gắn `id:` header** (code cũ Java/FE) sẽ rơi hết vào \"Khác\" và prod=0 — đó là theo "
2297
+ "thiết kế (attribution dựa header), không phải lỗi đọc. "
2298
+ "Đổi-tên file (nếu git không nhận diện được rename) bị tính thành xoá+thêm → có thể thổi nhẹ tỉ lệ thrash. "
2299
+ "Commit đầu của dự án brownfield dồn codebase cũ vào một lần làm cột \"thêm\" rất lớn (nhưng không thổi tỉ lệ "
2300
+ "vì gần như không có dòng xoá). LOC chỉ là **mẫu số chuẩn-hoá**, KHÔNG phải thước đo năng suất — nhiều dòng "
2301
+ "≠ nhiều giá trị.")
2302
+ w("- **Mẫu còn nhỏ** (3 lát cắt): chỉ nên xem là xu hướng, chưa đủ để kết luận chắc; dự án dựng lại từ "
2303
+ "code cũ (brownfield) thường có nhiều việc-hoãn/tái-sử-dụng hơn do nền tảng cũ.")
2304
+ w(f"- **Hai loại token khác nhau, đừng nhầm**: §5 có cả *token-proxy* (cân theo độ dài văn bản, ~{CHARS_PER_TOKEN} "
2305
+ "ký tự/token — KHÔNG phải tiền) và *token thật* (LLM thực sự xử lý, gồm cả đọc-lại ngữ cảnh + suy luận + "
2306
+ "thử lại, mới ra chi phí $). Token thật được tự gom từ nhật ký phiên Claude Code; nếu không có sẽ hiện `n/a`. "
2307
+ "Token code đếm theo file có dòng `id:` trong code repo; test `tests/` không gắn id thì đếm riêng, "
2308
+ "không quy về lát cắt nào.")
2309
+ return "\n".join(L) + "\n"
2310
+
2311
+
2312
+ def render_drift(w, data):
2313
+ """§3b — Drift gate L3↔L2 (G8): lệch thiết kế ↔ hợp đồng bắt TRƯỚC khi vào code."""
2314
+ dr = data.get("drift") or {}
2315
+ w("\n## 3b. Lệch thiết kế ↔ hợp đồng bắt ở cổng thiết kế (drift L3↔L2 — G8)\n")
2316
+ if not dr.get("available") or not dr.get("reports"):
2317
+ w("> 🔴 Chưa đọc được drift report nào (`Stage_4_Design/ui_schema/drift_report_*.md`). "
2318
+ "Khi có, phần này đếm số lệch L3↔L2 chặn được ở cổng thiết kế trước khi code.\n")
2319
+ return
2320
+ w("> Mỗi unit UI sinh **drift report** đối chiếu thiết kế chi tiết (L3) ↔ hợp đồng dữ liệu (L2). "
2321
+ "**BLOCKING** = lệch chặn sinh schema (phải sửa trước khi code) · **RECONCILED** = blocking đã hoà giải "
2322
+ "tại cổng · **NON-BLOCKING** = lệch nhỏ ghi nhận. Bắt ở đây = chặn lỗi **trước** Stage 5 (code). "
2323
+ "*Heuristic đếm theo cấu trúc văn bản, dedup re-run theo ngày mới nhất.*\n")
2324
+ b, r, nb = dr["blocking"], dr["reconciled"], dr["nonblocking"]
2325
+ w(f"- **{dr['reports']}** unit có drift report; **{dr['halted']}** unit bị HALT Phase B vì còn blocking.")
2326
+ w(f"- **Tổng lệch bắt ở cổng thiết kế: {b + r + nb}** — "
2327
+ f"**{b}** blocking đang mở · **{r}** blocking đã hoà giải · **{nb}** non-blocking.")
2328
+ if dr["res_l2"] + dr["res_l3"]:
2329
+ w(f"- Hướng hoà giải (ai là chuẩn): **L2 hợp đồng thắng {dr['res_l2']}** lần · "
2330
+ f"**L3 thiết kế phải sửa {dr['res_l3']}** lần" +
2331
+ (" — L2 thắng nhiều hơn ⇒ phần lớn là thiết kế lệch khỏi hợp đồng dữ liệu."
2332
+ if dr["res_l3"] >= dr["res_l2"] else "."))
2333
+ w("")
2334
+ w("| Unit | Ngày | Blocking (mở) | Đã hoà giải | Non-blocking | Cổng thiết kế |")
2335
+ w("|---|---|--:|--:|--:|---|")
2336
+ for unit, rec in dr["by_unit"].items():
2337
+ gate = "⛔ HALT" if rec["gate_outcome"] == "halted" else "✅ qua"
2338
+ w(f"| {unit} | {rec['date'] or '—'} | {rec['blocking']} | {rec['reconciled']} | "
2339
+ f"{rec['nonblocking']} | {gate} |")
2340
+ w("\n*Cách đọc: blocking-đang-mở cao = thiết kế còn lệch hợp đồng chưa chốt; đã-hoà-giải cao = cổng "
2341
+ "đang làm đúng việc (bắt & ép sửa trước khi code); non-blocking = nợ nhỏ ghi vào `_drift_notes` schema.*\n")
2342
+
2343
+
2344
+ def render_dd(w, data):
2345
+ """§3c — CR & drift trong Detailed Design L3 (G10): bù trục C từ tầng thiết kế."""
2346
+ dd = data.get("dd") or {}
2347
+ w("\n## 3c. CR & lệch thiết kế trong Đặc tả chi tiết (L3 — G10)\n")
2348
+ if not dd.get("available") or not dd.get("files"):
2349
+ w("> 🔴 Chưa đọc được file `detailed_design/*_detailed_design.md` nào. Khi có, phần này đếm "
2350
+ "CR (bảng lịch sử thay đổi), lệch thiết kế L3↔TechSpec (§1.2) và quyết định treo `[TBD]`.\n")
2351
+ return
2352
+ w("> Mỗi DD chứa **bảng lịch sử thay đổi** (số lần sửa thiết kế) + (với feature có lệch) "
2353
+ "**section drift/inheritance-audit §1.x**. Tín hiệu **bổ sung** cho §3b: §3b đo drift **UI** (L3↔L2 "
2354
+ "schema, file `drift_report`); §3c đo drift **L3↔TechSpec** + lịch sử sửa DD — nguồn drift DUY NHẤT cho "
2355
+ "feature **BE** (không có UI schema). *Drift chấm theo **verdict per-unit** (resolved / flags / none) — "
2356
+ "KHÔNG đếm per-item `Dn` vì ID drift đa convention & status nằm ở cấp section, đếm thô ra số sai.*\n")
2357
+ ct, tk = dd["cr_total"], dd["cr_ticketed"]
2358
+ bt = dd.get("by_type") or {}
2359
+ amd = " · ".join(f"{k}={bt[k]}" for k in ("A", "M", "D") if bt.get(k)) or "—"
2360
+ ticknote = (f"; trong đó **{tk}** có link CR/Jira ngoài chính thức" if tk else
2361
+ "; **không dòng nào** link CR/Jira ngoài chính thức → mọi lần sửa là vòng lặp thiết kế nội bộ")
2362
+ rmv = dd.get("removed_units") or []
2363
+ rmv_note = (f" (+ **{len(rmv)}** tombstone bị XÓA theo CR — tách riêng bên dưới, "
2364
+ "KHÔNG tính vào mẫu số)" if rmv else "")
2365
+ w(f"- **{dd['files']}** DD sống đọc được{rmv_note}; tổng **{ct}** lần sửa thiết kế "
2366
+ f"(dòng change-history){ticknote}. Loại thay đổi: {amd} *(A=tạo mới, M=sửa, D=xoá)*.")
2367
+ if rmv:
2368
+ by_cr = dd.get("removed_by_cr") or {}
2369
+ crbits = " · ".join(f"**{cr}**: {', '.join(us)}" for cr, us in by_cr.items())
2370
+ w(f"- 🚫 **Scope-removal (trục C):** **{len(rmv)}** feature bị XÓA hẳn theo CR — "
2371
+ f"{crbits}. DD đã gut thành tombstone (`dd_version: v*-removed`). Các unit này đã "
2372
+ "**loại khỏi mẫu số §3c VÀ khỏi mọi chấm điểm FPY/AC/slice** (§1/§A) — không tính "
2373
+ "là deliverable sống. Effort thiết kế+story từng đổ vào scope sắp xóa là **lãng phí "
2374
+ "trục-C**, không phải output.")
2375
+ vc = dd.get("verdict_counts") or {}
2376
+ nres, nflag, nnone = vc.get("resolved", 0), vc.get("flags", 0), vc.get("none", 0)
2377
+ flagged = dd.get("flagged_units") or []
2378
+ if nres or nflag:
2379
+ flagnote = (f" — **{', '.join(flagged)}**" if flagged else "")
2380
+ w(f"- **Drift L3↔TechSpec (verdict per-unit):** **{nres}** unit resolved (mọi finding đã land, "
2381
+ f"kể cả fix tại L2/Module-0/WBS) · **{nflag}** unit còn **flags** (≥1 finding treo){flagnote} · "
2382
+ f"{nnone} unit có section nhưng không drift finding." +
2383
+ (" Không unit nào còn flag ⇒ cổng thiết kế L3 đang ép hoà giải trước khi code."
2384
+ if nflag == 0 else " Các unit flags cần review nợ thiết kế trước khi đóng."))
2385
+ else:
2386
+ w("- Không DD nào surface section drift/inheritance-audit (feature đơn giản, không lệch).")
2387
+ if dd["tbd_confirm"]:
2388
+ w(f"- **{dd['tbd_confirm']}** quyết định thiết kế còn treo (`[TBD]`/`[TBD-confirm]`) — defer ở tầng thiết kế, "
2389
+ "cần chốt trước khi đóng feature.")
2390
+ w("")
2391
+ w("| Unit | Bản DD | Lần sửa DD | có ticket | Drift verdict | finding treo/tổng | TBD |")
2392
+ w("|---|---|--:|--:|:--|--:|--:|")
2393
+ VMARK = {"resolved": "✅ resolved", "flags": "⚠️ flags", "none": "—",
2394
+ "removed": "🚫 XÓA (CR)"}
2395
+ for unit, rec in dd["by_unit"].items():
2396
+ ver = rec.get("version") or "—"
2397
+ vt = VMARK.get(rec.get("drift_verdict"), "—")
2398
+ fc = f"{rec['drift_open']}/{rec['drift_findings']}" if rec["drift_findings"] else "—"
2399
+ tb = rec["tbd"] or "—"
2400
+ tk = rec["cr_ticketed"] or "—"
2401
+ w(f"| {unit} | {ver} | {rec['cr_total']} | {tk} | {vt} | {fc} | {tb} |")
2402
+ w("\n*Cách đọc: lần-sửa-DD cao = thiết kế churn nhiều sau khi tạo (yêu cầu/thiết kế chưa ổn định); "
2403
+ "verdict **flags** = ≥1 finding drift còn treo (TBD / cần upstream / build trên mock) — nợ thiết kế "
2404
+ "cần đóng; **resolved** = mọi finding đã land (sửa L3 hoặc L2 đều tính); TBD = quyết định thiết kế đang "
2405
+ "hoãn. Cột 'có ticket' = số lần sửa truy được CR/Jira ngoài (— = sửa nội bộ, không ticket).*\n")
2406
+
2407
+
2408
+ def render_crosslayer(w, data):
2409
+ """§3d — Drift & điều chỉnh tài liệu XUYÊN TẦNG L2 → L3 → Story. Tổng hợp lại 3
2410
+ nguồn đã có (G8 drift_report UI, G10 DD inheritance/TechSpec audit, deviation +
2411
+ change-log story) thành 2 bảng: (A) tỉ lệ drift xuôi dòng, (B) chiều điều chỉnh
2412
+ tài liệu 2 chiều. Consumer-only — không thêm parser, chỉ chiếu lại số đã đếm."""
2413
+ dd = data.get("dd") or {}
2414
+ dr = data.get("drift") or {}
2415
+ removed = set(dd.get("removed_units") or [])
2416
+ units = {u: v for u, v in (data.get("units") or {}).items() if u not in removed}
2417
+ N = len(units)
2418
+ w("\n## 3d. Drift & điều chỉnh tài liệu xuyên tầng (L2 → L3 → Story)\n")
2419
+ if not N:
2420
+ w("> Chưa đủ dữ liệu unit để tính drift xuyên tầng.\n")
2421
+ return
2422
+ w("> Gộp 3 nguồn đã đo ở §3b/§3c/§1 theo **ranh giới tầng tài liệu**: "
2423
+ "**L2** = thượng nguồn của thiết kế (HLD / Module-0 / TechSpec) · **L3** = Đặc tả chi "
2424
+ "tiết (DD) · **Story** = story build Stage-5. *Drift = tầng dưới lệch khỏi tầng trên; "
2425
+ "điều chỉnh 2 chiều = khi phát hiện lệch thì sửa tầng dưới (xuôi) hay đẩy ngược sửa tầng "
2426
+ "trên (escalate).* Mẫu số = **%d** unit sống (đã loại tombstone scope-removal).\n" % N)
2427
+
2428
+ # --- Bảng A: drift xuôi dòng (unit-incidence, KHÔNG đếm per-item) ---
2429
+ g8u = {u for u, r in (dr.get("by_unit") or {}).items()
2430
+ if u not in removed and (r["blocking"] + r["reconciled"] + r["nonblocking"]) > 0}
2431
+ g10u = {u for u, r in (dd.get("by_unit") or {}).items()
2432
+ if u not in removed and r.get("drift_findings", 0) > 0}
2433
+ l2l3 = g8u | g10u
2434
+ devu = {u for u, v in units.items() if v["deviations"] > 0}
2435
+ w("\n**A. Tỉ lệ drift xuôi dòng** — **đơn vị đo: SỐ UNIT** *(1 unit có nhiều drift vẫn "
2436
+ "tính 1; đo theo unit chứ không theo per-item vì ID drift đa convention, xem §3c)*\n")
2437
+ w("| Ranh giới tầng | Đơn vị lệch / tổng (số unit) | Tỉ lệ drift (% unit) | Tín hiệu nguồn |")
2438
+ w("|---|--:|--:|:--|")
2439
+ w(f"| **L2 → L3** (Kiến trúc → Thiết kế chi tiết) | {len(l2l3)}/{N} | "
2440
+ f"**{fmt_pct(len(l2l3)/N)}** | drift_report UI ({len(g8u)} unit, G8) ∪ "
2441
+ f"inheritance/TechSpec audit DD ({len(g10u)} unit, G10) |")
2442
+ devnote = (f"{len(devu)}/{N}", fmt_pct(len(devu) / N)) if devu else ("0/%d" % N, "0%")
2443
+ w(f"| **L3 → Story** (Thiết kế chi tiết → Story build) | {devnote[0]} | "
2444
+ f"**{devnote[1]}** | Deviation \"làm khác thiết kế\" trong story |")
2445
+ if not devu:
2446
+ w("\n> ⚠️ *L3→Story = 0 vì story KHÔNG ghi token `DEVIATION` nào (format chưa được skill "
2447
+ "phát) — KHÔNG kết luận \"story bám sát thiết kế tuyệt đối\". Đọc kèm **AC đổi giữa "
2448
+ "chừng** (§1, ac_churn) và **lỗi review phải sửa** (§1, patch) làm tín hiệu thay thế cho "
2449
+ "độ lệch story↔thiết kế.*")
2450
+
2451
+ # --- Bảng B: chiều điều chỉnh tài liệu 2 chiều ---
2452
+ rl2, rl3 = dr.get("res_l2", 0), dr.get("res_l3", 0)
2453
+ tot_res = rl2 + rl3
2454
+ esc = fmt_pct(rl2 / tot_res) if tot_res else "—"
2455
+ l3_rev = dd.get("cr_total", 0)
2456
+ story_rev = sum(v["changelog_rows"] for v in units.values())
2457
+ w("\n**B. Điều chỉnh tài liệu 2 chiều** — **đơn vị đo: SỐ LẦN** *(khi có lệch: sửa tầng dưới "
2458
+ "cho khớp = xuôi; sửa ngược tầng trên = escalate). ⚠️ 2 hàng dùng 2 counter khác nhau: "
2459
+ "L2↔L3 đếm **lần marker** `[L2]`/`[L3]`, L3↔Story đếm **dòng change-log** → KHÔNG so chéo "
2460
+ "giữa 2 hàng, chỉ đọc chiều xuôi/ngược trong cùng 1 hàng.*\n")
2461
+ w("| Ranh giới | Sửa tầng DƯỚI — xuôi (số lần) | Đẩy ngược sửa TRÊN (số lần) | "
2462
+ "Tỉ lệ escalate ngược (lần/lần) | Đơn vị đếm + nguồn |")
2463
+ w("|---|--:|--:|--:|:--|")
2464
+ w(f"| **L2 ↔ L3** | {rl3} | {rl2} | **{esc}** | "
2465
+ "số lần marker `[L3]`/`[L2]` trong drift_report (G8) |")
2466
+ w(f"| **L3 ↔ Story** | {story_rev} | {l3_rev} | — | "
2467
+ "số dòng change-log story vs change-log DD |")
2468
+ w("\n*Cách đọc: **L2↔L3** tách được chiều nhờ marker `[L2]`/`[L3]` ghi rõ trong drift_report "
2469
+ f"— escalate ngược **{esc}** nghĩa là gần ngần ấy lượt hoà giải phải sửa LÊN kiến trúc "
2470
+ "(L2 chưa chốt kỹ trước khi xuống L3), không chỉ sửa xuống L3. **L3↔Story** chỉ đếm được "
2471
+ "TỔNG số lần sửa mỗi tầng (change-log), **KHÔNG** tách được lần sửa nào do phản hồi ngược "
2472
+ "từ tầng kia (thiếu ticket liên kết) → cột escalate để `—`. Số lần sửa L3 cao so với Story "
2473
+ "= phần lớn churn tài liệu nằm ở tầng thiết kế.*\n")
2474
+
2475
+
2476
+ def render_cost(w, data):
2477
+ c = data.get("cost")
2478
+ w("\n## 5. Chi phí token\n")
2479
+ if not c:
2480
+ w("> Không có dữ liệu chi phí.\n")
2481
+ return
2482
+ w("> **Đọc kỹ phần này có 2 loại token, đừng nhầm:**\n"
2483
+ f"> - **Token-proxy** = cân độ dài tài liệu/code (~{CHARS_PER_TOKEN} ký tự = 1 token). Đây CHỈ là thước "
2484
+ "đo \"khối lượng sản phẩm làm ra\", **không phải tiền**. Dùng để so tỉ lệ tài-liệu/code.\n"
2485
+ "> - **Token thật (burn)** = số token LLM thực sự xử lý (gồm đọc-lại ngữ cảnh, suy luận, thử lại). "
2486
+ "Đây mới là cái **ra tiền $** — xem §5.4.\n")
2487
+ roots = c.get("code_roots") or []
2488
+ if not roots:
2489
+ w("> ⚠️ Không tìm thấy code repo nào (sibling của spec repo phải có marker "
2490
+ "`package.json` / `pom.xml` / `build.gradle` / `go.mod` / `Cargo.toml`... — "
2491
+ "hoặc chỉ định thủ công qua `EVAL_CODE_ROOT`, nhiều path ngăn bằng `:` hoặc `,`) "
2492
+ "→ các tỉ lệ \"so với code\" sẽ là n/a.\n")
2493
+ elif len(roots) > 1:
2494
+ w("> 📦 Đo gộp **%d code repo** (multi-repo FE+BE): %s\n"
2495
+ % (len(roots), ", ".join("`%s`" % r.rsplit("/", 1)[-1] for r in roots)))
2496
+
2497
+ w("\n**5.1 Khối lượng theo từng bước (stage)**\n")
2498
+ w("> Cột **Token-proxy** = độ dài tài liệu sinh ra ở mỗi bước (không phải tiền). "
2499
+ "Cột **Token thật** = token LLM đã burn ở bước đó (ra tiền). Đặt cạnh nhau để thấy bước nào "
2500
+ "\"nhẹ giấy tờ nhưng tốn AI\" và ngược lại.\n")
2501
+ bk = c["buckets"]
2502
+ art_total = sum(v for k, v in bk.items())
2503
+ label = {"discovery": "Stage 1 Discovery", "architecture": "Stage 2 Architecture",
2504
+ "spec": "Stage 3 Specs", "design": "Stage 4 Design",
2505
+ "build_review": "Stage 5 Story+Review", "test_audit": "Stage 5 Test/ATDD",
2506
+ "design_system": "Design System"}
2507
+ bsm = c.get("by_stage_model") or {}
2508
+ bystage = (c.get("burn") or {}).get("by_stage") or {}
2509
+ bucket_stages = {"discovery": ["Stage_1"], "architecture": ["Stage_2", "Stage_2b"],
2510
+ "spec": ["Stage_3"], "design": ["Stage_4"],
2511
+ "build_review": ["Stage_5"], "test_audit": ["Stage_5"], "design_system": []}
2512
+ mcol = bool(bsm) # chỉ thêm cột burn/Model khi có burn-log
2513
+
2514
+ def bucket_models(k):
2515
+ merged = merge_models(bsm.get(st) for st in bucket_stages.get(k, []))
2516
+ return model_share(merged) if merged else "—"
2517
+
2518
+ def bucket_burn(k):
2519
+ if k == "test_audit": # burn của Stage_5 đã gộp ở dòng Story+Review → tránh đếm đôi
2520
+ return None
2521
+ stages = bucket_stages.get(k, [])
2522
+ if not stages:
2523
+ return None
2524
+ return sum((bystage.get(st) or {}).get("input", 0) + (bystage.get(st) or {}).get("output", 0)
2525
+ for st in stages)
2526
+
2527
+ def burn_cell(k):
2528
+ b = bucket_burn(k)
2529
+ return fmt_tok(b) if b is not None else "—"
2530
+
2531
+ w("| Bước (stage) | Token-proxy (giấy tờ) | % giấy tờ |"
2532
+ + (" Token thật (ra tiền) | Model AI |" if mcol else ""))
2533
+ w("|---|--:|--:|" + ("--:|--:|" if mcol else ""))
2534
+ for k in ["discovery", "architecture", "spec", "design", "build_review", "test_audit", "design_system"]:
2535
+ if k not in bk:
2536
+ continue
2537
+ row = f"| {label.get(k,k)} | {fmt_tok(bk[k])} | {fmt_pct(bk[k]/art_total) if art_total else 'n/a'} |"
2538
+ w(row + (f" {burn_cell(k)} | {bucket_models(k)} |" if mcol else ""))
2539
+ tot_burn = (c.get("burn") or {}).get("total")
2540
+ tot_extra = (f" {fmt_tok(tot_burn) if tot_burn else '—'} | {model_share(c.get('by_model') or {})} |"
2541
+ if mcol else "")
2542
+ w(f"| **Tổng tài liệu** | **{fmt_tok(art_total)}** | 100% |" + tot_extra)
2543
+ w(f"| _Code chạy thật (đã gắn id)_ | {fmt_tok(c['code_prod_tokens'])} | — |" + (" — | — |" if mcol else ""))
2544
+ w(f"| _Code test (đã gắn id)_ | {fmt_tok(c['code_test_tokens'])} | — |" + (" — | — |" if mcol else ""))
2545
+ if c["code_untagged_test_tokens"]:
2546
+ w(f"| _Code test (chưa gắn id, thư mục `tests/`)_ | {fmt_tok(c['code_untagged_test_tokens'])} | — |" + (" — | — |" if mcol else ""))
2547
+ if mcol:
2548
+ w("\n> *Vài lưu ý khi đọc bảng:*\n"
2549
+ "> - *Cột **Token thật** là tiền thật; cột **Token-proxy** chỉ là độ dài văn bản. Hai cột lệch nhau "
2550
+ "nhiều là bình thường — bước ít giấy tờ vẫn có thể tốn nhiều AI (đọc lại ngữ cảnh, thử nhiều lần).*\n"
2551
+ "> - *Dòng `Stage 5 Test/ATDD` để token-thật `—` vì phần burn đó đã gộp chung trong `Stage 5 Story+Review` "
2552
+ "(cùng một bước), ghi lại sẽ thành đếm hai lần.*\n"
2553
+ "> - *Các dòng code để `—` vì việc viết code do AI làm ngay trong bước Stage 5 rồi — không có \"bước viết code\" "
2554
+ "riêng để gán token.*\n"
2555
+ "> - ***Tổng token thật** lớn hơn tổng các dòng phía trên, vì có cả những lượt làm việc đầu phiên chưa kịp gán "
2556
+ "vào bước nào.*\n"
2557
+ "> - *`Design System` để model `—` vì không nhận diện được bước riêng cho nó.*")
2558
+
2559
+ w("\n**5.2 Đầu tư bao nhiêu \"giấy tờ\" cho mỗi phần code? (token-proxy)**\n")
2560
+ w("> Mỗi tỉ lệ trả lời: cứ 1 phần code chạy thật thì kèm theo bao nhiêu phần tài liệu. **Số càng nhỏ càng gọn.** "
2561
+ "(Đây là token-proxy — đo công sức, không phải tiền.)\n")
2562
+ r = c["ratios"]
2563
+ w("| Mã | So sánh | Cách tính | Kết quả |")
2564
+ w("|---|---|---|--:|")
2565
+ w(f"| COST-2 | Thiết kế (spec+design) so với code | (Stage 3 + Stage 4) ÷ code chạy thật | **{fmt_ratio(r['spec_design_to_code'])}** |")
2566
+ w(f"| COST-3 | Kiểm thử + review so với code | (story/review + test/ATDD + code test) ÷ code chạy thật | **{fmt_ratio(r['review_test_to_code'])}** |")
2567
+ w(f"| COST-4 | Toàn bộ tài liệu so với code | tổng tài liệu ÷ code chạy thật | **{fmt_ratio(r['all_artifact_to_code'])}** |")
2568
+ w(f"| COST-5 | Quản trị/định hướng so với code | (discovery + kiến trúc + design-system) ÷ code chạy thật | {fmt_ratio(r['governance_to_code'])} |")
2569
+ w(f"| COST-6 | Tỉ lệ \"phí phạm\" do làm lại | phần tài liệu bản cũ đã thay ÷ tổng (cũ+mới) của kiến trúc & thiết kế | {fmt_pct(r['archive_waste'])} |")
2570
+
2571
+ bys = c.get("by_slice") or {}
2572
+ if bys:
2573
+ w("\n**5.3 Khối lượng code theo từng lát cắt (token-proxy)**\n")
2574
+ w("> \"Code chạy thật\" so với \"code test\" của từng lát cắt; tỉ lệ test/code cao = phủ test nhiều hơn.\n")
2575
+ w("| Lát cắt | Code chạy thật | Code test | Test so với code |")
2576
+ w("|---|--:|--:|--:|")
2577
+ for sid in sorted(bys, key=lambda x: (x == "(unmapped)", x)):
2578
+ v = bys[sid]
2579
+ p, t = v.get("prod", 0), v.get("test", 0)
2580
+ name = "(chưa gán lát cắt)" if sid == "(unmapped)" else sid
2581
+ w(f"| {name} | {fmt_tok(p)} | {fmt_tok(t)} | {fmt_ratio(t/p) if p else 'n/a'} |")
2582
+
2583
+ render_churn(w, data)
2584
+
2585
+ w("\n**5.4 Chi phí tiền thật (token LLM đã burn)**\n")
2586
+ burn = c.get("burn")
2587
+ if not burn:
2588
+ w("> 🔴 Chưa gom được token thật (chưa có file `NTAPP-output/evaluation/token-log.json` và "
2589
+ "không đọc được nhật ký phiên Claude Code). Khi có, phần này sẽ tự tính tổng chi phí $, "
2590
+ "chi phí cho mỗi tiêu chí nghiệm thu, và hệ số \"khuếch đại\".")
2591
+ else:
2592
+ cov = burn.get("coverage") or {}
2593
+ lvl = cov.get("level")
2594
+ if lvl == "partial":
2595
+ w(f"> ⚠️ **Độ phủ nhật ký phiên thấp (G2) — burn dưới đây là CẬN DƯỚI, không phải con số đủ.** "
2596
+ f"Phiên Claude Code chỉ trải **{cov.get('session_min')} → {cov.get('session_max')}**, "
2597
+ f"trong khi commit git của code repo trải **{cov.get('git_first')} → {cov.get('git_last')}** "
2598
+ f"({cov.get('git_commits')} commit). Phủ ~{fmt_pct(cov.get('ratio'))} khoảng hoạt động → "
2599
+ "nhiều phiên (chạy máy khác / đã xoá / không gom đủ) **thiếu**. Mọi con số $/token bên dưới "
2600
+ "là **một phần**, KHÔNG dùng để so sánh giữa dự án.\n")
2601
+ elif lvl == "full":
2602
+ w(f"> ✅ Độ phủ nhật ký phiên đủ (G2): phiên **{cov.get('session_min')} → {cov.get('session_max')}** "
2603
+ f"phủ ~{fmt_pct(cov.get('ratio'))} khoảng commit git "
2604
+ f"(**{cov.get('git_first')} → {cov.get('git_last')}**, {cov.get('git_commits')} commit).\n")
2605
+ elif cov: # unknown — thiếu mốc git hoặc mốc phiên → nói rõ chưa kiểm chứng được
2606
+ w("> ℹ️ Chưa kiểm chứng được độ phủ nhật ký phiên (G2): thiếu mốc git của code repo hoặc "
2607
+ "thiếu mốc thời gian phiên → không khẳng định burn đã gom **đủ**. Hãy coi là cận dưới cho tới khi đối chiếu được.\n")
2608
+ comp, cost = burn.get("components"), burn.get("cost_usd")
2609
+ cbm = burn.get("cost_by_model")
2610
+ priced_pm = burn.get("cost_priced_per_model")
2611
+ if comp and cost:
2612
+ tot_tok = sum(comp.values())
2613
+ tot_usd = burn["cost_total_usd"]
2614
+ if priced_pm:
2615
+ w("> Token thật chia làm 4 loại; **đơn giá theo TỪNG model** (Opus/Sonnet/Haiku khác nhau — "
2616
+ "chi tiết ở bảng 5.4b). Quy ước cache giống nhau mọi model: **ghi cache = 1.25× input** "
2617
+ "(lưu ngữ cảnh, TTL 5 phút), **đọc cache = 0.1× input** (rẻ bằng 1/10), **output** đắt nhất "
2618
+ "(= 5× input). Cột \"Đơn giá TB\" bên dưới là bình quân gia quyền theo cơ cấu model.\n")
2619
+ else:
2620
+ w("> Token thật chia làm 4 loại, đơn giá khác nhau (theo bảng giá Claude API, model "
2621
+ f"**{PRICING_MODEL}**, tính trên 1 triệu token):\n"
2622
+ f"> - **Input mới**: ${PRICE_PER_MTOK['input']:.2f} — phần ngữ cảnh gửi lần đầu.\n"
2623
+ f"> - **Ghi cache**: ${PRICE_PER_MTOK['cache_write']:.2f} — lưu ngữ cảnh để tái dùng (đắt hơn input 1.25×).\n"
2624
+ f"> - **Đọc cache**: ${PRICE_PER_MTOK['cache_read']:.2f} — đọc lại ngữ cảnh đã lưu (rẻ, bằng 1/10 input).\n"
2625
+ f"> - **Output**: ${PRICE_PER_MTOK['output']:.2f} — phần AI sinh ra (đắt nhất).\n")
2626
+ unit_hdr = "Đơn giá TB ($/1M)" if priced_pm else "Đơn giá ($/1 triệu)"
2627
+ w(f"| Loại token | Số token | {unit_hdr} | Thành tiền | % chi phí |")
2628
+ w("|---|--:|--:|--:|--:|")
2629
+ rows = [
2630
+ ("Input mới (chưa cache)", "input"),
2631
+ ("Ghi cache", "cache_write"),
2632
+ ("Đọc cache", "cache_read"),
2633
+ ("Output (AI sinh ra)", "output"),
2634
+ ]
2635
+ for label, key in rows:
2636
+ pct = (cost[key] / tot_usd) if tot_usd else 0
2637
+ # per-model: đơn giá là bình quân hiệu dụng (tiền ÷ token); phẳng: giá cứng
2638
+ unit = (cost[key] / comp[key] * 1_000_000) if (priced_pm and comp[key]) \
2639
+ else PRICE_PER_MTOK[key]
2640
+ w(f"| {label} | {fmt_tok(comp[key])} | {unit:.2f} | "
2641
+ f"${cost[key]:,.2f} | {round(100*pct)}% |")
2642
+ w(f"| **Tổng cộng** | **{fmt_tok(tot_tok)}** | — | **${tot_usd:,.2f}** | 100% |")
2643
+ w("")
2644
+ if cbm:
2645
+ w("\n**5.4b Chi phí theo model AI**\n")
2646
+ w("> Mỗi model một đơn giá (Opus 4.8 $5/$25, Sonnet 4.6 $3/$15, Haiku 4.5 $1/$5 — "
2647
+ "input/output trên 1 triệu token). Sub-agent thường chạy model rẻ (Haiku) → tách ra để "
2648
+ "thấy đúng cơ cấu tiền, không quy hết về Opus.\n")
2649
+ w("| Model | Input mới | Ghi cache | Đọc cache | Output | Tổng token | Thành tiền | % chi phí |")
2650
+ w("|---|--:|--:|--:|--:|--:|--:|--:|")
2651
+ for m in cbm:
2652
+ cm = m["components"]
2653
+ pct = (m["cost_total_usd"] / tot_usd) if tot_usd else 0
2654
+ w(f"| {m['label']} | {fmt_tok(cm['input'])} | {fmt_tok(cm['cache_write'])} | "
2655
+ f"{fmt_tok(cm['cache_read'])} | {fmt_tok(cm['output'])} | {fmt_tok(m['tokens_total'])} | "
2656
+ f"${m['cost_total_usd']:,.2f} | {round(100*pct)}% |")
2657
+ w(f"| **Tổng** | | | | | **{fmt_tok(sum(m['tokens_total'] for m in cbm))}** | "
2658
+ f"**${tot_usd:,.2f}** | 100% |")
2659
+ w("")
2660
+ lb = " **(một phần — cận dưới)**" if (burn.get("coverage") or {}).get("lower_bound") else ""
2661
+ w(f"- **Tổng token thật đã burn**: {fmt_tok(burn['total'])} token{lb} "
2662
+ f"(gồm input {fmt_tok(burn.get('input') or 0)} + output {fmt_tok(burn.get('output') or 0)})")
2663
+ if burn.get("cost_total_usd") is not None:
2664
+ _basis = "định giá theo từng model" if burn.get("cost_priced_per_model") \
2665
+ else f"đơn giá {PRICING_MODEL}"
2666
+ w(f"- **Tổng chi phí tiền thật: ${burn['cost_total_usd']:,.2f}** ({_basis})")
2667
+ w(f"- **Chi phí cho mỗi tiêu chí nghiệm thu (AC)**: "
2668
+ f"{fmt_tok(burn['per_ac']) if burn['per_ac'] else 'n/a'} token/AC")
2669
+ w(f"- **Hệ số khuếch đại**: {fmt_ratio(burn['amplification'])} — cứ mỗi 1 token \"sản phẩm cuối\" "
2670
+ f"({fmt_tok(c['delivered_tokens'])} token-proxy) thì AI thực sự xử lý chừng đó token. "
2671
+ "Phần lớn là đọc lại ngữ cảnh và thử lại — bình thường với quy trình nhiều bước.")
2672
+
2673
+
2674
+ def render_churn(w, data):
2675
+ """§5.3b — LOC committed (added/deleted) + tỉ lệ sửa-đi-sửa-lại tầng code (EFFY-3b)."""
2676
+ ch = data.get("code_churn") or {}
2677
+ w("\n**5.3b Sửa đi sửa lại ở tầng code — LOC đã commit (EFFY-3b)**\n")
2678
+ if not ch.get("available"):
2679
+ w("> 🔴 Chưa đọc được lịch sử git của code repo (không tìm thấy repo, hoặc `git` không chạy được). "
2680
+ "Khi có, phần này tự tính số dòng code đã thêm/xoá và tỉ lệ \"viết rồi xoá\".\n")
2681
+ return
2682
+ pr, te, ot = ch["prod"], ch["test"], ch["other"]
2683
+ w("> Đếm trực tiếp từ `git log --numstat` của code repo (đo **dòng chảy commit**, khác với token-proxy ở "
2684
+ "trên đo **trạng thái file cuối**). Cột **+/−** là số dòng tuyệt đối đã thêm/xoá qua toàn bộ lịch sử. "
2685
+ "**Tỉ lệ thrash** = (thêm+xoá) ÷ số dòng prod còn sống = bao nhiêu dòng phải viết để giữ lại 1 dòng "
2686
+ "(**1.0 = không phí**; càng cao càng viết-rồi-xoá nhiều).\n")
2687
+ w(f"> Quét **{ch['commits']}** commit.\n")
2688
+ w("| Loại code | Dòng thêm (+) | Dòng xoá (−) | Dòng còn sống | Tỉ lệ thrash |")
2689
+ w("|---|--:|--:|--:|--:|")
2690
+ w(f"| **Code chạy thật (prod, đã gắn id)** | +{pr['added']:,} | −{pr['deleted']:,} | "
2691
+ f"{pr['net_loc']:,} | **{fmt_ratio(pr['churn_ratio'])}** |")
2692
+ w(f"| Code test | +{te['added']:,} | −{te['deleted']:,} | — | — |")
2693
+ w(f"| Khác (đã xoá / chưa gắn id) | +{ot['added']:,} | −{ot['deleted']:,} | — | — |")
2694
+ bys = ch.get("by_slice") or {}
2695
+ if bys:
2696
+ w("\n*Phân theo lát cắt (chỉ file prod đã gắn id còn trên đĩa):*\n")
2697
+ w("| Lát cắt | Dòng thêm (+) | Dòng xoá (−) |")
2698
+ w("|---|--:|--:|")
2699
+ for sid in sorted(bys, key=lambda x: (x == "(unmapped)", x)):
2700
+ v = bys[sid]
2701
+ name = "(chưa gán lát cắt)" if sid == "(unmapped)" else sid
2702
+ w(f"| {name} | +{v['added']:,} | −{v['deleted']:,} |")
2703
+ w("\n> *Lưu ý:* commit ĐẦU TIÊN của dự án dựng-lại (brownfield) dồn cả codebase cũ vào một lần → cột "
2704
+ "**+** phình to nhưng **−**≈0 nên tỉ lệ thrash vẫn ~1.0 (không bị thổi). Dòng \"Khác\" gom churn của file "
2705
+ "đã bị xoá hẳn (không còn header để quy về prod/slice) — đây là giới hạn attribution, không phải lỗi.\n")
2706
+
2707
+
2708
+ def next_round(archive_dir):
2709
+ """Lần đánh giá kế tiếp = max version đã archive + 1 (snapshot history)."""
2710
+ vs = []
2711
+ if archive_dir.exists():
2712
+ for f in archive_dir.glob("scorecard-v*.md"):
2713
+ m = re.match(r"scorecard-v(\d+)\.md$", f.name)
2714
+ if m:
2715
+ vs.append(int(m.group(1)))
2716
+ return max(vs, default=0) + 1
2717
+
2718
+
2719
+ def main():
2720
+ import argparse
2721
+ ap = argparse.ArgumentParser(description="NTAPP eval harvester (gồm token-burn từ session JSONL)")
2722
+ ap.add_argument("--refresh-burn", action="store_true",
2723
+ help="re-harvest token-log.json từ session JSONL (mặc định: auto-harvest nếu chưa có, "
2724
+ "dùng cached nếu đã có)")
2725
+ args = ap.parse_args()
2726
+ data = build(refresh_burn=args.refresh_burn)
2727
+
2728
+ archive_dir = OUT_DIR / "archive"
2729
+ run_meta = {"date": datetime.date.today().isoformat(), "round": next_round(archive_dir)}
2730
+ data["_run_meta"] = run_meta
2731
+
2732
+ metrics_json = json.dumps(data, ensure_ascii=False, indent=2)
2733
+ scorecard_md = render_scorecard(data, run_meta)
2734
+
2735
+ # Dual-write: canonical (latest, overwrite) + archive (snapshot version mới mỗi run)
2736
+ OUT_DIR.mkdir(parents=True, exist_ok=True)
2737
+ (OUT_DIR / "metrics.json").write_text(metrics_json, encoding="utf-8")
2738
+ (OUT_DIR / "scorecard.md").write_text(scorecard_md, encoding="utf-8")
2739
+ archive_dir.mkdir(parents=True, exist_ok=True)
2740
+ v = run_meta["round"]
2741
+ (archive_dir / f"metrics-v{v}.json").write_text(metrics_json, encoding="utf-8")
2742
+ (archive_dir / f"scorecard-v{v}.md").write_text(scorecard_md, encoding="utf-8")
2743
+
2744
+ t = data["totals"]
2745
+ print(f"[eval-harvester] slices={len(data['slices'])} units={len(data['units'])} "
2746
+ f"defers={t['defer_count']} (avoidable={t['defer_avoidable']}) "
2747
+ f"F-FPY={fmt_pct(t['fpy'])} (func-patch={t['functional_patch']}/excl={t['patch_excluded']}"
2748
+ f"/uncl={t['patch_unclassified']}; SFPY={fmt_pct(t['sfpy'])})")
2749
+ c = data["cost"]
2750
+ print(f"[eval-harvester] cost-proxy: code-prod={fmt_tok(c['code_prod_tokens'])}tok "
2751
+ f"spec+design:code={fmt_ratio(c['ratios']['spec_design_to_code'])} "
2752
+ f"test+review:code={fmt_ratio(c['ratios']['review_test_to_code'])} "
2753
+ f"all-artifact:code={fmt_ratio(c['ratios']['all_artifact_to_code'])} "
2754
+ f"(burn={'logged' if c['burn'] else 'n/a'})")
2755
+ bym = c.get("by_model") or {}
2756
+ if bym:
2757
+ print(f"[eval-harvester] models: {model_share(bym)}")
2758
+ print(f"[eval-harvester] đánh giá #{run_meta['round']} ({run_meta['date']})")
2759
+ print(f"[eval-harvester] canonical → {OUT_DIR/'scorecard.md'} + metrics.json")
2760
+ print(f"[eval-harvester] archive → {archive_dir}/scorecard-v{v}.md + metrics-v{v}.json")
2761
+
2762
+
2763
+ if __name__ == "__main__":
2764
+ sys.exit(main())