stackvitals 0.1.3__tar.gz → 0.1.4__tar.gz

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 (1367) hide show
  1. stackvitals-0.1.4/.github/ISSUE_TEMPLATE/bug.yml +56 -0
  2. stackvitals-0.1.4/.github/ISSUE_TEMPLATE/config.yml +8 -0
  3. stackvitals-0.1.4/.github/ISSUE_TEMPLATE/feature.yml +39 -0
  4. stackvitals-0.1.4/.github/pull_request_template.md +15 -0
  5. stackvitals-0.1.4/.github/workflows/pages.yml +44 -0
  6. {stackvitals-0.1.3 → stackvitals-0.1.4}/CHANGELOG.md +16 -0
  7. {stackvitals-0.1.3 → stackvitals-0.1.4}/PKG-INFO +1 -1
  8. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/registry.json +28 -0
  9. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/accuracy.md +1 -1
  10. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/limitations.md +4 -0
  11. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/modules.md +3 -3
  12. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/rules.md +22 -0
  13. stackvitals-0.1.4/glama.json +4 -0
  14. {stackvitals-0.1.3 → stackvitals-0.1.4}/pyproject.toml +1 -1
  15. {stackvitals-0.1.3 → stackvitals-0.1.4}/server.json +2 -2
  16. stackvitals-0.1.4/src/mergescout/__init__.py +1 -0
  17. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/__init__.py +1 -1
  18. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/action.py +2 -2
  19. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/analyze.py +16 -1
  20. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/feedback.py +94 -5
  21. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/editors/vscode/package.json +1 -1
  22. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/site.py +19 -2
  23. stackvitals-0.1.4/src/stackvitals/web/app/help/accuracy.json +1 -0
  24. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/help/index.json +1 -1
  25. stackvitals-0.1.4/src/stackvitals/web/app/help/modules.json +1 -0
  26. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/site/site.css +5 -3
  27. stackvitals-0.1.4/tests/local/test_ci_pr_only_flakes.py +201 -0
  28. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_site_build.py +32 -0
  29. {stackvitals-0.1.3 → stackvitals-0.1.4}/uv.lock +1 -1
  30. stackvitals-0.1.3/src/mergescout/__init__.py +0 -1
  31. stackvitals-0.1.3/src/stackvitals/web/app/help/accuracy.json +0 -1
  32. stackvitals-0.1.3/src/stackvitals/web/app/help/modules.json +0 -1
  33. {stackvitals-0.1.3 → stackvitals-0.1.4}/.env.example +0 -0
  34. {stackvitals-0.1.3 → stackvitals-0.1.4}/.gitattributes +0 -0
  35. {stackvitals-0.1.3 → stackvitals-0.1.4}/.github/ISSUE_TEMPLATE/benchmark.yml +0 -0
  36. {stackvitals-0.1.3 → stackvitals-0.1.4}/.github/build-constraints.txt +0 -0
  37. {stackvitals-0.1.3 → stackvitals-0.1.4}/.github/workflows/daily.yml +0 -0
  38. {stackvitals-0.1.3 → stackvitals-0.1.4}/.github/workflows/mcp-registry.yml +0 -0
  39. {stackvitals-0.1.3 → stackvitals-0.1.4}/.github/workflows/prospective.yml +0 -0
  40. {stackvitals-0.1.3 → stackvitals-0.1.4}/.github/workflows/release.yml +0 -0
  41. {stackvitals-0.1.3 → stackvitals-0.1.4}/.github/workflows/tests.yml +0 -0
  42. {stackvitals-0.1.3 → stackvitals-0.1.4}/.gitignore +0 -0
  43. {stackvitals-0.1.3 → stackvitals-0.1.4}/CODE_OF_CONDUCT.md +0 -0
  44. {stackvitals-0.1.3 → stackvitals-0.1.4}/CONTRIBUTING.md +0 -0
  45. {stackvitals-0.1.3 → stackvitals-0.1.4}/GOVERNANCE.md +0 -0
  46. {stackvitals-0.1.3 → stackvitals-0.1.4}/LICENSE +0 -0
  47. {stackvitals-0.1.3 → stackvitals-0.1.4}/NOTICE +0 -0
  48. {stackvitals-0.1.3 → stackvitals-0.1.4}/README.md +0 -0
  49. {stackvitals-0.1.3 → stackvitals-0.1.4}/SECURITY.md +0 -0
  50. {stackvitals-0.1.3 → stackvitals-0.1.4}/action.yml +0 -0
  51. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/LICENSE-DATA.md +0 -0
  52. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/adjudicate.py +0 -0
  53. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/adjudicator-crosscheck.json +0 -0
  54. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/adoption/README.md +0 -0
  55. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/adoption/manifest.json +0 -0
  56. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/adoption/preregistration.md +0 -0
  57. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/adoption/study.py +0 -0
  58. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/README.md +0 -0
  59. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/prepare.py +0 -0
  60. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/prepare2.py +0 -0
  61. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/prompts.md +0 -0
  62. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/results.json +0 -0
  63. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/results2.json +0 -0
  64. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/score.py +0 -0
  65. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/score2.py +0 -0
  66. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/triage-results.json +0 -0
  67. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/agents/triage_check.py +0 -0
  68. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/README.md +0 -0
  69. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/adjudication-detection.csv +0 -0
  70. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/adoption-results.json +0 -0
  71. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/adoption.py +0 -0
  72. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/agreement-gemini-detection.json +0 -0
  73. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/codebook-detection.md +0 -0
  74. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/detection-labels.csv +0 -0
  75. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/detection-results.json +0 -0
  76. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/detection.py +0 -0
  77. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/labels-gemini-detection.csv +0 -0
  78. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/preregistration.md +0 -0
  79. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/replicate-results.json +0 -0
  80. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/ai/replicate.py +0 -0
  81. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/audit-results.json +0 -0
  82. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/audit.py +0 -0
  83. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/README.md +0 -0
  84. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/adjudication-main.csv +0 -0
  85. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/adjudication-validation.csv +0 -0
  86. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/affiliation-results.json +0 -0
  87. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/affiliation.py +0 -0
  88. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-main-v2.json +0 -0
  89. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-main.json +0 -0
  90. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-validation-v2.json +0 -0
  91. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-validation.json +0 -0
  92. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/channels-results.json +0 -0
  93. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/channels.py +0 -0
  94. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/codebook.md +0 -0
  95. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-main-v2.csv +0 -0
  96. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-main.csv +0 -0
  97. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-validation-v2.csv +0 -0
  98. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-validation.csv +0 -0
  99. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/labels-main.csv +0 -0
  100. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/labels-results.json +0 -0
  101. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/labels-validation.csv +0 -0
  102. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/responses-results.json +0 -0
  103. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/responses-validation-results.json +0 -0
  104. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/responses.py +0 -0
  105. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/score_labels.py +0 -0
  106. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/triage-results.json +0 -0
  107. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/community/triage.py +0 -0
  108. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/contribute/README.md +0 -0
  109. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/contribute/frozen-manifest.json +0 -0
  110. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/contribute/frozen.json.gz +0 -0
  111. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/contribute/preregistration.md +0 -0
  112. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/contribute/prospective.py +0 -0
  113. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/crosscheck.py +0 -0
  114. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/README.md +0 -0
  115. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/baseline-after-results.json +0 -0
  116. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/baseline-results.json +0 -0
  117. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/baseline.py +0 -0
  118. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/coverage-results.json +0 -0
  119. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/coverage.py +0 -0
  120. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/exploits-results.json +0 -0
  121. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/exploits.py +0 -0
  122. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/incidents-results.json +0 -0
  123. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/incidents.py +0 -0
  124. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/lookalike-results.json +0 -0
  125. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/lookalike.py +0 -0
  126. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/release-signs-results.json +0 -0
  127. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/deps/release_signs.py +0 -0
  128. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/devlake/README.md +0 -0
  129. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/devlake/head-to-head-results.json +0 -0
  130. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/devlake/pick.py +0 -0
  131. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/devlake/preregistration.md +0 -0
  132. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/devlake/repos.json +0 -0
  133. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/devlake/run.py +0 -0
  134. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/devlake/score.py +0 -0
  135. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/README.md +0 -0
  136. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/adjudication-incidents.csv +0 -0
  137. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/adjudication-sources-more.csv +0 -0
  138. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/adjudication-sources.csv +0 -0
  139. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/agreement-gemini-sources-more.json +0 -0
  140. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/agreement-gemini-sources.json +0 -0
  141. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/codebook.md +0 -0
  142. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/devlake-configured-more-results.json +0 -0
  143. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/devlake-configured-results.json +0 -0
  144. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/devlake_configured.py +0 -0
  145. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/environments-results.json +0 -0
  146. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/environments.py +0 -0
  147. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/incidents-codebook.md +0 -0
  148. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/incidents-labels.csv +0 -0
  149. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/incidents-results.json +0 -0
  150. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/incidents.py +0 -0
  151. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/labels-gemini-incidents.csv +0 -0
  152. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/labels-gemini-sources-more.csv +0 -0
  153. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/labels-gemini-sources.csv +0 -0
  154. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/linkage-more-results.json +0 -0
  155. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/linkage-results.json +0 -0
  156. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/linkage.py +0 -0
  157. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/sources-labels.csv +0 -0
  158. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/sources-more-labels.csv +0 -0
  159. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/sources-more-results.json +0 -0
  160. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/sources-results.json +0 -0
  161. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/sources.py +0 -0
  162. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/spread-results.json +0 -0
  163. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/dora/spread.py +0 -0
  164. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/fair.py +0 -0
  165. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/features/README.md +0 -0
  166. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/features/api_use.py +0 -0
  167. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/features/branch_growth.py +0 -0
  168. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/features/catalog.py +0 -0
  169. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/features/reports.py +0 -0
  170. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/features/scorecard.json +0 -0
  171. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/features/scorecard.py +0 -0
  172. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/finalise.py +0 -0
  173. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/README.md +0 -0
  174. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-flaky.csv +0 -0
  175. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-fresh.csv +0 -0
  176. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-heldout.csv +0 -0
  177. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-masking.csv +0 -0
  178. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-flaky-v2.json +0 -0
  179. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-flaky.json +0 -0
  180. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-fresh.json +0 -0
  181. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-heldout.json +0 -0
  182. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-masking.json +0 -0
  183. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/already-results.json +0 -0
  184. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/already.py +0 -0
  185. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/began-results.json +0 -0
  186. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/began.py +0 -0
  187. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/card.json +0 -0
  188. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/codebook.md +0 -0
  189. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/heldout-labels.csv +0 -0
  190. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/heldout-results.json +0 -0
  191. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/heldout.py +0 -0
  192. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/items.csv +0 -0
  193. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/kinds-results.json +0 -0
  194. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/kinds.py +0 -0
  195. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-flaky-v2.csv +0 -0
  196. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-flaky.csv +0 -0
  197. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-fresh.csv +0 -0
  198. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-heldout.csv +0 -0
  199. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-masking.csv +0 -0
  200. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/masking-labels.csv +0 -0
  201. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/masking-results.json +0 -0
  202. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/masking.py +0 -0
  203. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/maybe-results.json +0 -0
  204. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/maybe.py +0 -0
  205. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/natural-results.json +0 -0
  206. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/natural.py +0 -0
  207. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/outside-fresh-results.json +0 -0
  208. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/outside-results.json +0 -0
  209. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/outside.py +0 -0
  210. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/outside_fresh.py +0 -0
  211. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/pr-details-results.json +0 -0
  212. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/pr_details.py +0 -0
  213. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/safe-check-results.json +0 -0
  214. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/safe-rule-results.json +0 -0
  215. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/safe_check.py +0 -0
  216. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/safe_rule.py +0 -0
  217. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/sample.py +0 -0
  218. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/score.py +0 -0
  219. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/views.py +0 -0
  220. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/flaky/wide.py +0 -0
  221. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/impact/README.md +0 -0
  222. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/impact/collect_reports.py +0 -0
  223. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/impact/find_report_repos.py +0 -0
  224. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/impact/replay-results.json +0 -0
  225. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/impact/replay_tia.py +0 -0
  226. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/impact/search.json +0 -0
  227. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/impact/totals.json +0 -0
  228. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/label-sensitivity.json +0 -0
  229. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/labeller.py +0 -0
  230. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/middleware/README.md +0 -0
  231. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/middleware/preregistration.md +0 -0
  232. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/middleware/results.json +0 -0
  233. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/middleware/run.sh +0 -0
  234. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/middleware/score.py +0 -0
  235. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/panel-results.json +0 -0
  236. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/panel.py +0 -0
  237. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/platform/README.md +0 -0
  238. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/platform/busy-results.json +0 -0
  239. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/platform/busy.py +0 -0
  240. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/portal/README.md +0 -0
  241. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/portal/scale-results.json +0 -0
  242. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/portal/scale.py +0 -0
  243. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/portal/speed-after.json +0 -0
  244. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/portal/speed-before.json +0 -0
  245. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/portal/speed.py +0 -0
  246. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/replay/README.md +0 -0
  247. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/replay/adjudication-replay.csv +0 -0
  248. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/replay/agreement-gemini-replay.json +0 -0
  249. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/replay/labels-gemini-replay.csv +0 -0
  250. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/replay/replay-labels.csv +0 -0
  251. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/replay/replay-results.json +0 -0
  252. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/replay/replay.py +0 -0
  253. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/reproduce.py +0 -0
  254. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/scorecard/README.md +0 -0
  255. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/scorecard/results-before.json +0 -0
  256. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/scorecard/results.json +0 -0
  257. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/scorecard/run.py +0 -0
  258. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/sensitivity.py +0 -0
  259. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/summary.py +0 -0
  260. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/team/README.md +0 -0
  261. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/team/prospective-frozen.json.gz +0 -0
  262. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/team/prospective-manifest.json +0 -0
  263. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/team/prospective.py +0 -0
  264. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/team/reviewers-results.json +0 -0
  265. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/team/reviewers.py +0 -0
  266. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/README.md +0 -0
  267. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-2week-before-results.json +0 -0
  268. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-2week-results.json +0 -0
  269. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-before-results.json +0 -0
  270. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-results.json +0 -0
  271. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls.py +0 -0
  272. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/shrinkage-groups-results.json +0 -0
  273. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/shrinkage-results.json +0 -0
  274. {stackvitals-0.1.3 → stackvitals-0.1.4}/bench/accuracy/uncertainty/shrinkage.py +0 -0
  275. {stackvitals-0.1.3 → stackvitals-0.1.4}/deploy/crawler/README.md +0 -0
  276. {stackvitals-0.1.3 → stackvitals-0.1.4}/deploy/crawler/gitignore +0 -0
  277. {stackvitals-0.1.3 → stackvitals-0.1.4}/deploy/crawler/workflows/bench.yml +0 -0
  278. {stackvitals-0.1.3 → stackvitals-0.1.4}/deploy/crawler/workflows/check.yml +0 -0
  279. {stackvitals-0.1.3 → stackvitals-0.1.4}/deploy/crawler/workflows/crawl.yml +0 -0
  280. {stackvitals-0.1.3 → stackvitals-0.1.4}/deploy/crawler/workflows/discover.yml +0 -0
  281. {stackvitals-0.1.3 → stackvitals-0.1.4}/deploy/crawler/workflows/keepalive.yml +0 -0
  282. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/app.md +0 -0
  283. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/architecture.md +0 -0
  284. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/architecture-detailed-dark.png +0 -0
  285. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/architecture-detailed-light.png +0 -0
  286. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/architecture-overview-dark.png +0 -0
  287. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/architecture-overview-light.png +0 -0
  288. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/divider-dark.png +0 -0
  289. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/divider-light.png +0 -0
  290. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/lockup-dark.png +0 -0
  291. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/lockup-light.png +0 -0
  292. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/stackvitals-video.avif +0 -0
  293. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/stackvitals-video.gif +0 -0
  294. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/assets/stackvitals-video.mp4 +0 -0
  295. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/chaoss.md +0 -0
  296. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/connectors.md +0 -0
  297. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/coverage.md +0 -0
  298. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/dora-guide.md +0 -0
  299. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/enterprise.md +0 -0
  300. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/faq.md +0 -0
  301. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/guides/maintainer.md +0 -0
  302. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/guides/manager.md +0 -0
  303. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/guides/platform.md +0 -0
  304. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/install.md +0 -0
  305. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/methods.md +0 -0
  306. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/privacy.md +0 -0
  307. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/quickstart.md +0 -0
  308. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/release-checklist.md +0 -0
  309. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/roadmap.md +0 -0
  310. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/scaling.md +0 -0
  311. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/settings.md +0 -0
  312. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/threat-model.md +0 -0
  313. {stackvitals-0.1.3 → stackvitals-0.1.4}/docs/triage.md +0 -0
  314. {stackvitals-0.1.3 → stackvitals-0.1.4}/llms.txt +0 -0
  315. {stackvitals-0.1.3 → stackvitals-0.1.4}/scripts/prelaunch.py +0 -0
  316. {stackvitals-0.1.3 → stackvitals-0.1.4}/scripts/sync_crawler.py +0 -0
  317. {stackvitals-0.1.3 → stackvitals-0.1.4}/skills/stackvitals-ci/SKILL.md +0 -0
  318. {stackvitals-0.1.3 → stackvitals-0.1.4}/skills/stackvitals-community/SKILL.md +0 -0
  319. {stackvitals-0.1.3 → stackvitals-0.1.4}/skills/stackvitals-contribute/SKILL.md +0 -0
  320. {stackvitals-0.1.3 → stackvitals-0.1.4}/skills/stackvitals-delivery/SKILL.md +0 -0
  321. {stackvitals-0.1.3 → stackvitals-0.1.4}/skills/stackvitals-deps/SKILL.md +0 -0
  322. {stackvitals-0.1.3 → stackvitals-0.1.4}/skills/stackvitals-flow/SKILL.md +0 -0
  323. {stackvitals-0.1.3 → stackvitals-0.1.4}/skills/stackvitals-portal/SKILL.md +0 -0
  324. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/archive/__init__.py +0 -0
  325. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/archive/__main__.py +0 -0
  326. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/archive/convert.py +0 -0
  327. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/archive/events.py +0 -0
  328. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/archive/manifest.py +0 -0
  329. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/archive/stream.py +0 -0
  330. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/__init__.py +0 -0
  331. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/__main__.py +0 -0
  332. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/ci.py +0 -0
  333. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/deploys.py +0 -0
  334. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/matched.py +0 -0
  335. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/prior.py +0 -0
  336. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/report.py +0 -0
  337. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/shared.py +0 -0
  338. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/bench/stars.py +0 -0
  339. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/cli.py +0 -0
  340. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/config.py +0 -0
  341. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/__init__.py +0 -0
  342. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/__main__.py +0 -0
  343. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/chain.py +0 -0
  344. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/fetch.py +0 -0
  345. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/outcomes.py +0 -0
  346. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/queries.py +0 -0
  347. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/runner.py +0 -0
  348. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/seed.py +0 -0
  349. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/state.py +0 -0
  350. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/crawl/writer.py +0 -0
  351. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/discover/__init__.py +0 -0
  352. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/discover/__main__.py +0 -0
  353. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/discover/sweep.py +0 -0
  354. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/github/__init__.py +0 -0
  355. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/github/graphql.py +0 -0
  356. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/github/identities.py +0 -0
  357. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/github/releases.py +0 -0
  358. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/labels.py +0 -0
  359. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/mcp_server.py +0 -0
  360. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/measure/__init__.py +0 -0
  361. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/measure/__main__.py +0 -0
  362. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/measure/api_cost.py +0 -0
  363. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/measure/count_repos.py +0 -0
  364. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/measure/jsonl.py +0 -0
  365. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/measure/report.py +0 -0
  366. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/measure/sample.py +0 -0
  367. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/owners.py +0 -0
  368. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/setup_check.py +0 -0
  369. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/__init__.py +0 -0
  370. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/__main__.py +0 -0
  371. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/bump_ledger.py +0 -0
  372. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/bumps.py +0 -0
  373. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/check.py +0 -0
  374. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/community_bench.py +0 -0
  375. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/delivery_bench.py +0 -0
  376. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/deps_map.py +0 -0
  377. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/deps_trends.py +0 -0
  378. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/evidence.py +0 -0
  379. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/exploits.py +0 -0
  380. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/flow_bench.py +0 -0
  381. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/identity.py +0 -0
  382. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/issues.py +0 -0
  383. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/labels.py +0 -0
  384. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/osv.py +0 -0
  385. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/owners_watch.py +0 -0
  386. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/repo_stats.py +0 -0
  387. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/rules.py +0 -0
  388. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/silver.py +0 -0
  389. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/top_packages.py +0 -0
  390. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/triage.py +0 -0
  391. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/triage_math.py +0 -0
  392. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/signals/walls.py +0 -0
  393. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/snapshot/__init__.py +0 -0
  394. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/snapshot/__main__.py +0 -0
  395. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/snapshot/build.py +0 -0
  396. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/snapshot/publish.py +0 -0
  397. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/snapshot/schema.py +0 -0
  398. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/snapshot/score.py +0 -0
  399. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/store/__init__.py +0 -0
  400. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/store/__main__.py +0 -0
  401. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/store/sync.py +0 -0
  402. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/timeutil.py +0 -0
  403. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/tool/__init__.py +0 -0
  404. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/tool/action_pack.py +0 -0
  405. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/tool/live.py +0 -0
  406. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/tool/queries.py +0 -0
  407. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/tool/refs.py +0 -0
  408. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/tool/store.py +0 -0
  409. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/mergescout/tool/tracking.py +0 -0
  410. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/__main__.py +0 -0
  411. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/__init__.py +0 -0
  412. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/api.py +0 -0
  413. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/automation.py +0 -0
  414. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/bench.py +0 -0
  415. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/burnin.py +0 -0
  416. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/cli.py +0 -0
  417. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/collect.py +0 -0
  418. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/cost.py +0 -0
  419. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/coverage.py +0 -0
  420. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/fingerprint.py +0 -0
  421. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/gitlab.py +0 -0
  422. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/gitlab_action.py +0 -0
  423. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/impact.py +0 -0
  424. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/investigate.py +0 -0
  425. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/kinds.py +0 -0
  426. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/monitors.py +0 -0
  427. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/owners.py +0 -0
  428. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/quarantine_runtime.py +0 -0
  429. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/report.py +0 -0
  430. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/retry.py +0 -0
  431. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/selfheal.py +0 -0
  432. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/shards.py +0 -0
  433. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/share.py +0 -0
  434. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/store.py +0 -0
  435. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/testreports.py +0 -0
  436. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/tickets.py +0 -0
  437. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/track_record.json +0 -0
  438. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/triage.py +0 -0
  439. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/triggers.py +0 -0
  440. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/upload.py +0 -0
  441. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/ci/validate.py +0 -0
  442. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/cli.py +0 -0
  443. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/codeowners.py +0 -0
  444. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/__init__.py +0 -0
  445. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/action.py +0 -0
  446. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/affiliation.py +0 -0
  447. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/analyze.py +0 -0
  448. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/build.py +0 -0
  449. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/chaoss.py +0 -0
  450. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/cli.py +0 -0
  451. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/collect.py +0 -0
  452. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/context.py +0 -0
  453. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/community/report.py +0 -0
  454. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/__init__.py +0 -0
  455. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/ai_spend.py +0 -0
  456. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/base.py +0 -0
  457. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/check.py +0 -0
  458. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/copilot.py +0 -0
  459. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/discord.py +0 -0
  460. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/discourse.py +0 -0
  461. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/incident_io.py +0 -0
  462. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/jira.py +0 -0
  463. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/linear.py +0 -0
  464. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/pagerduty.py +0 -0
  465. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/slack.py +0 -0
  466. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/sonar.py +0 -0
  467. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/store.py +0 -0
  468. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/tracker.py +0 -0
  469. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/connectors/writeback.py +0 -0
  470. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/contribute/__init__.py +0 -0
  471. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/contribute/brief.py +0 -0
  472. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/contribute/cli.py +0 -0
  473. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/__init__.py +0 -0
  474. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/actors.py +0 -0
  475. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/agent_ledger.py +0 -0
  476. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/agreements.py +0 -0
  477. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/ai_outcomes.py +0 -0
  478. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/alerts.py +0 -0
  479. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/appdata.py +0 -0
  480. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/bucket.py +0 -0
  481. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/bugs.py +0 -0
  482. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/calendar.py +0 -0
  483. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/capex.py +0 -0
  484. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/change_risk.py +0 -0
  485. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/changes.py +0 -0
  486. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/chat.py +0 -0
  487. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/config.py +0 -0
  488. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/dataflow.py +0 -0
  489. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/decisions.py +0 -0
  490. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/delivery.py +0 -0
  491. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/delivery_peers.py +0 -0
  492. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/delivery_report.py +0 -0
  493. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/deliverycli.py +0 -0
  494. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/devlake_dora.sql +0 -0
  495. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/digest.py +0 -0
  496. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/explaincli.py +0 -0
  497. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/explore.py +0 -0
  498. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/export.py +0 -0
  499. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/exportcli.py +0 -0
  500. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/findings.py +0 -0
  501. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/health.py +0 -0
  502. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/identity.py +0 -0
  503. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/initcli.py +0 -0
  504. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/insights.py +0 -0
  505. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/insightscli.py +0 -0
  506. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/installdoc.py +0 -0
  507. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/investment.py +0 -0
  508. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/joins.py +0 -0
  509. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/llmsdoc.py +0 -0
  510. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/merge_queue.py +0 -0
  511. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/metrics.py +0 -0
  512. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/model.py +0 -0
  513. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/projectcli.py +0 -0
  514. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/propose.py +0 -0
  515. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/pulse.py +0 -0
  516. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/recorded.py +0 -0
  517. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/releases.py +0 -0
  518. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/requests.py +0 -0
  519. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/resync.py +0 -0
  520. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/schema.py +0 -0
  521. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/services.py +0 -0
  522. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/settings.py +0 -0
  523. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/sqlcli.py +0 -0
  524. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/stats.py +0 -0
  525. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/store.py +0 -0
  526. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/summary.py +0 -0
  527. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/time.py +0 -0
  528. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/tomledit.py +0 -0
  529. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/uicli.py +0 -0
  530. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/webapp.py +0 -0
  531. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/what_changed.py +0 -0
  532. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/core/workspace.py +0 -0
  533. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/__init__.py +0 -0
  534. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/action.py +0 -0
  535. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/actions_vulns.py +0 -0
  536. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/cli.py +0 -0
  537. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/dossier.py +0 -0
  538. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/evidence.py +0 -0
  539. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/fixplan.py +0 -0
  540. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/guarddog.py +0 -0
  541. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/hygiene.py +0 -0
  542. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/imports.py +0 -0
  543. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/lockfiles.py +0 -0
  544. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/lookalike.py +0 -0
  545. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/reach.py +0 -0
  546. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/release.py +0 -0
  547. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/runtimes.py +0 -0
  548. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/supply.py +0 -0
  549. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/deps/vulns.py +0 -0
  550. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/editors/__init__.py +0 -0
  551. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/editors/vscode/extension.js +0 -0
  552. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/editors/vscode/marks.js +0 -0
  553. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/__init__.py +0 -0
  554. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/action.py +0 -0
  555. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/analyze.py +0 -0
  556. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/automate.py +0 -0
  557. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/build.py +0 -0
  558. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/cli.py +0 -0
  559. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/code_hosts.py +0 -0
  560. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/collect.py +0 -0
  561. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/gitlab_mr.py +0 -0
  562. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/knowledge.py +0 -0
  563. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/peers.py +0 -0
  564. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/preflight.py +0 -0
  565. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/report.py +0 -0
  566. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/rules.py +0 -0
  567. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/store.py +0 -0
  568. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/survival.py +0 -0
  569. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/flow/triage.py +0 -0
  570. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/mcp_server.py +0 -0
  571. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/__init__.py +0 -0
  572. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/action.py +0 -0
  573. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/batch.py +0 -0
  574. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/campaigns.py +0 -0
  575. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/catalog.py +0 -0
  576. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/checks.py +0 -0
  577. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/cli.py +0 -0
  578. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/descriptor.py +0 -0
  579. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/export.py +0 -0
  580. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/github.py +0 -0
  581. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/golden.py +0 -0
  582. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/history.py +0 -0
  583. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/inventory.py +0 -0
  584. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/owners.py +0 -0
  585. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/pages.py +0 -0
  586. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/rollup.py +0 -0
  587. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/portal/scorecard.py +0 -0
  588. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/security/__init__.py +0 -0
  589. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/security/probes.py +0 -0
  590. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/security/repo_checks.py +0 -0
  591. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/security/workflows.py +0 -0
  592. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/shell.py +0 -0
  593. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/LICENSES.md +0 -0
  594. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/boot.js +0 -0
  595. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/brand/cube-128.png +0 -0
  596. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/brand/cube-256.png +0 -0
  597. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/brand/cube-64.png +0 -0
  598. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/AddRepo-KRPZXWCY.js +0 -0
  599. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/SetupRunning-XWFQAKRZ.js +0 -0
  600. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/accuracy-data-OQTDXI7Y.js +0 -0
  601. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/agents-data-BAL6QAOF.js +0 -0
  602. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-24LFKFZ6.js +0 -0
  603. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-3IXWEOIJ.js +0 -0
  604. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-3ROQFHPV.js +0 -0
  605. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-45PGAQRO.js +0 -0
  606. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4H53OYLG.js +0 -0
  607. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4LUI7O5P.js +0 -0
  608. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4SQPQ5TB.js +0 -0
  609. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4WKQTWUC.js +0 -0
  610. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-576YHDEK.js +0 -0
  611. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-5TSTECYX.js +0 -0
  612. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-6RLVD2DT.js +0 -0
  613. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-763NH7PP.js +0 -0
  614. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-76WAVKUG.js +0 -0
  615. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-7II2BD5F.js +0 -0
  616. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-7W2HH2SR.js +0 -0
  617. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-AEVB6UDN.js +0 -0
  618. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-ASYNLVOP.js +0 -0
  619. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-CTKDYZMG.js +0 -0
  620. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-CVB26NMC.js +0 -0
  621. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-DLORG2IY.js +0 -0
  622. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-FBGIG7YF.js +0 -0
  623. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-G7NGB5UX.js +0 -0
  624. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-GT4EAKAO.js +0 -0
  625. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-IYMBFPCV.js +0 -0
  626. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-LAAGCPU3.js +0 -0
  627. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-P5TXDD45.js +0 -0
  628. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-RPXHAG6F.js +0 -0
  629. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-S2ZBMEVA.js +0 -0
  630. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-S654BBEP.js +0 -0
  631. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-SACCDA46.js +0 -0
  632. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-T7QVTNXF.js +0 -0
  633. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-TCPSLBAB.js +0 -0
  634. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-TO4VVRZ7.js +0 -0
  635. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-UWMBZCCA.js +0 -0
  636. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-VQ5YXO54.js +0 -0
  637. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-VWKSMFWJ.js +0 -0
  638. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-W6N6P4C7.js +0 -0
  639. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-YTANGYYH.js +0 -0
  640. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/connect-KONYWYTT.js +0 -0
  641. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/connections-data-2DYS4UVW.js +0 -0
  642. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/more-EEGUDTVE.js +0 -0
  643. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/more-PC6FVS3P.js +0 -0
  644. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/more-RCIVCUDE.js +0 -0
  645. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/more-ZKKRY6NO.css +0 -0
  646. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/sealbox-35YL4EUH.js +0 -0
  647. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/session-DYYTOE2K.js +0 -0
  648. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/settingsApply-2HRJEZYM.js +0 -0
  649. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/settingsReview-GX2FZQ4M.js +0 -0
  650. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/uPlot.esm-OIWT3AHJ.js +0 -0
  651. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/ci/impact.json +0 -0
  652. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/ci/quarantine.json +0 -0
  653. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/ci/tickets.json +0 -0
  654. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/alerts.json +0 -0
  655. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/app.json +0 -0
  656. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/community.json +0 -0
  657. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/connectors.json +0 -0
  658. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/data.json +0 -0
  659. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/decisions.json +0 -0
  660. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/delivery.json +0 -0
  661. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/deps.json +0 -0
  662. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/flow.json +0 -0
  663. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/health.json +0 -0
  664. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/insights.json +0 -0
  665. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/pulse.json +0 -0
  666. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/security.json +0 -0
  667. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/ci_jobs.jsonl +0 -0
  668. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/devlake_project_pr_metrics.jsonl +0 -0
  669. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/devlake_pull_requests.jsonl +0 -0
  670. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/manifest.json +0 -0
  671. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/prs.jsonl +0 -0
  672. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/tests.jsonl +0 -0
  673. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/supply.json +0 -0
  674. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/vulns.json +0 -0
  675. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/alerts.json +0 -0
  676. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/app.json +0 -0
  677. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/community.json +0 -0
  678. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/connectors.json +0 -0
  679. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/data.json +0 -0
  680. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/decisions.json +0 -0
  681. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/delivery.json +0 -0
  682. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/deps.json +0 -0
  683. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/flow.json +0 -0
  684. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/health.json +0 -0
  685. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/insights.json +0 -0
  686. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/pulse.json +0 -0
  687. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/security.json +0 -0
  688. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/ci_jobs.jsonl +0 -0
  689. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/devlake_project_pr_metrics.jsonl +0 -0
  690. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/devlake_pull_requests.jsonl +0 -0
  691. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/manifest.json +0 -0
  692. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/prs.jsonl +0 -0
  693. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/tests.jsonl +0 -0
  694. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/supply.json +0 -0
  695. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/vulns.json +0 -0
  696. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/portal.json +0 -0
  697. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/settings.json +0 -0
  698. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/alerts.json +0 -0
  699. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/app.json +0 -0
  700. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/community.json +0 -0
  701. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/connectors.json +0 -0
  702. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/data.json +0 -0
  703. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/decisions.json +0 -0
  704. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/delivery.json +0 -0
  705. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/deps.json +0 -0
  706. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/flow.json +0 -0
  707. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/health.json +0 -0
  708. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/insights.json +0 -0
  709. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/pulse.json +0 -0
  710. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/security.json +0 -0
  711. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/ci_jobs.jsonl +0 -0
  712. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/devlake_project_pr_metrics.jsonl +0 -0
  713. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/devlake_pull_requests.jsonl +0 -0
  714. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/manifest.json +0 -0
  715. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/prs.jsonl +0 -0
  716. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/tests.jsonl +0 -0
  717. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/supply.json +0 -0
  718. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/vulns.json +0 -0
  719. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-mono-400.woff2 +0 -0
  720. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-sans-400.woff2 +0 -0
  721. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-sans-600.woff2 +0 -0
  722. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-sans-condensed-700.woff2 +0 -0
  723. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/help/connectors.json +0 -0
  724. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/help/getting-started.json +0 -0
  725. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/help/privacy-and-security.json +0 -0
  726. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/help/reference.json +0 -0
  727. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/main.css +0 -0
  728. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/main.js +0 -0
  729. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/about.css +0 -0
  730. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/about.js +0 -0
  731. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/activity.css +0 -0
  732. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/activity.js +0 -0
  733. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/agents.css +0 -0
  734. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/agents.js +0 -0
  735. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/ci.css +0 -0
  736. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/ci.js +0 -0
  737. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/community.css +0 -0
  738. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/community.js +0 -0
  739. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/connections.css +0 -0
  740. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/connections.js +0 -0
  741. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/delivery.css +0 -0
  742. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/delivery.js +0 -0
  743. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/deps.css +0 -0
  744. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/deps.js +0 -0
  745. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/explore.css +0 -0
  746. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/explore.js +0 -0
  747. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/health.css +0 -0
  748. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/health.js +0 -0
  749. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/help.css +0 -0
  750. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/help.js +0 -0
  751. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/insights.css +0 -0
  752. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/insights.js +0 -0
  753. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/investment.css +0 -0
  754. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/investment.js +0 -0
  755. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/overview.css +0 -0
  756. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/overview.js +0 -0
  757. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/portal.css +0 -0
  758. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/portal.js +0 -0
  759. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/prs.css +0 -0
  760. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/prs.js +0 -0
  761. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/settings.css +0 -0
  762. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/settings.js +0 -0
  763. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/setup.css +0 -0
  764. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/setup.js +0 -0
  765. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/standing.css +0 -0
  766. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/standing.js +0 -0
  767. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/welcome-sheet.js +0 -0
  768. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/welcome.js +0 -0
  769. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/app/settings-workflow.json +0 -0
  770. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/index.html +0 -0
  771. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/site/index.html +0 -0
  772. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/site/integrations.html +0 -0
  773. {stackvitals-0.1.3 → stackvitals-0.1.4}/src/stackvitals/web/site/setup.html +0 -0
  774. {stackvitals-0.1.3 → stackvitals-0.1.4}/templates/gitlab/stackvitals.yml +0 -0
  775. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/ci_fake.py +0 -0
  776. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/conftest.py +0 -0
  777. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/fixtures/issue_page.json +0 -0
  778. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/fixtures/osv-scan.json +0 -0
  779. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/fixtures/pr_page.json +0 -0
  780. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/fixtures/repo_meta.json +0 -0
  781. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_actions_vulns.py +0 -0
  782. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_adjudicate.py +0 -0
  783. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_adoption_study.py +0 -0
  784. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_agent_leaderboard.py +0 -0
  785. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_agent_ledger.py +0 -0
  786. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_agreement_nudges.py +0 -0
  787. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ai_markers.py +0 -0
  788. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ai_matched.py +0 -0
  789. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ai_outcomes.py +0 -0
  790. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ai_spend.py +0 -0
  791. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_api_cost.py +0 -0
  792. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_app_review.py +0 -0
  793. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_archive_cli.py +0 -0
  794. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_bench.py +0 -0
  795. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_docs.py +0 -0
  796. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_files.py +0 -0
  797. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_guarddog.py +0 -0
  798. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_mcp_messages.py +0 -0
  799. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_requests.py +0 -0
  800. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_sql.py +0 -0
  801. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_uicli.py +0 -0
  802. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_audit_workflows.py +0 -0
  803. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_base_images.py +0 -0
  804. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_began_after.py +0 -0
  805. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_bench.py +0 -0
  806. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_bench_by_repo.py +0 -0
  807. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_bench_deploys.py +0 -0
  808. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_bench_report_delivery.py +0 -0
  809. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_bench_stars.py +0 -0
  810. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_branch_growth.py +0 -0
  811. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_bucket.py +0 -0
  812. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_bug_backlog.py +0 -0
  813. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_capex.py +0 -0
  814. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_catalog_descriptor.py +0 -0
  815. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_change_risk.py +0 -0
  816. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_changes_14d.py +0 -0
  817. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_chat.py +0 -0
  818. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_action.py +0 -0
  819. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_action_pr.py +0 -0
  820. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_already_failing.py +0 -0
  821. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_analyze.py +0 -0
  822. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_analyze_tests.py +0 -0
  823. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_artifacts.py +0 -0
  824. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_automation.py +0 -0
  825. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_began.py +0 -0
  826. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_bench.py +0 -0
  827. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_bench_wiring.py +0 -0
  828. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_burnin.py +0 -0
  829. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_cli.py +0 -0
  830. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_collect.py +0 -0
  831. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_comment_shape.py +0 -0
  832. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_cost.py +0 -0
  833. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_decisions.py +0 -0
  834. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_depth.py +0 -0
  835. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_evidence.py +0 -0
  836. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_feedback.py +0 -0
  837. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_feedback_all.py +0 -0
  838. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_fingerprint.py +0 -0
  839. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_gitlab.py +0 -0
  840. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_groups.py +0 -0
  841. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_impact.py +0 -0
  842. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_issue_lifecycle.py +0 -0
  843. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_kinds.py +0 -0
  844. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_masking.py +0 -0
  845. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_maybe_flaky.py +0 -0
  846. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_mcp.py +0 -0
  847. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_monitors.py +0 -0
  848. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_outside.py +0 -0
  849. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_outside_ci_edit.py +0 -0
  850. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_pr_details.py +0 -0
  851. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_push_evidence.py +0 -0
  852. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_quarantine_mark.py +0 -0
  853. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_report.py +0 -0
  854. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_report_formats.py +0 -0
  855. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_retry.py +0 -0
  856. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_review_fixes.py +0 -0
  857. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_safe_rule.py +0 -0
  858. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_settings.py +0 -0
  859. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_surfaces_m3.py +0 -0
  860. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_test_verdict.py +0 -0
  861. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_testreports.py +0 -0
  862. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_triage.py +0 -0
  863. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_triggers_script.py +0 -0
  864. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_upload.py +0 -0
  865. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_verdict_check.py +0 -0
  866. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_ci_webhook_formats.py +0 -0
  867. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_code_hosts.py +0 -0
  868. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_code_survival.py +0 -0
  869. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_action.py +0 -0
  870. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_affiliation.py +0 -0
  871. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_analyze.py +0 -0
  872. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_bench.py +0 -0
  873. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_cli.py +0 -0
  874. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_collect.py +0 -0
  875. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_context.py +0 -0
  876. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_dependency.py +0 -0
  877. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_discussions.py +0 -0
  878. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_fetch.py +0 -0
  879. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_report.py +0 -0
  880. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_community_stated.py +0 -0
  881. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_config.py +0 -0
  882. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connector_checks.py +0 -0
  883. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connector_framework.py +0 -0
  884. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connector_review.py +0 -0
  885. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connectors.py +0 -0
  886. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connectors_chat.py +0 -0
  887. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connectors_discourse.py +0 -0
  888. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connectors_epics.py +0 -0
  889. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_connectors_writeback.py +0 -0
  890. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_contribute_brief.py +0 -0
  891. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_contribute_prospective.py +0 -0
  892. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_contribute_review.py +0 -0
  893. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_convert.py +0 -0
  894. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_actors.py +0 -0
  895. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_agreements.py +0 -0
  896. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_alerts.py +0 -0
  897. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_appdata.py +0 -0
  898. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_decisions.py +0 -0
  899. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_delivery.py +0 -0
  900. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_delivery_peers.py +0 -0
  901. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_delivery_surfaces.py +0 -0
  902. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_digest.py +0 -0
  903. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_digest_step.py +0 -0
  904. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_explore.py +0 -0
  905. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_export.py +0 -0
  906. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_findings.py +0 -0
  907. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_findings_ledger.py +0 -0
  908. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_insights.py +0 -0
  909. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_insights_surfaces.py +0 -0
  910. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_metrics.py +0 -0
  911. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_model.py +0 -0
  912. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_otel.py +0 -0
  913. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_propose.py +0 -0
  914. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_pulse.py +0 -0
  915. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_recovery.py +0 -0
  916. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_request_wiring.py +0 -0
  917. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_requests.py +0 -0
  918. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_requests_wording.py +0 -0
  919. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_roles_wiring.py +0 -0
  920. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_runner.py +0 -0
  921. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_schema.py +0 -0
  922. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_services.py +0 -0
  923. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_settings.py +0 -0
  924. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_sql_org.py +0 -0
  925. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_stats.py +0 -0
  926. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_store.py +0 -0
  927. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_summary.py +0 -0
  928. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_summary_churn.py +0 -0
  929. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_tomledit.py +0 -0
  930. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_ui.py +0 -0
  931. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_webapp.py +0 -0
  932. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_webapp_version.py +0 -0
  933. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_core_workspace.py +0 -0
  934. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_cost_guard.py +0 -0
  935. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_count_repos.py +0 -0
  936. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_coverage.py +0 -0
  937. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_cli.py +0 -0
  938. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_fetch.py +0 -0
  939. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_outcomes.py +0 -0
  940. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_queries.py +0 -0
  941. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_runner.py +0 -0
  942. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_seed.py +0 -0
  943. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_state.py +0 -0
  944. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_crawl_writer.py +0 -0
  945. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_delivery_bench.py +0 -0
  946. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_delivery_deploy_check.py +0 -0
  947. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_delivery_rules_m2.py +0 -0
  948. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_bumps.py +0 -0
  949. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_crawl.py +0 -0
  950. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_exploits.py +0 -0
  951. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_fixed_versions.py +0 -0
  952. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_ledger.py +0 -0
  953. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_map.py +0 -0
  954. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_osv.py +0 -0
  955. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_owners.py +0 -0
  956. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_top.py +0 -0
  957. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_trend_quiet.py +0 -0
  958. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_trends.py +0 -0
  959. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dep_watch.py +0 -0
  960. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deploy_attempts.py +0 -0
  961. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deploy_ranges.py +0 -0
  962. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deployment_history.py +0 -0
  963. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deployment_list.py +0 -0
  964. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_action.py +0 -0
  965. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_cli.py +0 -0
  966. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_dossier.py +0 -0
  967. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_hygiene.py +0 -0
  968. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_imports.py +0 -0
  969. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_lookalike.py +0 -0
  970. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_paths.py +0 -0
  971. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_policy.py +0 -0
  972. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_reach.py +0 -0
  973. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_release.py +0 -0
  974. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_review_fixes.py +0 -0
  975. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_runtimes.py +0 -0
  976. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_deps_vulns.py +0 -0
  977. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_devlake_cicd.py +0 -0
  978. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dora_evidence.py +0 -0
  979. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dora_proof.py +0 -0
  980. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dora_rows.py +0 -0
  981. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_dora_weeks.py +0 -0
  982. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_editor_marks.py +0 -0
  983. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_enterprise_server.py +0 -0
  984. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_events.py +0 -0
  985. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_explain_cli.py +0 -0
  986. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_fair.py +0 -0
  987. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_fixplan.py +0 -0
  988. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flake_code_kinds.py +0 -0
  989. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flaky_natural.py +0 -0
  990. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flaky_sample.py +0 -0
  991. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flaky_score_fair.py +0 -0
  992. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flaky_test_cost.py +0 -0
  993. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flaky_tickets.py +0 -0
  994. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_analyze.py +0 -0
  995. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_automate.py +0 -0
  996. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_bench_pipeline.py +0 -0
  997. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_collect.py +0 -0
  998. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_collect_delivery.py +0 -0
  999. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_definitions.py +0 -0
  1000. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_m2.py +0 -0
  1001. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_peers.py +0 -0
  1002. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_preflight.py +0 -0
  1003. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_report.py +0 -0
  1004. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_round2.py +0 -0
  1005. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_round3.py +0 -0
  1006. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_triage.py +0 -0
  1007. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_windows.py +0 -0
  1008. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_flow_wiring.py +0 -0
  1009. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_fork_reports.py +0 -0
  1010. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_gitlab_action.py +0 -0
  1011. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_gitlab_delivery.py +0 -0
  1012. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_graphql.py +0 -0
  1013. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_health.py +0 -0
  1014. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_identities.py +0 -0
  1015. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_identity.py +0 -0
  1016. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_identity_everywhere.py +0 -0
  1017. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_identity_match.py +0 -0
  1018. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_init_cli.py +0 -0
  1019. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_insights_chains.py +0 -0
  1020. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_investment.py +0 -0
  1021. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_jira_fields.py +0 -0
  1022. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_knowledge_names.py +0 -0
  1023. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_labeller.py +0 -0
  1024. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_llms_txt.py +0 -0
  1025. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_local_run.py +0 -0
  1026. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_m1_small_fixes.py +0 -0
  1027. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_masking_card.py +0 -0
  1028. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_mcp_core.py +0 -0
  1029. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_mcp_provenance.py +0 -0
  1030. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_merge_queue.py +0 -0
  1031. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_mergescout_token.py +0 -0
  1032. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_modular_install.py +0 -0
  1033. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_nulls_power.py +0 -0
  1034. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_numbers_review.py +0 -0
  1035. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_odds_backtest.py +0 -0
  1036. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_outside_fresh.py +0 -0
  1037. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_owners.py +0 -0
  1038. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_pagers_copilot.py +0 -0
  1039. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_pages_deploy.py +0 -0
  1040. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_parsing_review.py +0 -0
  1041. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_peer_fit.py +0 -0
  1042. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_polish_m1.py +0 -0
  1043. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_polish_m2.py +0 -0
  1044. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_polish_review.py +0 -0
  1045. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_app_facts.py +0 -0
  1046. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_campaigns.py +0 -0
  1047. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_catalog.py +0 -0
  1048. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_checks.py +0 -0
  1049. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_export.py +0 -0
  1050. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_golden.py +0 -0
  1051. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_handcheck.py +0 -0
  1052. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_history.py +0 -0
  1053. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_html.py +0 -0
  1054. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_m1.py +0 -0
  1055. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_nudges.py +0 -0
  1056. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_reviews.py +0 -0
  1057. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_rollup.py +0 -0
  1058. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_portal_scorecard.py +0 -0
  1059. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_pr_exclusions.py +0 -0
  1060. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_pr_licences.py +0 -0
  1061. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_pr_rules.py +0 -0
  1062. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_prelaunch.py +0 -0
  1063. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_production_branches.py +0 -0
  1064. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_project_dora.py +0 -0
  1065. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_pulse_trend.py +0 -0
  1066. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_quarantine_expiry.py +0 -0
  1067. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_quarantine_runners.py +0 -0
  1068. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_quarantine_runtime.py +0 -0
  1069. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_recorded.py +0 -0
  1070. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_relay_and_polish.py +0 -0
  1071. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_release_quality.py +0 -0
  1072. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_releases.py +0 -0
  1073. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_releases_ratelimit.py +0 -0
  1074. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_report.py +0 -0
  1075. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_report_validate.py +0 -0
  1076. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_response_times.py +0 -0
  1077. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_result_quality.py +0 -0
  1078. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_resync.py +0 -0
  1079. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_review_fixes.py +0 -0
  1080. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_review_fixes_action.py +0 -0
  1081. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_review_fixes_p3.py +0 -0
  1082. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_review_fixes_requests.py +0 -0
  1083. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_review_m3.py +0 -0
  1084. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_sample.py +0 -0
  1085. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_schema_sections.py +0 -0
  1086. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_scorecard_agreement.py +0 -0
  1087. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_security_checks.py +0 -0
  1088. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_selfheal.py +0 -0
  1089. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_services.py +0 -0
  1090. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_setup_check.py +0 -0
  1091. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_setup_template.py +0 -0
  1092. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_shared_bench.py +0 -0
  1093. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_shell_app_link.py +0 -0
  1094. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_shrinkage_groups.py +0 -0
  1095. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_signals_check.py +0 -0
  1096. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_signals_cli.py +0 -0
  1097. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_signals_identity.py +0 -0
  1098. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_signals_issues.py +0 -0
  1099. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_signals_labels.py +0 -0
  1100. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_signals_repo_stats.py +0 -0
  1101. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_signals_walls.py +0 -0
  1102. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_snapshot_build.py +0 -0
  1103. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_snapshot_publish.py +0 -0
  1104. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_sonar.py +0 -0
  1105. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_state_report.py +0 -0
  1106. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_store.py +0 -0
  1107. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_store_cli.py +0 -0
  1108. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_stream.py +0 -0
  1109. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_suite_packaging.py +0 -0
  1110. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_supply.py +0 -0
  1111. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_sweep.py +0 -0
  1112. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_team_dora.py +0 -0
  1113. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_test_variants.py +0 -0
  1114. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tool_action_pack.py +0 -0
  1115. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tool_live.py +0 -0
  1116. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tool_queries.py +0 -0
  1117. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tool_server.py +0 -0
  1118. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tool_speed.py +0 -0
  1119. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tool_store.py +0 -0
  1120. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tool_tracking.py +0 -0
  1121. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_tracker.py +0 -0
  1122. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_triage_math.py +0 -0
  1123. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_triage_pipeline.py +0 -0
  1124. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_uncertainty.py +0 -0
  1125. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_verdict_feedback.py +0 -0
  1126. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_verdict_strict.py +0 -0
  1127. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_vulns_dev_only.py +0 -0
  1128. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_vulns_ignores.py +0 -0
  1129. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_vulns_inputs.py +0 -0
  1130. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_web_build.py +0 -0
  1131. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_web_next_setup.py +0 -0
  1132. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_web_replay_parity.py +0 -0
  1133. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_what_changed.py +0 -0
  1134. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/local/test_work_calendar.py +0 -0
  1135. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/signals_data.py +0 -0
  1136. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_accuracy.py +0 -0
  1137. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_bench.py +0 -0
  1138. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_ci.py +0 -0
  1139. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_community.py +0 -0
  1140. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_connectors.py +0 -0
  1141. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_contribute.py +0 -0
  1142. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_core.py +0 -0
  1143. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_crawl.py +0 -0
  1144. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_decisions.py +0 -0
  1145. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_delivery.py +0 -0
  1146. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_deps.py +0 -0
  1147. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_discover.py +0 -0
  1148. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_github.py +0 -0
  1149. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_insights.py +0 -0
  1150. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_portal.py +0 -0
  1151. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_signals.py +0 -0
  1152. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_snapshot.py +0 -0
  1153. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_store.py +0 -0
  1154. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_surfaces.py +0 -0
  1155. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_team.py +0 -0
  1156. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_tool.py +0 -0
  1157. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/test_flow_web.py +0 -0
  1158. {stackvitals-0.1.3 → stackvitals-0.1.4}/tests/tool_data.py +0 -0
  1159. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/README.md +0 -0
  1160. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/brand/cube-128.png +0 -0
  1161. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/brand/cube-256.png +0 -0
  1162. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/brand/cube-64.png +0 -0
  1163. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/build.mjs +0 -0
  1164. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/demo/extra-ci.mjs +0 -0
  1165. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/demo/extra-delivery.mjs +0 -0
  1166. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/demo/extra-deps.mjs +0 -0
  1167. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/demo/extra-people.mjs +0 -0
  1168. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/demo/extra-portal.mjs +0 -0
  1169. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/demo/settings.json +0 -0
  1170. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/demo/source.mjs +0 -0
  1171. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/defaults.spec.ts +0 -0
  1172. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/fixtures.ts +0 -0
  1173. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/flows.spec.ts +0 -0
  1174. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/links.spec.ts +0 -0
  1175. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/playwright.config.ts +0 -0
  1176. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/serve.mjs +0 -0
  1177. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/sweep.spec.ts +0 -0
  1178. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/e2e/welcome.spec.ts +0 -0
  1179. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/index.html +0 -0
  1180. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/package-lock.json +0 -0
  1181. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/package.json +0 -0
  1182. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/scripts/docs.mjs +0 -0
  1183. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/app/AddRepo.tsx +0 -0
  1184. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/app/App.tsx +0 -0
  1185. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/app/Brand.tsx +0 -0
  1186. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/app/Profile.tsx +0 -0
  1187. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/app/jump.ts +0 -0
  1188. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/app/router.ts +0 -0
  1189. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/app/routes.ts +0 -0
  1190. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/boot.ts +0 -0
  1191. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/brand/Logo.tsx +0 -0
  1192. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/charts/BarChart.tsx +0 -0
  1193. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/charts/MetricHero.tsx +0 -0
  1194. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/charts/ScrubChart.tsx +0 -0
  1195. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/charts/Sparkline.tsx +0 -0
  1196. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/charts/metric.ts +0 -0
  1197. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/files.ts +0 -0
  1198. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/format.ts +0 -0
  1199. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/repos.ts +0 -0
  1200. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/requestIssue.ts +0 -0
  1201. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/source.ts +0 -0
  1202. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/store.ts +0 -0
  1203. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/theme.ts +0 -0
  1204. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/types.ts +0 -0
  1205. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/data/write.ts +0 -0
  1206. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/Decide.tsx +0 -0
  1207. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/Evidence.tsx +0 -0
  1208. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/Health.tsx +0 -0
  1209. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/SetupRunning.tsx +0 -0
  1210. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/agents-data.ts +0 -0
  1211. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/brand-logos.ts +0 -0
  1212. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/connect.css +0 -0
  1213. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/connect.tsx +0 -0
  1214. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/connectRepos.tsx +0 -0
  1215. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/connections-data.ts +0 -0
  1216. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/connstatus.ts +0 -0
  1217. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/helpLink.ts +0 -0
  1218. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/markdown.ts +0 -0
  1219. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/sealbox.ts +0 -0
  1220. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/sealedbox.d.ts +0 -0
  1221. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/secrets.ts +0 -0
  1222. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/settingsApply.ts +0 -0
  1223. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/settingsModel.ts +0 -0
  1224. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/settingsPending.ts +0 -0
  1225. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/settingsReplay.ts +0 -0
  1226. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/settingsReview.tsx +0 -0
  1227. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/settingsToml.ts +0 -0
  1228. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/text-css.d.ts +0 -0
  1229. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/features/vitals.ts +0 -0
  1230. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/caps.ts +0 -0
  1231. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/client.ts +0 -0
  1232. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/config.ts +0 -0
  1233. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/detect.ts +0 -0
  1234. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/diff.ts +0 -0
  1235. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/links.ts +0 -0
  1236. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/mine.ts +0 -0
  1237. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/names.ts +0 -0
  1238. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/oauth.ts +0 -0
  1239. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/open.ts +0 -0
  1240. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/session.ts +0 -0
  1241. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/setup.ts +0 -0
  1242. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/signout.ts +0 -0
  1243. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/token.ts +0 -0
  1244. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/watch.ts +0 -0
  1245. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/github/workflow.ts +0 -0
  1246. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/main.tsx +0 -0
  1247. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/about/parts.tsx +0 -0
  1248. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/about-accuracy.d.ts +0 -0
  1249. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/about.css +0 -0
  1250. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/about.tsx +0 -0
  1251. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/accuracy-data.js +0 -0
  1252. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/activity.css +0 -0
  1253. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/activity.tsx +0 -0
  1254. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/agents/parts.tsx +0 -0
  1255. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/agents.css +0 -0
  1256. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/agents.tsx +0 -0
  1257. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/ci/more.tsx +0 -0
  1258. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/ci/parts.tsx +0 -0
  1259. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/ci/setup.tsx +0 -0
  1260. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/ci/workflowgen.ts +0 -0
  1261. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/ci.css +0 -0
  1262. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/ci.tsx +0 -0
  1263. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/community/command.ts +0 -0
  1264. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/community/report.tsx +0 -0
  1265. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/community.css +0 -0
  1266. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/community.tsx +0 -0
  1267. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/connections.css +0 -0
  1268. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/connections.tsx +0 -0
  1269. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/delivery/blocks.css +0 -0
  1270. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/delivery/blocks.tsx +0 -0
  1271. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/delivery/more.tsx +0 -0
  1272. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/delivery/sources.tsx +0 -0
  1273. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/delivery.css +0 -0
  1274. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/delivery.tsx +0 -0
  1275. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps/blocks.css +0 -0
  1276. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps/blocks.tsx +0 -0
  1277. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps/lookup.ts +0 -0
  1278. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps/scanning.ts +0 -0
  1279. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps/security.tsx +0 -0
  1280. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps/tools.tsx +0 -0
  1281. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps.css +0 -0
  1282. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/deps.tsx +0 -0
  1283. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/explore/parts.tsx +0 -0
  1284. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/explore/query.ts +0 -0
  1285. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/explore.css +0 -0
  1286. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/explore.tsx +0 -0
  1287. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/health.css +0 -0
  1288. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/health.tsx +0 -0
  1289. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/help/commands.tsx +0 -0
  1290. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/help.css +0 -0
  1291. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/help.tsx +0 -0
  1292. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/insights/parts.tsx +0 -0
  1293. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/insights.css +0 -0
  1294. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/insights.tsx +0 -0
  1295. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/investment.css +0 -0
  1296. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/investment.tsx +0 -0
  1297. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/overview/parts.tsx +0 -0
  1298. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/overview.css +0 -0
  1299. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/overview.tsx +0 -0
  1300. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal/access.ts +0 -0
  1301. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal/panel.css +0 -0
  1302. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal/panel.tsx +0 -0
  1303. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal/parts.tsx +0 -0
  1304. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal/setup.ts +0 -0
  1305. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal/tools.tsx +0 -0
  1306. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal.css +0 -0
  1307. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/portal.tsx +0 -0
  1308. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/prs/more.tsx +0 -0
  1309. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/prs/parts.tsx +0 -0
  1310. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/prs/preflight.ts +0 -0
  1311. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/prs.css +0 -0
  1312. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/prs.tsx +0 -0
  1313. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/settings.css +0 -0
  1314. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/settings.tsx +0 -0
  1315. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/setup.css +0 -0
  1316. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/setup.tsx +0 -0
  1317. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/standing.css +0 -0
  1318. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/standing.tsx +0 -0
  1319. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/welcome-sheet.css +0 -0
  1320. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/welcome-sheet.tsx +0 -0
  1321. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/pages/welcome.tsx +0 -0
  1322. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/styles/base.css +0 -0
  1323. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/styles/charts.css +0 -0
  1324. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/styles/components.css +0 -0
  1325. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/styles/index.css +0 -0
  1326. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/styles/sheet.css +0 -0
  1327. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/styles/shell.css +0 -0
  1328. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/styles/tokens.css +0 -0
  1329. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/Button.tsx +0 -0
  1330. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/Page.tsx +0 -0
  1331. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/Popover.tsx +0 -0
  1332. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/Portal.tsx +0 -0
  1333. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/Sheet.tsx +0 -0
  1334. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/Table.tsx +0 -0
  1335. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/bits.tsx +0 -0
  1336. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/controls.tsx +0 -0
  1337. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/icons.tsx +0 -0
  1338. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/motion.ts +0 -0
  1339. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/src/ui/prefill.tsx +0 -0
  1340. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/ciworkflow.test.ts +0 -0
  1341. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/client.test.ts +0 -0
  1342. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/connstatus.test.ts +0 -0
  1343. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/depstools.test.ts +0 -0
  1344. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/explorequery.test.ts +0 -0
  1345. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/fake.ts +0 -0
  1346. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/links.test.ts +0 -0
  1347. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/load.mjs +0 -0
  1348. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/markdown.test.ts +0 -0
  1349. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/portalsetup.test.ts +0 -0
  1350. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/preflight.test.ts +0 -0
  1351. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/run.mjs +0 -0
  1352. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/safety.test.ts +0 -0
  1353. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/secrets.test.ts +0 -0
  1354. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/settings.test.ts +0 -0
  1355. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/setup.test.ts +0 -0
  1356. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/test/workflow.test.ts +0 -0
  1357. {stackvitals-0.1.3 → stackvitals-0.1.4}/web/tsconfig.json +0 -0
  1358. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/README.md +0 -0
  1359. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/package.json +0 -0
  1360. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/relay/README.md +0 -0
  1361. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/relay/package.json +0 -0
  1362. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/relay/src/index.js +0 -0
  1363. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/relay/test/index.test.mjs +0 -0
  1364. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/relay/wrangler.toml +0 -0
  1365. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/src/index.js +0 -0
  1366. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/test/index.test.mjs +0 -0
  1367. {stackvitals-0.1.3 → stackvitals-0.1.4}/worker/wrangler.toml +0 -0
@@ -0,0 +1,56 @@
1
+ name: Bug report
2
+ description: Something in StackVitals is wrong or broken
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for reporting. A wrong verdict or number is a bug too, and the most useful kind.
9
+ For a security problem, don't open an issue: use the **Security** tab's private reporting instead.
10
+ - type: textarea
11
+ id: what
12
+ attributes:
13
+ label: What happened
14
+ description: What you did, what you expected, and what happened instead.
15
+ validations:
16
+ required: true
17
+ - type: dropdown
18
+ id: where
19
+ attributes:
20
+ label: Where
21
+ options:
22
+ - The Action (workflow run, PR comment, verdict check)
23
+ - The web app (dashboard)
24
+ - The command line (stackvitals ...)
25
+ - The MCP server (an AI agent)
26
+ - Setup (stackvitals init or the app's Setup page)
27
+ - The docs
28
+ validations:
29
+ required: true
30
+ - type: input
31
+ id: version
32
+ attributes:
33
+ label: StackVitals version
34
+ description: "`pip show stackvitals` shows it. For the Action, say if you use `@v0` or a pinned tag."
35
+ placeholder: "0.1.4"
36
+ validations:
37
+ required: true
38
+ - type: dropdown
39
+ id: visibility
40
+ attributes:
41
+ label: Repo
42
+ options:
43
+ - Public
44
+ - Private
45
+ - Not about a repo
46
+ - type: input
47
+ id: link
48
+ attributes:
49
+ label: A link we can look at
50
+ description: The workflow run, pull request or app page, if the repo is public. Leave out anything private.
51
+ - type: textarea
52
+ id: logs
53
+ attributes:
54
+ label: Job summary or error output
55
+ description: Paste the relevant part. Remove tokens, private names and anything you don't want public.
56
+ render: text
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Ask a question
4
+ url: https://github.com/stackvitals/stackvitals/discussions/categories/q-a
5
+ about: How to set something up or read a number. Discussions are the best place for questions.
6
+ - name: Report a security problem
7
+ url: https://github.com/stackvitals/stackvitals/security/advisories/new
8
+ about: Privately, through GitHub's reporting form. Please don't open a public issue.
@@ -0,0 +1,39 @@
1
+ name: Feature request
2
+ description: Something StackVitals should do, or do differently
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: The problem
9
+ description: What you're trying to find out or get done, and what makes it hard today.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: idea
14
+ attributes:
15
+ label: What would help
16
+ description: What you'd like StackVitals to show or do. A rough idea is fine.
17
+ validations:
18
+ required: true
19
+ - type: dropdown
20
+ id: module
21
+ attributes:
22
+ label: Area
23
+ options:
24
+ - CI Health
25
+ - Team Flow and Pull Requests
26
+ - Delivery and DORA
27
+ - Insights
28
+ - Dependencies
29
+ - Community
30
+ - Portal
31
+ - The web app
32
+ - The command line or MCP server
33
+ - Setup and integrations
34
+ - Something else
35
+ - type: textarea
36
+ id: else
37
+ attributes:
38
+ label: Anything else
39
+ description: Tools you use for this today, links, or examples.
@@ -0,0 +1,15 @@
1
+ ## What this changes
2
+
3
+ <!-- What changes for someone using StackVitals, in a sentence or two. Link the issue if there is one. -->
4
+
5
+ ## How it was checked
6
+
7
+ - [ ] Tests pass: `uv run --extra dev pytest tests -q`
8
+ - [ ] If the web app changed: `cd web && npm run build && npm test`, and the rebuilt `src/stackvitals/web/` is committed
9
+ - [ ] If a rule behind a verdict or number changed: its entry in `bench/accuracy/registry.json` and the regenerated
10
+ docs (`python bench/accuracy/summary.py`)
11
+ - [ ] If it reaches a new host or needs a new permission: said so below
12
+
13
+ ## Anything reviewers should know
14
+
15
+ <!-- Trade-offs, follow-ups, or what you weren't sure about. -->
@@ -0,0 +1,44 @@
1
+ name: Demo site
2
+ # Publishes the landing page and the app's example-data demo to GitHub Pages. The site is static and demo-only: its
3
+ # pages may fetch nothing but their own files, so there is no API or backend behind it to call or overload.
4
+ on:
5
+ release:
6
+ types: [published]
7
+ push:
8
+ branches: [main]
9
+ paths: ["src/stackvitals/web/**", "src/stackvitals/site.py"]
10
+ workflow_dispatch:
11
+ permissions: {}
12
+ concurrency:
13
+ group: pages
14
+ cancel-in-progress: false
15
+ jobs:
16
+ build:
17
+ if: github.repository == 'stackvitals/stackvitals'
18
+ runs-on: ubuntu-latest
19
+ timeout-minutes: 10
20
+ permissions:
21
+ contents: read
22
+ steps:
23
+ - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
24
+ with:
25
+ persist-credentials: false
26
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
27
+ - name: Build the demo-only site
28
+ run: uv run --no-dev stackvitals site build --out _site --demo-only
29
+ - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
30
+ with:
31
+ path: _site
32
+ deploy:
33
+ needs: build
34
+ runs-on: ubuntu-latest
35
+ timeout-minutes: 10
36
+ permissions:
37
+ pages: write
38
+ id-token: write # Pages checks the deployment with GitHub's OIDC token
39
+ environment:
40
+ name: github-pages
41
+ url: ${{ steps.deployment.outputs.page_url }}
42
+ steps:
43
+ - id: deployment
44
+ uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.4 (2026-10-31)
4
+
5
+ - PR verdicts catch more failures a change causes (from user feedback):
6
+ - a failure whose flakes in the last 30 days all came from this same pull request reads **New**, not likely flaky: a
7
+ race the change added fails now and then and passes on a re-run;
8
+ - a likely flake that fails on this pull request far more often than on the default branch (2 or more failures, under
9
+ a 5% chance at main's rate) reads **New**: the change made it worse;
10
+ - a likely flake shows its failure rate on the default branch; a first flaky-looking failure of a check that passed
11
+ every recent default-branch run says so;
12
+ - when a failure blamed on the change, or one of those checks, passes on a re-run of the same commit, the comment
13
+ says a green re-run doesn't clear it, instead of "CI is passing now".
14
+ These rules are new and not yet measured on labelled failures; [rules.md](docs/rules.md) says so.
15
+ - A public demo site, https://stackvitals.github.io/stackvitals/, built with `stackvitals site build --demo-only`: it
16
+ fetches nothing outside itself, and its setup links point at the README. The landing page uses the app's font.
17
+ - `glama.json`, so the Glama listing of the MCP server is maintained by the project.
18
+
3
19
  ## 0.1.3 (2026-10-31)
4
20
 
5
21
  - The app's About page and the project site say Apache 2.0 (they said MIT); the site shows the cube logo and the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stackvitals
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Free, open-source developer suite: CI health, team flow, dependencies, community, and MergeScout for contributors.
5
5
  Project-URL: Homepage, https://github.com/stackvitals/stackvitals
6
6
  Project-URL: Documentation, https://github.com/stackvitals/stackvitals/tree/main/docs
@@ -140,6 +140,34 @@
140
140
  "strength": "early observation",
141
141
  "strength_why": "2 held-out matches in 150 failures"
142
142
  },
143
+ {
144
+ "id": "flaky.only_this_pr",
145
+ "card": "flaky",
146
+ "version": 1,
147
+ "rule": "A failure that would read likely flaky, flaked before or maybe flaky, whose flakes in the last 30 days all came from this same pull request (none on the default branch or other pull requests), reads new: a race or order dependence the change added fails now and then and passes on a re-run.",
148
+ "tuned_on": "none: a public suggestion (2026-10-31) with the failure it describes written as tests",
149
+ "held_out": "not yet replayed on the labelled pull-request failures",
150
+ "pass_bar": "none set yet; it only moves a call toward the change and never excuses a failure",
151
+ "bar_set": "2026-10-31",
152
+ "result": "untested on labels: the replay needs the held-out reads again",
153
+ "revisions": [],
154
+ "strength": "early observation",
155
+ "strength_why": "not yet measured on labelled failures"
156
+ },
157
+ {
158
+ "id": "flaky.worse_on_pr",
159
+ "card": "flaky",
160
+ "version": 1,
161
+ "rule": "A likely flake that failed 2 or more times on this pull request's runs, where that many failures would come from its default-branch rate (smoothed by one failure and one pass, over 10 or more runs) less than 5% of the time, reads new: the change made a flaky check fail more often.",
162
+ "tuned_on": "none: a public suggestion (2026-10-31) with the failure it describes written as tests",
163
+ "held_out": "not yet measured; the plan is regressions seeded into repos of the stackvitals organisation",
164
+ "pass_bar": "none set yet; it only moves a call toward the change and never excuses a failure",
165
+ "bar_set": "2026-10-31",
166
+ "result": "untested on labels",
167
+ "revisions": [],
168
+ "strength": "early observation",
169
+ "strength_why": "not yet measured on seeded or labelled failures"
170
+ },
143
171
  {
144
172
  "id": "flaky.pr_details",
145
173
  "card": "flaky",
@@ -17,7 +17,7 @@ page is built from those cards' result files by `bench/accuracy/summary.py`; the
17
17
  - No person has audited the labels yet.
18
18
 
19
19
  **How sure.** A rule is an *early observation* when its check rests on few cases; its numbers are a direction,
20
- not a settled rate: `flaky.already_failing` (1 of 6 held-out matches with the same error); `flaky.maybe_flaky` (2 held-out matches in 150 failures); `flaky.pr_details` (24 matches in 4 repos, one repo gave most); `dora.incident_link` (15 reports named the release that broke). A rule's *bar* is the accuracy it had to reach before it shipped; for the flaky-test rules it is that at most 5% of the failures it calls flaky were really caused by the change (*masking*: a real failure hidden as a flake). A rule whose bar *failed* is kept only where failing costs nothing it promised: `flaky.known_flaky` (too few calls to show 5%: the label says "likely", the advice says to check the error first, and the verdict check waits for a green re-run). The rest are validated: checked against their bar, on held-out data where the rule has one ([rules.md](rules.md) says which).
20
+ not a settled rate: `flaky.already_failing` (1 of 6 held-out matches with the same error); `flaky.maybe_flaky` (2 held-out matches in 150 failures); `flaky.only_this_pr` (not yet measured on labelled failures); `flaky.worse_on_pr` (not yet measured on seeded or labelled failures); `flaky.pr_details` (24 matches in 4 repos, one repo gave most); `dora.incident_link` (15 reports named the release that broke). A rule's *bar* is the accuracy it had to reach before it shipped; for the flaky-test rules it is that at most 5% of the failures it calls flaky were really caused by the change (*masking*: a real failure hidden as a flake). A rule whose bar *failed* is kept only where failing costs nothing it promised: `flaky.known_flaky` (too few calls to show 5%: the label says "likely", the advice says to check the error first, and the verdict check waits for a green re-run). The rest are validated: checked against their bar, on held-out data where the rule has one ([rules.md](rules.md) says which).
21
21
 
22
22
  **Reproduce a number.** `python bench/accuracy/reproduce.py list` names the command behind every result file;
23
23
  `reproduce.py check <card>` re-scores it and says whether the numbers match. Scoring reads the evidence each
@@ -29,6 +29,10 @@ Numbers come from the accuracy cards ([accuracy.md](accuracy.md)).
29
29
  readable ones ([features card](../bench/accuracy/features/README.md)).
30
30
  - Jobs with rare flakes look like "never flaked" in a short window. Status precision (re-running pinned commits) is
31
31
  not measured.
32
+ - A change that makes an already-flaky test fail more often reads "new" once it has failed 2 or more times on the pull
33
+ request, far above its rate on the default branch. Its first failure still reads "likely flaky" (one run can't tell a
34
+ 5% flake from a 40% one), and a re-run can pass; the row shows the rate on the default branch to compare against.
35
+ How often this happens isn't measured yet.
32
36
  - No verdict lets a failure through, and none says "safe to re-run". Likely flaky, outside failure, already failing,
33
37
  maybe flaky and PR details all still block the verdict check until CI is green. GitLab job logs aren't read, so
34
38
  there a job that flaked before is never called a likely flake.
@@ -84,14 +84,14 @@ never = ["tests/test_billing.py::test_charge"]
84
84
 
85
85
  | Verdict | When | What to do |
86
86
  |---|---|---|
87
- | Likely flaky | The job flaked 3 or more times lately, once in the step that failed now; that step's log shows a flake's sign (an outside service, the runner or a wait failing with no failing test) and names no file the pull request changed. The row shows that evidence. | Check the error, then re-run it. |
87
+ | Likely flaky | The job flaked 3 or more times lately, once in the step that failed now; that step's log shows a flake's sign (an outside service, the runner or a wait failing with no failing test) and names no file the pull request changed. The row shows that evidence, and how often it failed on the default branch: a change can make a flaky test fail far more often. | Check the error, then re-run it. |
88
88
  | Maybe yours | The job flaked before, but its failing step names a file the pull request changed. | Look at your change first. |
89
89
  | Outside service or runner | The failing step's log says an outside service or the runner failed. | Re-run it. |
90
90
  | Flaked before, needs a look | The job flaked before, but too rarely, elsewhere or with no flake's sign to rule out the change. | Look before re-running. |
91
91
  | Already failing on main | The default branch fails with the same error (checked in the log: the same step alone isn't enough, since on labelled data 4 of 20 such failures were the change's own). | Not caused by this pull request. |
92
- | Maybe flaky | It never flaked, but failed the way flaky checks do (a wait running out, a benchmark gate, a live service). | Re-run it once to tell. |
92
+ | Maybe flaky | It never flaked, but failed the way flaky checks do (a wait running out, a benchmark gate, a live service). When it passed all of 20 or more recent default-branch runs, the row says so. | Re-run it once to tell. If the re-run passes, the comment still asks for a look before merging. |
93
93
  | PR details | A check on the pull request itself (a changelog label, a description checkbox, a title prefix) in a workflow that runs again when the PR is edited; 23 of 24 labelled matches were this. | Fix the PR, not the code. |
94
- | New | None of the above. | Likely from this change. |
94
+ | New | None of the above; or every flake in the last 30 days came from this same pull request (a race or order dependence it added fails now and then and passes on a re-run); or a likely flake failed on this pull request far more often than on the default branch (2 or more failures, under a 5% chance at main's rate). | Likely from this change. If a re-run of the same commit passes, the comment says a green re-run doesn't clear it. |
95
95
 
96
96
  A flaky failure also says what kind it looks like: the environment (timing, network, infrastructure, concurrency) or, when none of those shows, the test's own code (a resource leak, an async wait, time and time zones, randomness, floating point, state shared between tests, files, ordering), and a flaky job or test says when it began: its first flake, how many runs before it were clean, whether that could be chance, and the commits that reached the default branch the day before, worded only as surely as the history allows. Those commits are context, not a culprit: on 5 clear starts in 45 public repos they touched tests or the workflow 9 of 12 times, about as often as random commits there (8 of 12).
97
97
 
@@ -68,6 +68,28 @@ A failure with no flake history whose failing step (or test message) shows a wai
68
68
  - **How sure:** early observation (2 held-out matches in 150 failures)
69
69
  - **Changed 2026-10-23:** was track record over all 24 signature matches; why: the product says maybe flaky only for never-flaked failures (a whole-release review); effect: the track record counts never-flaked matches: 1 of 6 (0 of 4 tuning, 1 of 2 held out)
70
70
 
71
+ ## `flaky.only_this_pr` (version 1)
72
+
73
+ A failure that would read likely flaky, flaked before or maybe flaky, whose flakes in the last 30 days all came from this same pull request (none on the default branch or other pull requests), reads new: a race or order dependence the change added fails now and then and passes on a re-run.
74
+
75
+ - **Card:** [bench/accuracy/flaky](../bench/accuracy/flaky/README.md)
76
+ - **Tuned on:** none: a public suggestion (2026-10-31) with the failure it describes written as tests
77
+ - **Checked on:** not yet replayed on the labelled pull-request failures
78
+ - **Bar:** none set yet; it only moves a call toward the change and never excuses a failure (set 2026-10-31)
79
+ - **Result:** untested on labels: the replay needs the held-out reads again
80
+ - **How sure:** early observation (not yet measured on labelled failures)
81
+
82
+ ## `flaky.worse_on_pr` (version 1)
83
+
84
+ A likely flake that failed 2 or more times on this pull request's runs, where that many failures would come from its default-branch rate (smoothed by one failure and one pass, over 10 or more runs) less than 5% of the time, reads new: the change made a flaky check fail more often.
85
+
86
+ - **Card:** [bench/accuracy/flaky](../bench/accuracy/flaky/README.md)
87
+ - **Tuned on:** none: a public suggestion (2026-10-31) with the failure it describes written as tests
88
+ - **Checked on:** not yet measured; the plan is regressions seeded into repos of the stackvitals organisation
89
+ - **Bar:** none set yet; it only moves a call toward the change and never excuses a failure (set 2026-10-31)
90
+ - **Result:** untested on labels
91
+ - **How sure:** early observation (not yet measured on seeded or labelled failures)
92
+
71
93
  ## `flaky.pr_details` (version 1)
72
94
 
73
95
  A pull-request failure in a workflow that also runs when the PR's title, description or labels change, with no failing test in the step, whose error lines are about the PR (the pull request, a PR title or label, a label to add or missing, a checkbox, checklist or template left unchecked or incomplete), reads PR details: fix the PR, not the code; it still blocks.
@@ -0,0 +1,4 @@
1
+ {
2
+ "$schema": "https://glama.ai/mcp/schemas/server.json",
3
+ "maintainers": ["kaushik-yadav"]
4
+ }
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "stackvitals"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "Free, open-source developer suite: CI health, team flow, dependencies, community, and MergeScout for contributors."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -3,12 +3,12 @@
3
3
  "name": "io.github.stackvitals/stackvitals",
4
4
  "title": "StackVitals",
5
5
  "description": "Known flaky tests, failing and slow CI, review flow, delivery and dependency risk from kept history.",
6
- "version": "0.1.3",
6
+ "version": "0.1.4",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "pypi",
10
10
  "identifier": "stackvitals",
11
- "version": "0.1.3",
11
+ "version": "0.1.4",
12
12
  "runtimeHint": "uvx",
13
13
  "transport": {
14
14
  "type": "stdio"
@@ -0,0 +1 @@
1
+ __version__ = "0.1.4"
@@ -1,2 +1,2 @@
1
1
  """StackVitals: a free, open-source developer suite. MergeScout (package `mergescout`) is its Contribute module."""
2
- __version__ = "0.1.3"
2
+ __version__ = "0.1.4"
@@ -15,7 +15,7 @@ from stackvitals.ci.automation import (alert_message, apply_decisions, new_flake
15
15
  should_rerun, sync_issues)
16
16
  from stackvitals.ci.collect import PR_EVENTS, collect
17
17
  from stackvitals.ci.feedback import (MARKER, classify, find_pr, our_comment, quarantine_note, quarantined_failures,
18
- remembered, render_comment, upsert_comment, verdict_payload, blamed_sha)
18
+ remembered, render_comment, upsert_comment, verdict_payload, blamed_sha, green_note)
19
19
  from stackvitals.ci.owners import attach_owners, read_codeowners, test_files
20
20
  from stackvitals.ci.report import detail_name, render_detail, render_html, render_markdown
21
21
  from stackvitals.ci.store import DataStore
@@ -339,7 +339,7 @@ def _pr_feedback(recent: list[dict], latest: dict, payload: dict | None, api, da
339
339
  existing = [c for c in api._get(f"/repos/{repo}/issues/{pr}/comments", {"per_page": 100}) or []
340
340
  if MARKER in (c.get("body") or "")]
341
341
  if existing:
342
- outcomes.append(upsert_comment(api, pr, f"{MARKER}\n### StackVitals: CI is passing now\nThe latest run passed."))
342
+ outcomes.append(upsert_comment(api, pr, green_note(existing[0].get("body"), newest), existing[0]))
343
343
  if verdict:
344
344
  # A merge queue tests its own commit, so a required verdict must be posted there too.
345
345
  queued = {r["sha"] for r in recent if r.get("ev") == "merge_group" and r.get("sha")}
@@ -72,6 +72,13 @@ def _pushes(runs: dict, final_att: dict, default_branch: str | None) -> list:
72
72
  and r.get("ev") == "push" and default_branch is not None and r.get("br") == default_branch)
73
73
 
74
74
 
75
+ def _only_pr(prs: list) -> int | None:
76
+ """The one pull request every flake came from (each flake's pull request numbers), else None."""
77
+ found = {tuple(p) for p in prs}
78
+ only = found.pop() if len(found) == 1 else ()
79
+ return only[0] if len(only) == 1 else None
80
+
81
+
75
82
  def _state(ev_all: list, ev_win: list, runs_since: int, broken: bool, now: datetime) -> str:
76
83
  if broken:
77
84
  return "broken"
@@ -177,7 +184,10 @@ def _tests(data: dict, runs: dict, final_att: dict, since: datetime, now: dateti
177
184
  status = monitors.evaluate(ev_all, ev_win, hist, runs_since, now, cfg, (previous or {}).get(tid),
178
185
  pass_ms.get(tid, ()), fail_ms.get(tid, ()), tid)
179
186
  lo, hi = wilson(len(ev_win), len(win))
187
+ main_win = [r for r in default if when[id(r)] >= since]
180
188
  out.append({"id": tid, "suite": name, "runs": len(win),
189
+ # Its record on the default branch, so a first failure on a pull request can be checked against it.
190
+ "main_runs": len(main_win), "main_failures": sum(tid in failed_ids[id(r)] for r in main_win),
181
191
  "workflow": runs[(mine[-1]["run"], mine[-1]["att"])].get("path") if mine else None,
182
192
  "failures": fail_win[tid],
183
193
  "flake_events": len(ev_win), "flake_rate": round(len(ev_win) / len(win), 4) if win else 0.0,
@@ -190,6 +200,8 @@ def _tests(data: dict, runs: dict, final_att: dict, since: datetime, now: dateti
190
200
  # What kind of flake its usual failure looks like (timing, network, ...), only once it has flaked.
191
201
  "flake": kind_of(messages[tid].most_common(1)[0][0]) if messages[tid] and ev_all else None,
192
202
  "prs_affected": sorted({p for e in ev_win for p in e[2]}),
203
+ # Flakes from one pull request alone are that change's (a race it added), not a known flake.
204
+ "only_pr": _only_pr([e[2] for e in ev_win]),
193
205
  # Which report (an OS or version in a matrix) the window's flakes came from.
194
206
  "variants": dict(Counter(e[3].get("variant") for e in ev_win if e[3].get("variant")).most_common(5)),
195
207
  # The newest runs that prove it, so anyone can open them.
@@ -474,15 +486,18 @@ def analyze(data: dict, now: datetime, window_days: int = 30, default_branch: st
474
486
  slower = {"before_s": a, "after_s": b, "pct": round((b / a - 1) * 100)}
475
487
  lo, hi = wilson(len(ev_win), len(in_window))
476
488
  steps = Counter(e[2] for e in ev_win)
489
+ main_win = [j for r, j in in_window if default_branch is None or r.get("br") == default_branch]
477
490
  out_jobs.append({
478
491
  "workflow": path, "job": name, "runs": len(in_window),
492
+ "main_runs": len(main_win), "main_failures": sum(j["c"] in FAIL for j in main_win),
479
493
  "failures": sum(1 for _, j in in_window if j["c"] in FAIL),
480
494
  "flake_events": len(ev_win), "flake_rate": round(len(ev_win) / len(in_window), 4) if in_window else 0.0,
481
495
  "rate_low": round(lo, 4), "rate_high": round(hi, 4), "state": state,
482
496
  "last_flake": last_event.strftime("%Y-%m-%dT%H:%M:%SZ") if last_event else None,
483
497
  "top_step": steps.most_common(1)[0][0] if steps else None, "flake_steps": sorted(steps),
484
498
  "retry_minutes": round(sum(e[3] for e in ev_win), 1),
485
- "prs_affected": sorted({p for e in ev_win for p in e[4]}), "evidence": [e[5] for e in ev_all[-5:]],
499
+ "prs_affected": sorted({p for e in ev_win for p in e[4]}), "only_pr": _only_pr([e[4] for e in ev_win]),
500
+ "evidence": [e[5] for e in ev_all[-5:]],
486
501
  "median_s": _median([s for _, s in durations]), "p95_s": _pct([s for _, s in durations], 0.95),
487
502
  "slower": slower, "trend": _trend((_t(r["cr"]), s) for r, s in durations),
488
503
  # Each flake is placed at its run's start, so the run that flaked first counts after it, not before.
@@ -2,6 +2,7 @@ import json
2
2
  import re
3
3
  from collections import defaultdict
4
4
  from importlib import resources
5
+ from math import comb
5
6
  from datetime import timedelta
6
7
 
7
8
  from stackvitals.ci.analyze import FAIL, _downstream, _failed_step
@@ -157,6 +158,11 @@ class Index:
157
158
  self.jobs[(j["run"], j["att"])].append(j)
158
159
  for t in data.get("tests") or []:
159
160
  self.reports[(t["run"], t["att"])].append(t)
161
+ # Every attempt of each pull request's runs, to compare how often a check fails there with its rate on main.
162
+ self.runs, self.pr_attempts = runs, defaultdict(set)
163
+ for key, r in runs.items():
164
+ for p in r.get("pr") or ():
165
+ self.pr_attempts[p].add(key)
160
166
  on_main = lambda r: r is not None and r.get("ev") == "push" and default_branch and r.get("br") == default_branch # noqa: E731
161
167
  self.main_jobs, self.main_tests = defaultdict(list), defaultdict(list)
162
168
  for (rid, att), js in self.jobs.items():
@@ -304,6 +310,71 @@ def _sharpen(verdict: str, text: str | None, changed: list | None, name: str = "
304
310
  return verdict, sign, []
305
311
 
306
312
 
313
+ def _only_here(entry: dict | None, run: dict, verdict: str) -> str | None:
314
+ """A flaky-looking verdict whose flakes all came from this pull request: the change's own (a race it added), so it
315
+ reads "new". Returns the detail then, else None."""
316
+ if verdict not in ("known flaky", "flaked before", "maybe flaky") or not entry or not entry.get("flake_events"):
317
+ return None
318
+ if entry.get("only_pr") is None or entry["only_pr"] not in (run.get("pr") or ()):
319
+ return None
320
+ times = "once" if entry["flake_events"] == 1 else f"{entry['flake_events']} times"
321
+ return (f"flaked {times} in the last 30 days, all of them only on this pull request and nowhere else: likely a race "
322
+ "or order dependence this change added; look at the change before re-running")
323
+
324
+
325
+ # Main runs a check must have passed, all of them, for a first flaky-looking failure on a pull request to be worth a look.
326
+ STABLE_MAIN = 20
327
+ # A likely flake reads new when this pull request's failures would come from its main rate less than 5% of the time,
328
+ # with at least 2 failures and 10 main runs to judge by (one failure can't tell a 5% flake from a 40% one).
329
+ WORSE_P, WORSE_MIN_FAILS, WORSE_MIN_MAIN = 0.05, 2, 10
330
+
331
+
332
+ def _pr_record(index: Index, run: dict, path: str | None = None, job: str | None = None, suite: str | None = None,
333
+ test: str | None = None) -> tuple[int, int]:
334
+ """(failed, ran): how many attempts of this pull request's runs failed this job or test, out of those that ran it."""
335
+ keys = set().union(*(index.pr_attempts.get(p, set()) for p in run.get("pr") or ()))
336
+ failed = ran = 0
337
+ for key in keys:
338
+ if test:
339
+ reps = [r for r in index.reports.get(key, ()) if r["name"] == suite]
340
+ if reps:
341
+ ran += 1
342
+ failed += any(f[0] == test for r in reps for f in r["failed"])
343
+ elif index.runs[key].get("path") == path:
344
+ js = [j for j in index.jobs.get(key, ()) if j["n"] == job and (j["c"] in FAIL or j["c"] == "success")]
345
+ if js:
346
+ ran += 1
347
+ failed += any(j["c"] in FAIL for j in js)
348
+ return failed, ran
349
+
350
+
351
+ def _tail(k: int, n: int, p: float) -> float:
352
+ """The chance of k or more failures in n runs at failure rate p."""
353
+ return sum(comb(n, i) * p ** i * (1 - p) ** (n - i) for i in range(k, n + 1))
354
+
355
+
356
+ def _main_record(item: dict, entry: dict | None, here: tuple[int, int] | None = None) -> dict:
357
+ """The check's record on the default branch beside a flaky-looking verdict: a likely flake shows how often it fails
358
+ there; a "maybe flaky" check that passed every recent run there says so (still maybe flaky: never-flaked timeouts were
359
+ mostly real flakes on the labels), and a green re-run of it is flagged later."""
360
+ n = (entry or {}).get("main_runs") or 0
361
+ if item["verdict"] == "known flaky" and n:
362
+ # A change can make a flaky check fail far more often: its rate on main lets a reviewer compare.
363
+ bad = (entry or {}).get("main_failures") or 0
364
+ k, ran = here or (0, 0)
365
+ # The main rate is smoothed (one failure and one pass added) so a clean main never makes one failure damning.
366
+ if k >= WORSE_MIN_FAILS and n >= WORSE_MIN_MAIN and _tail(k, ran, (bad + 1) / (n + 2)) < WORSE_P:
367
+ return item | {"verdict": "new", "detail": f"flaky, but it failed {k} of {ran} runs on this pull request against "
368
+ f"{bad} of {n} ({bad / n:.0%}) on the default branch in the last 30 days: this change likely "
369
+ "made it fail more often; look at the change before re-running"}
370
+ return item | {"detail": item["detail"] + f"; on the default branch it failed {bad} of {n} runs ({bad / n:.0%}) "
371
+ "in the last 30 days: if it fails here more often than that, this change may have made it worse"}
372
+ if item["verdict"] != "maybe flaky" or n < STABLE_MAIN or (entry or {}).get("main_failures"):
373
+ return item
374
+ return item | {"stable_on_main": n, "detail": item["detail"] + f"; it passed all {n} runs on the default branch in the "
375
+ "last 30 days, so if a re-run passes, look for a race this change added"}
376
+
377
+
307
378
  def _detail(entry: dict | None, verdict: str, message: str | None = None, step: str | None = None,
308
379
  kind: str = "job", hint: str | None = None, sign: str | None = None, named: list | None = None,
309
380
  changed: list | None = None) -> str:
@@ -371,9 +442,13 @@ def classify_run(data: dict, result: dict, run_id: int, logs: dict | None = None
371
442
  verdict, sign, named = _sharpen(_test_verdict(entry), msg, changed, name=tid)
372
443
  hint = flaky_signature(msg) if verdict == "new" else None
373
444
  verdict = "maybe flaky" if hint else verdict
445
+ here = _only_here(entry, run, verdict)
446
+ verdict = "new" if here else verdict
374
447
  item = _with_kind({"kind": "test", "name": tid, "verdict": verdict,
375
- "detail": _detail(entry, verdict, msg, kind="test", hint=hint, sign=sign, named=named,
376
- changed=changed)}, msg)
448
+ "detail": here or _detail(entry, verdict, msg, kind="test", hint=hint, sign=sign, named=named,
449
+ changed=changed)}, msg)
450
+ item = _main_record(item, entry, _pr_record(index, run, suite=(entry or {}).get("suite"), test=tid)
451
+ if item["verdict"] == "known flaky" else None)
377
452
  before = on_main.get(tid) if verdict in ("new", "flaked before", "maybe flaky", "maybe yours") else None
378
453
  if before and _same_test_failure(f, before):
379
454
  item |= {"verdict": "already failing", "detail": f"failed the same way on the default branch {before['ago']} "
@@ -425,8 +500,12 @@ def classify_run(data: dict, result: dict, run_id: int, logs: dict | None = None
425
500
  continue
426
501
  hint = flaky_signature(mine) if verdict == "new" else None
427
502
  verdict = "maybe flaky" if hint else verdict
428
- item = _with_kind({**base, "verdict": verdict, "detail": _detail(entry, verdict, step=failing_step, hint=hint, sign=sign,
429
- named=named, changed=changed)}, mine)
503
+ here = _only_here(entry, run, verdict)
504
+ verdict = "new" if here else verdict
505
+ item = _with_kind({**base, "verdict": verdict, "detail": here or _detail(entry, verdict, step=failing_step, hint=hint,
506
+ sign=sign, named=named, changed=changed)}, mine)
507
+ item = _main_record(item, entry, _pr_record(index, run, path=run.get("path"), job=j["n"])
508
+ if item["verdict"] == "known flaky" else None)
430
509
  if before:
431
510
  item["detail"] += (f"; the default branch failed in this step {before['ago']} before this (run {before['run']})"
432
511
  + (", with a different error" if mine and theirs else ""))
@@ -527,6 +606,16 @@ def blamed_sha(body: str | None) -> str | None:
527
606
  return m[1] if m else None
528
607
 
529
608
 
609
+ def green_note(body: str | None, sha: str) -> str:
610
+ """Our comment once CI turns green: a warning, without blocking, when the failure it replaces on this same commit
611
+ looked like the change's own or failed a check main always passes (a race a change adds passes on a re-run)."""
612
+ if blamed_sha(body) != sha:
613
+ return f"{MARKER}\n### StackVitals: CI is passing now\nThe latest run passed."
614
+ return (f"{MARKER}\n### StackVitals: a re-run turned this green\nA failure on this commit looked like the change's own, or "
615
+ "failed a check that passes on the default branch every time, and passed when run again. That is how a race or "
616
+ "order dependence a change adds usually shows up: look at it before merging.\n<!-- stackvitals:blamed " + sha + " -->")
617
+
618
+
530
619
  def render_comment(items: list[dict], repo: str, sha: str | None = None) -> str:
531
620
  known = sum(i["verdict"] == "known flaky" for i in items)
532
621
  outside = sum(i["verdict"] == "outside failure" for i in items)
@@ -557,7 +646,7 @@ def render_comment(items: list[dict], repo: str, sha: str | None = None) -> str:
557
646
  if views:
558
647
  # A dash only ever sits inside a JSON string here, so escaping it keeps any "-->" from closing the note.
559
648
  folded.append("<!-- stackvitals:triage " + json.dumps(views, ensure_ascii=True).replace("-", "\\u002d") + " -->")
560
- if sha and re.fullmatch(r"[0-9a-f]{7,40}", sha) and any(i["verdict"] in BLAMED for i in items):
649
+ if sha and re.fullmatch(r"[0-9a-f]{7,40}", sha) and any(i["verdict"] in BLAMED or i.get("stable_on_main") for i in items):
561
650
  folded.append(f"<!-- stackvitals:blamed {sha} -->")
562
651
  return "\n".join([MARKER, "### StackVitals: about this CI failure", head, "",
563
652
  "| Verdict | What failed | Why |", "|---|---|---|", *rows, *more, "", *folded,
@@ -2,7 +2,7 @@
2
2
  "name": "stackvitals-flaky-tests",
3
3
  "displayName": "StackVitals flaky tests",
4
4
  "description": "Marks the tests your CI history shows are flaky or broken, read from the repo's stackvitals-data branch.",
5
- "version": "0.1.3",
5
+ "version": "0.1.4",
6
6
  "publisher": "stackvitals",
7
7
  "license": "Apache-2.0",
8
8
  "engines": { "vscode": "^1.80.0" },