stackvitals 0.1.2__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.
- stackvitals-0.1.4/.github/ISSUE_TEMPLATE/bug.yml +56 -0
- stackvitals-0.1.4/.github/ISSUE_TEMPLATE/config.yml +8 -0
- stackvitals-0.1.4/.github/ISSUE_TEMPLATE/feature.yml +39 -0
- stackvitals-0.1.4/.github/pull_request_template.md +15 -0
- stackvitals-0.1.4/.github/workflows/pages.yml +44 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/CHANGELOG.md +28 -0
- stackvitals-0.1.4/CODE_OF_CONDUCT.md +113 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/CONTRIBUTING.md +17 -3
- {stackvitals-0.1.2 → stackvitals-0.1.4}/PKG-INFO +7 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/README.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/registry.json +31 -3
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/summary.py +8 -6
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/accuracy.md +21 -22
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/app.md +2 -3
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/architecture.md +8 -5
- stackvitals-0.1.4/docs/assets/architecture-detailed-dark.png +0 -0
- stackvitals-0.1.4/docs/assets/architecture-detailed-light.png +0 -0
- stackvitals-0.1.4/docs/assets/architecture-overview-dark.png +0 -0
- stackvitals-0.1.4/docs/assets/architecture-overview-light.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/connectors.md +3 -4
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/coverage.md +2 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/dora-guide.md +4 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/faq.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/guides/maintainer.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/guides/manager.md +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/guides/platform.md +3 -3
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/install.md +22 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/limitations.md +9 -5
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/methods.md +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/modules.md +25 -4
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/privacy.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/quickstart.md +14 -5
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/release-checklist.md +29 -17
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/rules.md +24 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/scaling.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/settings.md +14 -14
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/threat-model.md +3 -2
- stackvitals-0.1.4/glama.json +4 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/llms.txt +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/pyproject.toml +8 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/scripts/sync_crawler.py +2 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/server.json +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/skills/stackvitals-ci/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/skills/stackvitals-community/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/skills/stackvitals-contribute/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/skills/stackvitals-delivery/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/skills/stackvitals-deps/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/skills/stackvitals-flow/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/skills/stackvitals-portal/SKILL.md +1 -1
- stackvitals-0.1.4/src/mergescout/__init__.py +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/__init__.py +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/action.py +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/analyze.py +16 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/feedback.py +94 -5
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/dataflow.py +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/installdoc.py +28 -5
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/schema.py +20 -4
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/editors/vscode/package.json +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/site.py +19 -2
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-GPVLJRZD.js → stackvitals-0.1.4/src/stackvitals/web/app/chunks/chunk-5TSTECYX.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-PABICGBL.js → stackvitals-0.1.4/src/stackvitals/web/app/chunks/chunk-7W2HH2SR.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-GQYFN4PE.js → stackvitals-0.1.4/src/stackvitals/web/app/chunks/chunk-AEVB6UDN.js +6 -6
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-JWBRT5E4.js → stackvitals-0.1.4/src/stackvitals/web/app/chunks/chunk-UWMBZCCA.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-OFWDU5XX.js → stackvitals-0.1.4/src/stackvitals/web/app/chunks/chunk-W6N6P4C7.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/more-5EXFWDGM.js → stackvitals-0.1.4/src/stackvitals/web/app/chunks/more-EEGUDTVE.js +1 -1
- stackvitals-0.1.4/src/stackvitals/web/app/demo/settings.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/help/accuracy.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/help/connectors.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/help/getting-started.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/help/index.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/help/modules.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/help/privacy-and-security.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/help/reference.json +1 -0
- stackvitals-0.1.4/src/stackvitals/web/app/main.css +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/main.js +1 -1
- stackvitals-0.1.4/src/stackvitals/web/app/pages/about.js +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/ci.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/community.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/deps.js +1 -1
- stackvitals-0.1.4/src/stackvitals/web/app/pages/help.js +6 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/portal.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/setup.js +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/welcome-sheet.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/welcome.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/site/index.html +5 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/site/site.css +6 -4
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_docs.py +2 -0
- stackvitals-0.1.4/tests/local/test_ci_pr_only_flakes.py +201 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_site_build.py +32 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/uv.lock +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/README.md +2 -1
- stackvitals-0.1.4/web/demo/settings.json +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/app/App.tsx +3 -3
- stackvitals-0.1.2/web/src/app/LogoPicker.tsx → stackvitals-0.1.4/web/src/app/Brand.tsx +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/workflow.ts +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/about.tsx +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/community.tsx +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/help/commands.tsx +3 -2
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/setup.tsx +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/styles/sheet.css +1 -3
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/styles/shell.css +0 -10
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/workflow.test.ts +2 -2
- stackvitals-0.1.2/docs/assets/architecture-detailed-dark.png +0 -0
- stackvitals-0.1.2/docs/assets/architecture-detailed-light.png +0 -0
- stackvitals-0.1.2/docs/assets/architecture-overview-dark.png +0 -0
- stackvitals-0.1.2/docs/assets/architecture-overview-light.png +0 -0
- stackvitals-0.1.2/src/mergescout/__init__.py +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/demo/settings.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/accuracy.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/connectors.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/getting-started.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/index.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/modules.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/privacy-and-security.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/reference.json +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/main.css +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/pages/about.js +0 -1
- stackvitals-0.1.2/src/stackvitals/web/app/pages/help.js +0 -6
- stackvitals-0.1.2/web/demo/settings.json +0 -1
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.env.example +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.gitattributes +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.github/ISSUE_TEMPLATE/benchmark.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.github/build-constraints.txt +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.github/workflows/daily.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.github/workflows/mcp-registry.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.github/workflows/prospective.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.github/workflows/release.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.github/workflows/tests.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/.gitignore +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/GOVERNANCE.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/LICENSE +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/NOTICE +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/SECURITY.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/action.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/LICENSE-DATA.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/adjudicate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/adjudicator-crosscheck.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/adoption/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/adoption/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/adoption/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/adoption/study.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/prepare.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/prepare2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/prompts.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/results2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/score2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/triage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/agents/triage_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/adjudication-detection.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/adoption-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/adoption.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/agreement-gemini-detection.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/codebook-detection.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/detection-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/detection-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/detection.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/labels-gemini-detection.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/replicate-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/ai/replicate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/audit-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/audit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/adjudication-main.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/adjudication-validation.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/affiliation-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/affiliation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-main-v2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-main.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-validation-v2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/agreement-gemini-validation.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/channels-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/channels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-main-v2.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-main.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-validation-v2.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/labels-gemini-validation.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/labels-main.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/labels-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/labels-validation.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/responses-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/responses-validation-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/responses.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/score_labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/triage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/community/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/contribute/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/contribute/frozen-manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/contribute/frozen.json.gz +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/contribute/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/contribute/prospective.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/crosscheck.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/baseline-after-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/baseline-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/baseline.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/coverage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/coverage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/exploits-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/exploits.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/incidents-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/incidents.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/lookalike-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/lookalike.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/release-signs-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/deps/release_signs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/devlake/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/devlake/head-to-head-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/devlake/pick.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/devlake/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/devlake/repos.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/devlake/run.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/devlake/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/adjudication-incidents.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/adjudication-sources-more.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/adjudication-sources.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/agreement-gemini-sources-more.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/agreement-gemini-sources.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/devlake-configured-more-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/devlake-configured-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/devlake_configured.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/environments-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/environments.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/incidents-codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/incidents-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/incidents-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/incidents.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/labels-gemini-incidents.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/labels-gemini-sources-more.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/labels-gemini-sources.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/linkage-more-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/linkage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/linkage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/sources-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/sources-more-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/sources-more-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/sources-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/sources.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/spread-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/dora/spread.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/fair.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/features/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/features/api_use.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/features/branch_growth.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/features/catalog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/features/reports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/features/scorecard.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/features/scorecard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/finalise.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-flaky.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-fresh.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-heldout.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/adjudication-masking.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-flaky-v2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-flaky.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-fresh.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-heldout.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/agreement-gemini-masking.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/already-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/already.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/began-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/began.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/card.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/heldout-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/heldout-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/heldout.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/items.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/kinds-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-flaky-v2.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-flaky.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-fresh.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-heldout.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/labels-gemini-masking.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/masking-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/masking-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/masking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/maybe-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/maybe.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/natural-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/natural.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/outside-fresh-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/outside-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/outside.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/outside_fresh.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/pr-details-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/pr_details.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/safe-check-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/safe-rule-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/safe_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/safe_rule.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/views.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/flaky/wide.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/impact/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/impact/collect_reports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/impact/find_report_repos.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/impact/replay-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/impact/replay_tia.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/impact/search.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/impact/totals.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/label-sensitivity.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/labeller.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/middleware/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/middleware/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/middleware/results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/middleware/run.sh +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/middleware/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/panel-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/panel.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/platform/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/platform/busy-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/platform/busy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/portal/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/portal/scale-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/portal/scale.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/portal/speed-after.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/portal/speed-before.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/portal/speed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/replay/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/replay/adjudication-replay.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/replay/agreement-gemini-replay.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/replay/labels-gemini-replay.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/replay/replay-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/replay/replay-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/replay/replay.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/reproduce.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/scorecard/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/scorecard/results-before.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/scorecard/results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/scorecard/run.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/sensitivity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/team/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/team/prospective-frozen.json.gz +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/team/prospective-manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/team/prospective.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/team/reviewers-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/team/reviewers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-2week-before-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-2week-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-before-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/nulls.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/shrinkage-groups-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/shrinkage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/bench/accuracy/uncertainty/shrinkage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/deploy/crawler/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/deploy/crawler/gitignore +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/deploy/crawler/workflows/bench.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/deploy/crawler/workflows/check.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/deploy/crawler/workflows/crawl.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/deploy/crawler/workflows/discover.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/deploy/crawler/workflows/keepalive.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/assets/divider-dark.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/assets/divider-light.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/assets/lockup-dark.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/assets/lockup-light.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/assets/stackvitals-video.avif +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/assets/stackvitals-video.gif +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/assets/stackvitals-video.mp4 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/chaoss.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/enterprise.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/roadmap.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/docs/triage.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/scripts/prelaunch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/archive/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/archive/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/archive/convert.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/archive/events.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/archive/manifest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/archive/stream.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/ci.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/deploys.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/matched.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/prior.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/shared.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/bench/stars.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/config.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/chain.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/fetch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/runner.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/seed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/state.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/crawl/writer.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/discover/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/discover/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/discover/sweep.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/github/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/github/graphql.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/github/identities.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/github/releases.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/mcp_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/measure/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/measure/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/measure/api_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/measure/count_repos.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/measure/jsonl.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/measure/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/measure/sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/setup_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/bump_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/bumps.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/community_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/delivery_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/deps_map.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/deps_trends.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/exploits.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/flow_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/issues.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/osv.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/owners_watch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/repo_stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/rules.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/silver.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/top_packages.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/triage_math.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/signals/walls.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/snapshot/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/snapshot/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/snapshot/build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/snapshot/publish.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/snapshot/schema.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/snapshot/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/store/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/store/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/store/sync.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/timeutil.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/tool/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/tool/action_pack.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/tool/live.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/tool/queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/tool/refs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/tool/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/mergescout/tool/tracking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/api.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/automation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/burnin.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/coverage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/fingerprint.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/gitlab.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/gitlab_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/impact.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/investigate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/monitors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/quarantine_runtime.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/retry.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/selfheal.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/shards.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/share.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/testreports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/tickets.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/track_record.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/triggers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/upload.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/ci/validate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/codeowners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/affiliation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/chaoss.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/context.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/community/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/ai_spend.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/base.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/copilot.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/discord.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/discourse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/incident_io.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/jira.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/linear.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/pagerduty.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/slack.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/sonar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/tracker.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/connectors/writeback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/contribute/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/contribute/brief.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/contribute/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/actors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/agent_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/agreements.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/ai_outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/alerts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/appdata.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/bucket.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/bugs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/calendar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/capex.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/change_risk.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/changes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/chat.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/config.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/delivery_peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/delivery_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/deliverycli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/devlake_dora.sql +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/digest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/explaincli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/explore.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/exportcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/findings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/health.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/initcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/insights.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/insightscli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/investment.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/joins.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/llmsdoc.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/merge_queue.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/metrics.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/model.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/projectcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/propose.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/pulse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/recorded.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/releases.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/resync.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/services.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/settings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/sqlcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/summary.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/time.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/tomledit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/uicli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/webapp.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/what_changed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/core/workspace.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/actions_vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/dossier.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/fixplan.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/guarddog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/hygiene.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/imports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/lockfiles.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/lookalike.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/reach.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/release.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/runtimes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/supply.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/deps/vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/editors/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/editors/vscode/extension.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/editors/vscode/marks.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/automate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/code_hosts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/gitlab_mr.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/knowledge.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/preflight.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/rules.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/survival.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/flow/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/mcp_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/batch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/campaigns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/catalog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/descriptor.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/github.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/golden.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/history.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/inventory.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/pages.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/rollup.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/portal/scorecard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/security/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/security/probes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/security/repo_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/security/workflows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/shell.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/LICENSES.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/boot.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/brand/cube-128.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/brand/cube-256.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/brand/cube-64.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/AddRepo-KRPZXWCY.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/SetupRunning-XWFQAKRZ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/accuracy-data-OQTDXI7Y.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/agents-data-BAL6QAOF.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-24LFKFZ6.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-3IXWEOIJ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-3ROQFHPV.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-45PGAQRO.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4H53OYLG.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4LUI7O5P.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4SQPQ5TB.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-4WKQTWUC.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-576YHDEK.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-6RLVD2DT.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-763NH7PP.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-76WAVKUG.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-7II2BD5F.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-ASYNLVOP.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-CTKDYZMG.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-CVB26NMC.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-DLORG2IY.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-FBGIG7YF.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-G7NGB5UX.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-GT4EAKAO.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-IYMBFPCV.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-LAAGCPU3.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-P5TXDD45.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-RPXHAG6F.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-S2ZBMEVA.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-S654BBEP.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-SACCDA46.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-T7QVTNXF.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-TCPSLBAB.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-TO4VVRZ7.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-VQ5YXO54.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-VWKSMFWJ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/chunk-YTANGYYH.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/connect-KONYWYTT.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/connections-data-2DYS4UVW.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/more-PC6FVS3P.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/more-RCIVCUDE.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/more-ZKKRY6NO.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/sealbox-35YL4EUH.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/session-DYYTOE2K.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/settingsApply-2HRJEZYM.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/settingsReview-GX2FZQ4M.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/chunks/uPlot.esm-OIWT3AHJ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/ci/impact.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/ci/quarantine.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/ci/tickets.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/alerts.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/app.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/community.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/connectors.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/data.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/decisions.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/delivery.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/deps.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/flow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/health.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/insights.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/pulse.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/security.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/prs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/summary/tests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/supply.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/mobile/vulns.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/alerts.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/app.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/community.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/connectors.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/data.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/decisions.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/delivery.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/deps.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/flow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/health.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/insights.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/pulse.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/security.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/prs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/summary/tests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/supply.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/payments-api/vulns.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/portal.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/alerts.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/app.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/community.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/connectors.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/data.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/decisions.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/delivery.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/deps.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/flow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/health.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/insights.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/pulse.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/security.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/prs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/summary/tests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/supply.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/demo/web-app/vulns.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-mono-400.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-sans-400.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-sans-600.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/fonts/plex-sans-condensed-700.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/about.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/activity.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/activity.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/agents.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/agents.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/ci.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/community.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/connections.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/connections.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/delivery.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/delivery.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/deps.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/explore.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/explore.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/health.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/health.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/help.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/insights.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/insights.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/investment.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/investment.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/overview.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/overview.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/portal.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/prs.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/prs.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/settings.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/settings.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/setup.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/standing.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/pages/standing.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/app/settings-workflow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/index.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/site/integrations.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/src/stackvitals/web/site/setup.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/templates/gitlab/stackvitals.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/ci_fake.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/conftest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/fixtures/issue_page.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/fixtures/osv-scan.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/fixtures/pr_page.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/fixtures/repo_meta.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_actions_vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_adjudicate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_adoption_study.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_agent_leaderboard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_agent_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_agreement_nudges.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ai_markers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ai_matched.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ai_outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ai_spend.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_api_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_app_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_archive_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_files.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_guarddog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_mcp_messages.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_sql.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_uicli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_audit_workflows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_base_images.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_began_after.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_bench_by_repo.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_bench_deploys.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_bench_report_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_bench_stars.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_branch_growth.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_bucket.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_bug_backlog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_capex.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_catalog_descriptor.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_change_risk.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_changes_14d.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_chat.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_action_pr.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_already_failing.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_analyze_tests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_artifacts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_automation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_began.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_bench_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_burnin.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_comment_shape.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_depth.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_feedback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_feedback_all.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_fingerprint.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_gitlab.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_groups.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_impact.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_issue_lifecycle.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_masking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_maybe_flaky.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_mcp.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_monitors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_outside.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_outside_ci_edit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_pr_details.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_push_evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_quarantine_mark.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_report_formats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_retry.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_review_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_safe_rule.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_settings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_surfaces_m3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_test_verdict.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_testreports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_triggers_script.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_upload.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_verdict_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_ci_webhook_formats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_code_hosts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_code_survival.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_affiliation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_context.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_dependency.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_discussions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_fetch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_community_stated.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_config.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connector_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connector_framework.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connector_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connectors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connectors_chat.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connectors_discourse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connectors_epics.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_connectors_writeback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_contribute_brief.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_contribute_prospective.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_contribute_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_convert.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_actors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_agreements.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_alerts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_appdata.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_delivery_peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_delivery_surfaces.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_digest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_digest_step.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_explore.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_findings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_findings_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_insights.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_insights_surfaces.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_metrics.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_model.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_otel.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_propose.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_pulse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_recovery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_request_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_requests_wording.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_roles_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_runner.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_schema.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_services.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_settings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_sql_org.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_summary.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_summary_churn.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_tomledit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_ui.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_webapp.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_webapp_version.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_core_workspace.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_cost_guard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_count_repos.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_coverage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_fetch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_runner.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_seed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_state.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_crawl_writer.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_delivery_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_delivery_deploy_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_delivery_rules_m2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_bumps.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_crawl.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_exploits.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_fixed_versions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_map.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_osv.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_top.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_trend_quiet.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_trends.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dep_watch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deploy_attempts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deploy_ranges.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deployment_history.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deployment_list.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_dossier.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_hygiene.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_imports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_lookalike.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_paths.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_policy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_reach.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_release.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_review_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_runtimes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_deps_vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_devlake_cicd.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dora_evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dora_proof.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dora_rows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_dora_weeks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_editor_marks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_enterprise_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_events.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_explain_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_fair.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_fixplan.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flake_code_kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flaky_natural.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flaky_sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flaky_score_fair.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flaky_test_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flaky_tickets.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_automate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_bench_pipeline.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_collect_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_definitions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_m2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_preflight.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_round2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_round3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_windows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_flow_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_fork_reports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_gitlab_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_gitlab_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_graphql.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_health.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_identities.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_identity_everywhere.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_identity_match.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_init_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_insights_chains.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_investment.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_jira_fields.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_knowledge_names.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_labeller.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_llms_txt.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_local_run.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_m1_small_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_masking_card.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_mcp_core.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_mcp_provenance.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_merge_queue.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_mergescout_token.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_modular_install.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_nulls_power.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_numbers_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_odds_backtest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_outside_fresh.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_pagers_copilot.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_pages_deploy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_parsing_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_peer_fit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_polish_m1.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_polish_m2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_polish_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_app_facts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_campaigns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_catalog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_golden.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_handcheck.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_history.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_html.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_m1.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_nudges.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_reviews.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_rollup.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_portal_scorecard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_pr_exclusions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_pr_licences.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_pr_rules.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_prelaunch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_production_branches.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_project_dora.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_pulse_trend.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_quarantine_expiry.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_quarantine_runners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_quarantine_runtime.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_recorded.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_relay_and_polish.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_release_quality.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_releases.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_releases_ratelimit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_report_validate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_response_times.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_result_quality.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_resync.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_review_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_review_fixes_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_review_fixes_p3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_review_fixes_requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_review_m3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_schema_sections.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_scorecard_agreement.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_security_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_selfheal.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_services.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_setup_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_setup_template.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_shared_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_shell_app_link.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_shrinkage_groups.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_signals_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_signals_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_signals_identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_signals_issues.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_signals_labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_signals_repo_stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_signals_walls.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_snapshot_build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_snapshot_publish.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_sonar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_state_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_store_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_stream.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_suite_packaging.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_supply.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_sweep.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_team_dora.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_test_variants.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tool_action_pack.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tool_live.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tool_queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tool_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tool_speed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tool_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tool_tracking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_tracker.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_triage_math.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_triage_pipeline.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_uncertainty.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_verdict_feedback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_verdict_strict.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_vulns_dev_only.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_vulns_ignores.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_vulns_inputs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_web_build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_web_next_setup.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_web_replay_parity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_what_changed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/local/test_work_calendar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/signals_data.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_accuracy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_ci.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_community.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_connectors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_contribute.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_core.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_crawl.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_deps.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_discover.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_github.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_insights.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_portal.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_signals.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_snapshot.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_surfaces.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_team.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_tool.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/test_flow_web.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/tests/tool_data.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/brand/cube-128.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/brand/cube-256.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/brand/cube-64.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/build.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/demo/extra-ci.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/demo/extra-delivery.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/demo/extra-deps.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/demo/extra-people.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/demo/extra-portal.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/demo/source.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/defaults.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/fixtures.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/flows.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/links.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/playwright.config.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/serve.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/sweep.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/e2e/welcome.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/index.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/package-lock.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/package.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/scripts/docs.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/app/AddRepo.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/app/Profile.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/app/jump.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/app/router.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/app/routes.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/boot.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/brand/Logo.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/charts/BarChart.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/charts/MetricHero.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/charts/ScrubChart.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/charts/Sparkline.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/charts/metric.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/files.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/format.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/repos.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/requestIssue.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/source.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/store.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/theme.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/types.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/data/write.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/Decide.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/Evidence.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/Health.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/SetupRunning.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/agents-data.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/brand-logos.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/connect.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/connect.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/connectRepos.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/connections-data.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/connstatus.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/helpLink.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/markdown.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/sealbox.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/sealedbox.d.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/secrets.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/settingsApply.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/settingsModel.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/settingsPending.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/settingsReplay.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/settingsReview.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/settingsToml.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/text-css.d.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/features/vitals.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/caps.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/client.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/config.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/detect.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/diff.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/links.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/mine.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/names.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/oauth.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/open.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/session.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/setup.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/signout.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/token.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/github/watch.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/main.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/about/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/about-accuracy.d.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/about.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/accuracy-data.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/activity.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/activity.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/agents/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/agents.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/agents.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/ci/more.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/ci/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/ci/setup.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/ci/workflowgen.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/ci.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/ci.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/community/command.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/community/report.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/community.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/connections.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/connections.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/delivery/blocks.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/delivery/blocks.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/delivery/more.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/delivery/sources.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/delivery.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/delivery.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps/blocks.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps/blocks.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps/lookup.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps/scanning.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps/security.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps/tools.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/deps.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/explore/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/explore/query.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/explore.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/explore.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/health.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/health.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/help.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/help.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/insights/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/insights.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/insights.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/investment.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/investment.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/overview/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/overview.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/overview.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal/access.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal/panel.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal/panel.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal/setup.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal/tools.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/portal.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/prs/more.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/prs/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/prs/preflight.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/prs.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/prs.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/settings.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/settings.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/setup.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/standing.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/standing.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/welcome-sheet.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/welcome-sheet.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/pages/welcome.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/styles/base.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/styles/charts.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/styles/components.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/styles/index.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/styles/tokens.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/Button.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/Page.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/Popover.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/Portal.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/Sheet.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/Table.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/bits.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/controls.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/icons.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/motion.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/src/ui/prefill.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/ciworkflow.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/client.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/connstatus.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/depstools.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/explorequery.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/fake.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/links.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/load.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/markdown.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/portalsetup.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/preflight.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/run.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/safety.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/secrets.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/settings.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/test/setup.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/web/tsconfig.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/package.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/relay/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/relay/package.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/relay/src/index.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/relay/test/index.test.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/relay/wrangler.toml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/src/index.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.4}/worker/test/index.test.mjs +0 -0
- {stackvitals-0.1.2 → 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,33 @@
|
|
|
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
|
+
|
|
19
|
+
## 0.1.3 (2026-10-31)
|
|
20
|
+
|
|
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
|
|
22
|
+
one-command setup.
|
|
23
|
+
- The app's Setup page and Help give `stackvitals init owner/repo` as the terminal way to set a repo up.
|
|
24
|
+
- PyPI lists the project's links (home, docs, source, issues, changelog).
|
|
25
|
+
- Docs: the install page says how to get the command; guides, quickstart and modules lead with `stackvitals init`;
|
|
26
|
+
contradictions fixed (golden paths, GitLab, GitHub Enterprise Server, sign-in, private repos' CI runs, cycle-time
|
|
27
|
+
phases); the PR verdicts are a table; the settings page says which switches are on by default; the architecture
|
|
28
|
+
diagrams list every trigger and show Portal running from the org's repo; a release checklist with the real steps.
|
|
29
|
+
- A code of conduct (Contributor Covenant 2.1), with reports through the repository's private reporting form.
|
|
30
|
+
|
|
3
31
|
## 0.1.2 (2026-10-31)
|
|
4
32
|
|
|
5
33
|
- `stackvitals init owner/repo` sets StackVitals up in one command: commits the workflow (or opens a pull request), follows
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience
|
|
6
|
+
for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
7
|
+
identity and expression, level of experience, education, socio-economic status, nationality, personal appearance,
|
|
8
|
+
race, caste, color, religion, or sexual identity and orientation.
|
|
9
|
+
|
|
10
|
+
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy
|
|
11
|
+
community.
|
|
12
|
+
|
|
13
|
+
## Our Standards
|
|
14
|
+
|
|
15
|
+
Examples of behavior that contributes to a positive environment for our community include:
|
|
16
|
+
|
|
17
|
+
* Demonstrating empathy and kindness toward other people
|
|
18
|
+
* Being respectful of differing opinions, viewpoints, and experiences
|
|
19
|
+
* Giving and gracefully accepting constructive feedback
|
|
20
|
+
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
|
21
|
+
* Focusing on what is best not just for us as individuals, but for the overall community
|
|
22
|
+
|
|
23
|
+
Examples of unacceptable behavior include:
|
|
24
|
+
|
|
25
|
+
* The use of sexualized language or imagery, and sexual attention or advances of any kind
|
|
26
|
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
27
|
+
* Public or private harassment
|
|
28
|
+
* Publishing others' private information, such as a physical or email address, without their explicit permission
|
|
29
|
+
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
|
30
|
+
|
|
31
|
+
## Enforcement Responsibilities
|
|
32
|
+
|
|
33
|
+
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take
|
|
34
|
+
appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening,
|
|
35
|
+
offensive, or harmful.
|
|
36
|
+
|
|
37
|
+
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
|
|
38
|
+
issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for
|
|
39
|
+
moderation decisions when appropriate.
|
|
40
|
+
|
|
41
|
+
## Scope
|
|
42
|
+
|
|
43
|
+
This Code of Conduct applies within all community spaces, and also applies when an individual is officially
|
|
44
|
+
representing the community in public spaces. Examples of representing our community include using an official e-mail
|
|
45
|
+
address, posting via an official social media account, or acting as an appointed representative at an online or
|
|
46
|
+
offline event.
|
|
47
|
+
|
|
48
|
+
## Enforcement
|
|
49
|
+
|
|
50
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders
|
|
51
|
+
responsible for enforcement privately, through GitHub's private reporting form for this repository: open the
|
|
52
|
+
**Security** tab of [stackvitals/stackvitals](https://github.com/stackvitals/stackvitals/security), choose **Report a
|
|
53
|
+
vulnerability**, and start the title with "Conduct:". Only the maintainers can read it. You can also use GitHub's
|
|
54
|
+
[Report content](https://docs.github.com/en/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam)
|
|
55
|
+
on any comment, issue or pull request. All complaints will be reviewed and investigated promptly and fairly.
|
|
56
|
+
|
|
57
|
+
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
|
58
|
+
|
|
59
|
+
## Enforcement Guidelines
|
|
60
|
+
|
|
61
|
+
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they
|
|
62
|
+
deem in violation of this Code of Conduct:
|
|
63
|
+
|
|
64
|
+
### 1. Correction
|
|
65
|
+
|
|
66
|
+
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the
|
|
67
|
+
community.
|
|
68
|
+
|
|
69
|
+
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the
|
|
70
|
+
violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
|
|
71
|
+
|
|
72
|
+
### 2. Warning
|
|
73
|
+
|
|
74
|
+
**Community Impact**: A violation through a single incident or series of actions.
|
|
75
|
+
|
|
76
|
+
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved,
|
|
77
|
+
including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This
|
|
78
|
+
includes avoiding interactions in community spaces as well as external channels like social media. Violating these
|
|
79
|
+
terms may lead to a temporary or permanent ban.
|
|
80
|
+
|
|
81
|
+
### 3. Temporary Ban
|
|
82
|
+
|
|
83
|
+
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
|
|
84
|
+
|
|
85
|
+
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a
|
|
86
|
+
specified period of time. No public or private interaction with the people involved, including unsolicited
|
|
87
|
+
interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to
|
|
88
|
+
a permanent ban.
|
|
89
|
+
|
|
90
|
+
### 4. Permanent Ban
|
|
91
|
+
|
|
92
|
+
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate
|
|
93
|
+
behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
|
|
94
|
+
|
|
95
|
+
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
|
96
|
+
|
|
97
|
+
## Attribution
|
|
98
|
+
|
|
99
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at
|
|
100
|
+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
|
101
|
+
|
|
102
|
+
Community Impact Guidelines were inspired by
|
|
103
|
+
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
|
104
|
+
|
|
105
|
+
For answers to common questions about this code of conduct, see the FAQ at
|
|
106
|
+
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
|
107
|
+
[https://www.contributor-covenant.org/translations][translations].
|
|
108
|
+
|
|
109
|
+
[homepage]: https://www.contributor-covenant.org
|
|
110
|
+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
|
111
|
+
[Mozilla CoC]: https://github.com/mozilla/diversity
|
|
112
|
+
[FAQ]: https://www.contributor-covenant.org/faq
|
|
113
|
+
[translations]: https://www.contributor-covenant.org/translations
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Contributing
|
|
2
2
|
|
|
3
3
|
Thanks for helping. StackVitals is small enough that one person can read any part of it in an afternoon; please
|
|
4
|
-
keep it that way.
|
|
4
|
+
keep it that way. Everyone taking part follows the [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
5
5
|
|
|
6
6
|
## Set up
|
|
7
7
|
|
|
@@ -15,9 +15,23 @@ uv run --extra dev pytest tests -q
|
|
|
15
15
|
|
|
16
16
|
The tests need no token and no network. [docs/architecture.md](docs/architecture.md) explains how the parts fit.
|
|
17
17
|
|
|
18
|
+
**The web app** is TypeScript in `web/`, built into `src/stackvitals/web/app/`, and the built files are committed
|
|
19
|
+
(they ship in the package). After changing it:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
cd web
|
|
23
|
+
npm ci
|
|
24
|
+
npm run build
|
|
25
|
+
npm test
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Commit `web/` and the rebuilt `src/stackvitals/web/` together; a test fails when the build is out of date.
|
|
29
|
+
[web/README.md](web/README.md) explains its layout and the browser tests (`npm run e2e`).
|
|
30
|
+
|
|
18
31
|
## What a good change looks like
|
|
19
32
|
|
|
20
|
-
- **A bug:** a failing test first,
|
|
33
|
+
- **A bug:** a failing test first, then the fix. Task-sized tests go in `tests/local/`; a test that guards a real
|
|
34
|
+
bug or finding for a whole flow goes in the `tests/test_flow_<area>.py` file for that area.
|
|
21
35
|
- **A new rule or a changed one** (anything that decides a verdict or a number people see): add or update its entry in
|
|
22
36
|
[bench/accuracy/registry.json](bench/accuracy/registry.json) with what it was tuned on, what it was checked on and
|
|
23
37
|
the bar, check it on public data the rule never saw, then run `python bench/accuracy/summary.py` to regenerate
|
|
@@ -34,7 +48,7 @@ The tests need no token and no network. [docs/architecture.md](docs/architecture
|
|
|
34
48
|
- Code reads like the code around it. Comments are short, plain and say why, not what.
|
|
35
49
|
- Copy people see is plain English: what happened, how many, since when, and what to do. No unexplained jargon, and
|
|
36
50
|
never a number without its sample size.
|
|
37
|
-
-
|
|
51
|
+
- Each test says what real bug or finding it guards; the `tests/test_flow_*.py` files stay few and test whole flows.
|
|
38
52
|
|
|
39
53
|
## Pull requests
|
|
40
54
|
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: stackvitals
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Free, open-source developer suite: CI health, team flow, dependencies, community, and MergeScout for contributors.
|
|
5
|
+
Project-URL: Homepage, https://github.com/stackvitals/stackvitals
|
|
6
|
+
Project-URL: Documentation, https://github.com/stackvitals/stackvitals/tree/main/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/stackvitals/stackvitals
|
|
8
|
+
Project-URL: Issues, https://github.com/stackvitals/stackvitals/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/stackvitals/stackvitals/blob/main/CHANGELOG.md
|
|
5
10
|
License-Expression: Apache-2.0
|
|
6
11
|
License-File: LICENSE
|
|
7
12
|
License-File: NOTICE
|
|
@@ -237,4 +242,4 @@ model families (Claude and Gemini); no person has audited the labels.
|
|
|
237
242
|
- **Before you rely on it:** [what each rule does](docs/rules.md), [known limitations](docs/limitations.md),
|
|
238
243
|
[what leaves your repo](docs/privacy.md), [threat model](docs/threat-model.md), [enterprise controls](docs/enterprise.md).
|
|
239
244
|
- **More:** [FAQ](docs/faq.md), [how it works](docs/architecture.md), [roadmap](docs/roadmap.md),
|
|
240
|
-
[contributing](CONTRIBUTING.md), [governance](GOVERNANCE.md), [security](SECURITY.md).
|
|
245
|
+
[contributing](CONTRIBUTING.md), [code of conduct](CODE_OF_CONDUCT.md), [governance](GOVERNANCE.md), [security](SECURITY.md).
|
|
@@ -195,4 +195,4 @@ model families (Claude and Gemini); no person has audited the labels.
|
|
|
195
195
|
- **Before you rely on it:** [what each rule does](docs/rules.md), [known limitations](docs/limitations.md),
|
|
196
196
|
[what leaves your repo](docs/privacy.md), [threat model](docs/threat-model.md), [enterprise controls](docs/enterprise.md).
|
|
197
197
|
- **More:** [FAQ](docs/faq.md), [how it works](docs/architecture.md), [roadmap](docs/roadmap.md),
|
|
198
|
-
[contributing](CONTRIBUTING.md), [governance](GOVERNANCE.md), [security](SECURITY.md).
|
|
198
|
+
[contributing](CONTRIBUTING.md), [code of conduct](CODE_OF_CONDUCT.md), [governance](GOVERNANCE.md), [security](SECURITY.md).
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"date": "2026-10-23",
|
|
49
|
-
"from": "known
|
|
49
|
+
"from": "a known flake passed the verdict check",
|
|
50
50
|
"why": "13 of 81 held-out safe calls were the change's own failure; matching past flakes' errors didn't separate them",
|
|
51
51
|
"effect": "known flaky still reads 'likely a flake, re-run it', but the verdict check passes only once CI is green"
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
"date": "2026-10-23",
|
|
55
|
-
"from": "known
|
|
55
|
+
"from": "a known flake read 'likely a flake, re-run it'",
|
|
56
56
|
"why": "in the agent head-to-head a smaller model trusted it on 2 failures the change caused",
|
|
57
|
-
"effect": "
|
|
57
|
+
"effect": "it asks to check the error isn't from the change before re-running; those 2 were then answered right"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
"date": "2026-10-28",
|
|
@@ -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",
|
|
@@ -312,8 +312,8 @@ def _doc(cs: list[dict], r: dict) -> str:
|
|
|
312
312
|
f"- Each adjudicator mostly sided with its own family: Claude's {r['cross']['claude_adjudicator_sided_with_claude']} times, "
|
|
313
313
|
f"Gemini's {r['cross']['gemini_adjudicator_sided_with_gemini']} times.",
|
|
314
314
|
"- So each card shows its headline on each labeller's labels as well as the adjudicated ones.",
|
|
315
|
-
"- A check
|
|
316
|
-
"gemini-3.5-flash, Anthropic Claude Sonnet and Haiku)
|
|
315
|
+
"- A second check: six models from three families (OpenAI gpt-5.4-mini and gpt-5-mini, Google gemini-3.8-flash and "
|
|
316
|
+
"gemini-3.5-flash, Anthropic Claude Sonnet and Haiku) each answered the same plain-language questions alone, on "
|
|
317
317
|
f"{r['panel6']['items']} labelled items (the CI and reply items drawn first from those the first two labellers "
|
|
318
318
|
"disagreed on). Where a majority formed, it matched the labels on CI causes "
|
|
319
319
|
f"{panel('ci')}, the release behind a bug {panel('incident')}, how releases reach users {panel('deploy')}, "
|
|
@@ -325,10 +325,12 @@ def _doc(cs: list[dict], r: dict) -> str:
|
|
|
325
325
|
"- No person has audited the labels yet.", "",
|
|
326
326
|
"**How sure.** A rule is an *early observation* when its check rests on few cases; its numbers are a direction,",
|
|
327
327
|
"not a settled rate: " + "; ".join(f"`{x['id']}` ({x['strength_why']})" for x in r["registry"]["rules"]
|
|
328
|
-
if x.get("strength") == "early observation") + ". A rule
|
|
328
|
+
if x.get("strength") == "early observation") + ". 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% "
|
|
329
|
+
"of the failures it calls flaky were really caused by the change (*masking*: a real failure hidden as a flake). "
|
|
330
|
+
"A rule whose bar *failed* is kept "
|
|
329
331
|
"only where failing costs nothing it promised: " + "; ".join(f"`{x['id']}` ({x['strength_why']})" for x in r["registry"]["rules"]
|
|
330
|
-
if x.get("strength") == "bar failed") + ". The rest are validated on"
|
|
331
|
-
"
|
|
332
|
+
if x.get("strength") == "bar failed") + ". The rest are validated: checked against their bar, on held-out data where the rule has one ([rules.md](rules.md) "
|
|
333
|
+
"says which).", "",
|
|
332
334
|
"**Reproduce a number.** `python bench/accuracy/reproduce.py list` names the command behind every result file;",
|
|
333
335
|
"`reproduce.py check <card>` re-scores it and says whether the numbers match. Scoring reads the evidence each",
|
|
334
336
|
"card was labelled from (the `.work` folders: CI histories, crawl records, logs), which is too large and holds",
|
|
@@ -343,7 +345,7 @@ def _doc(cs: list[dict], r: dict) -> str:
|
|
|
343
345
|
"[registry.json](../bench/accuracy/registry.json).", ""]
|
|
344
346
|
for rule in r["registry"]["rules"]:
|
|
345
347
|
for v in rule.get("revisions") or []:
|
|
346
|
-
out.append(f"- {v['date']}, `{rule['id']}`:
|
|
348
|
+
out.append(f"- {v['date']}, `{rule['id']}`: before, {v['from']}; {v['why']}; after, {v['effect']}.")
|
|
347
349
|
return "\n".join(out) + "\n"
|
|
348
350
|
|
|
349
351
|
|
|
@@ -13,12 +13,11 @@ page is built from those cards' result files by `bench/accuracy/summary.py`; the
|
|
|
13
13
|
- That third reading was Claude's. Gemini, adjudicating a sample of the same disputes, agreed with it on 15 of 40.
|
|
14
14
|
- Each adjudicator mostly sided with its own family: Claude's 33 times, Gemini's 23 times.
|
|
15
15
|
- So each card shows its headline on each labeller's labels as well as the adjudicated ones.
|
|
16
|
-
- A check
|
|
16
|
+
- A second check: six models from three families (OpenAI gpt-5.4-mini and gpt-5-mini, Google gemini-3.8-flash and gemini-3.5-flash, Anthropic Claude Sonnet and Haiku) each answered the same plain-language questions alone, on 120 labelled items (the CI and reply items drawn first from those the first two labellers disagreed on). Where a majority formed, it matched the labels on CI causes 21 of the 24 it decided (40 asked), the release behind a bug 11 of the 12 it decided (15 asked), how releases reach users 9 of the 14 it decided (15 asked), but issue replies only 11 of the 24 it decided (30 asked): it called most replies the labels call drive-bys or project answers helpful answers from other users, so the Community card's reply labels are the least settled. On the replay's disputed items it reached no majority on 11 of 20.
|
|
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 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 on
|
|
21
|
-
held-out data ([rules.md](rules.md)).
|
|
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).
|
|
22
21
|
|
|
23
22
|
**Reproduce a number.** `python bench/accuracy/reproduce.py list` names the command behind every result file;
|
|
24
23
|
`reproduce.py check <card>` re-scores it and says whether the numbers match. Scoring reads the evidence each
|
|
@@ -127,22 +126,22 @@ Weak spot: Questions beyond GitHub's 90-day log retention, where kept history ma
|
|
|
127
126
|
|
|
128
127
|
Every rule a number rests on, with each revision and why, is in [registry.json](../bench/accuracy/registry.json).
|
|
129
128
|
|
|
130
|
-
- 2026-10-22, `flaky.event`:
|
|
131
|
-
- 2026-10-23, `flaky.event`:
|
|
132
|
-
- 2026-10-22, `flaky.known_flaky`:
|
|
133
|
-
- 2026-10-23, `flaky.known_flaky`:
|
|
134
|
-
- 2026-10-23, `flaky.known_flaky`:
|
|
135
|
-
- 2026-10-28, `flaky.known_flaky`:
|
|
136
|
-
- 2026-10-22, `flaky.outside_failure`:
|
|
137
|
-
- 2026-10-22, `flaky.outside_failure`:
|
|
138
|
-
- 2026-10-22, `flaky.already_failing`:
|
|
139
|
-
- 2026-10-23, `flaky.maybe_flaky`:
|
|
140
|
-
- 2026-10-23, `flaky.pr_details`:
|
|
141
|
-
- 2026-10-23, `flaky.pr_details`:
|
|
142
|
-
- 2026-10-23, `flaky.pr_details`:
|
|
143
|
-
- 2026-10-21, `dora.deploy_source`:
|
|
144
|
-
- 2026-10-22, `dora.fix_chain`:
|
|
145
|
-
- 2026-10-23, `community.regular_responders`:
|
|
146
|
-
- 2026-10-22, `community.first_response_km`:
|
|
147
|
-
- 2026-10-24, `uncertainty.digest`:
|
|
148
|
-
- 2026-10-23, `ai.detection`:
|
|
129
|
+
- 2026-10-22, `flaky.event`: before, same-code flips in any workflow; all 3 flips that weren't real flakes, and 5 checks of the PR's own text, were pull-request runs of workflows that also run on PR edits or labels; after, 9 of 108 events left out (3 wrong, 5 PR-text checks, 1 real timing flake); 99 of 99 kept are real.
|
|
130
|
+
- 2026-10-23, `flaky.event`: before, pull-request flips left out in PR-edit workflows; held out, all 17 flips in such workflows were real flakes; after, reverted to the earlier rule.
|
|
131
|
+
- 2026-10-22, `flaky.known_flaky`: before, any earlier flake; 15 of 34 failures it called safe were caused by the change (44%); after, 7 called safe (5 clearly labelled, 0 caused), all one job; the other 29 now cost a look.
|
|
132
|
+
- 2026-10-23, `flaky.known_flaky`: before, a known flake passed the verdict check; 13 of 81 held-out safe calls were the change's own failure; matching past flakes' errors didn't separate them; after, known flaky still reads 'likely a flake, re-run it', but the verdict check passes only once CI is green.
|
|
133
|
+
- 2026-10-23, `flaky.known_flaky`: before, a known flake read 'likely a flake, re-run it'; in the agent head-to-head a smaller model trusted it on 2 failures the change caused; after, it asks to check the error isn't from the change before re-running; those 2 were then answered right.
|
|
134
|
+
- 2026-10-28, `flaky.known_flaky`: before, 3+ flakes in the window, one in the failing step (history alone); shown as "Known flaky"; held out, 13 of 81 such calls were the change's own failure; a flake's sign in the failing step's log and no changed file named separated them on the tuning data (0 of 31 caused when both held; 8 of 8 clear caused when a changed file was named); after, fresh read: 4 of 44 calls kept, 0 caused (0-49%), so the 5% bar is unproven; shown as "Likely flaky" with its evidence, never "safe"; the rest read flaked before, or maybe yours (4 of 5 clear fresh cases caused).
|
|
135
|
+
- 2026-10-22, `flaky.outside_failure`: before, failure-section match including 'failed to download and build'; a dependency's own build failing matched; after, taken out; 4 matches given up for safety.
|
|
136
|
+
- 2026-10-22, `flaky.outside_failure`: before, TEST_FAILED matching any 'FAILED:'; ninja's 'FAILED:' build lines hid an sccache outage; after, test-runner forms only.
|
|
137
|
+
- 2026-10-22, `flaky.already_failing`: before, the same step alone; 4 of 22 such failures were caused by the change, with a different error in that step; after, 12 matched, none caused.
|
|
138
|
+
- 2026-10-23, `flaky.maybe_flaky`: before, track record over all 24 signature matches; the product says maybe flaky only for never-flaked failures (a whole-release review); after, the track record counts never-flaked matches: 1 of 6 (0 of 4 tuning, 1 of 2 held out).
|
|
139
|
+
- 2026-10-23, `flaky.pr_details`: before, error lines mentioning a title, label or description anywhere; a test assertion about chart labels matched; after, the words must be about the PR.
|
|
140
|
+
- 2026-10-23, `flaky.pr_details`: before, only jobs whose steps read the PR (triggers.metadata_jobs); label checks gated by `if:` and checks reading the PR in a script were missed (2 matches of 24); after, any job of a workflow run by PR edits, with the error guard.
|
|
141
|
+
- 2026-10-23, `flaky.pr_details`: before, "checkbox", "template" or "PR" alone; any failing step; a whole-release review: a template rendering error in a CI workflow run on labels matched; after, those words need the PR's wording beside them, and a failing test rules it out; still 24 of 24 matched.
|
|
142
|
+
- 2026-10-21, `dora.deploy_source`: before, display name checked against the deny list; a file named deploy.yml titled 'Check and Publish' hit the deny word 'check'; after, a file named only deploy, release or publish ships whatever its display name; 22 to 23 of 25.
|
|
143
|
+
- 2026-10-22, `dora.fix_chain`: before, every revert counted as a failed deployment; 11 of 18 undid a change that never shipped; after, never-shipped reverts are no failed deployment.
|
|
144
|
+
- 2026-10-23, `community.regular_responders`: before, answers and first reviews only; triage acts mark people acting for the project; on the labelled comments the rule missed, they found 8 project answers among 11; after, held out: 4 more project answers (47% to 57% weighted); on Claude's labels 45% to 53%, on Gemini's 32% to 38%.
|
|
145
|
+
- 2026-10-22, `community.first_response_km`: before, closed-unanswered items treated as still waiting; they stopped being at risk when they closed; after, censored at closing.
|
|
146
|
+
- 2026-10-24, `uncertainty.digest`: before, weekly checks only; in a slowdown's second week the weekly check's baseline holds the first slow week, so 10x slowdowns were caught in 15% of scans; after, on the same replay, second-week catches of 10x slowdowns 15% to 35%, first-week 31% to 25%, false alarms 7.4% to 7.5%; CUSUM charts tried and dropped (no gain).
|
|
147
|
+
- 2026-10-23, `ai.detection`: before, AI trailers in the last 5 commits, labels matched exactly, agent account or branch; 5 of 23 missed PRs named the tool in their description; label spellings and Jules task links missed in the tune half; after, recall 75.0% to 78.8% weighted (63.9% to 66.3% held out); precision 185 of 187 to 191 of 194.
|
|
@@ -17,12 +17,11 @@ explorer, which fetches DuckDB once) and has no tracking. The bundled libraries
|
|
|
17
17
|
| `index.html?pages=https://owner.github.io/name/` | Another repo's Pages site |
|
|
18
18
|
| `index.html?welcome` | The Welcome screen |
|
|
19
19
|
|
|
20
|
-
Links from the earlier app still work: `#/home` opens Overview and `#/integrations` opens Connections.
|
|
21
20
|
|
|
22
21
|
## Layout
|
|
23
22
|
|
|
24
23
|
The sidebar groups the pages: **Health** (Overview, Insights, CI Health, Pull Requests, Delivery, Community,
|
|
25
|
-
Dependencies), **Organisation** (Investment, Portal, Explore), **Team** (Activity, Settings) and **Install** (Setup,
|
|
24
|
+
Dependencies), **Organisation** (Investment, Portal, Explore), **Team** (Activity, Data health, Settings) and **Install** (Setup,
|
|
26
25
|
Connections, Agents, Help, About). A badge shows what waits on a page, for example flaky tests or newcomers waiting. A
|
|
27
26
|
page for a module that isn't set up is dimmed. On a phone the sidebar becomes a tab bar (Overview, Insights, CI, PRs)
|
|
28
27
|
with the rest under **More**.
|
|
@@ -58,7 +57,7 @@ Once GitHub is connected, setup takes a few clicks; connecting takes one token,
|
|
|
58
57
|
**Setup** picks a repo, checks what it has and suggests a plan (modules ticked from what it finds) that you can change.
|
|
59
58
|
**Set it up** then commits the workflow (a pull request when the branch is protected), starts the first run and shows it
|
|
60
59
|
live, waits for the data branch and turns on Pages for public repos. Each step is saved, so a reload picks up where it
|
|
61
|
-
stopped. Without a token you get the file ready to add on GitHub, the YAML to copy, or the CLI command, and the app
|
|
60
|
+
stopped. Without a token you get the file ready to add on GitHub, the YAML to copy, or the one CLI command (`stackvitals init owner/repo`), and the app
|
|
62
61
|
checks for the first run at a pace that stays inside GitHub's limit for visitors.
|
|
63
62
|
|
|
64
63
|
## Pages
|
|
@@ -17,8 +17,10 @@ way back: settings and decisions made in the app.
|
|
|
17
17
|
### 1. What starts a run
|
|
18
18
|
|
|
19
19
|
A run starts when any of these happens: a CI run finishes (`workflow_run`), the 3-hour schedule comes round, a deploy or
|
|
20
|
-
incident is sent from another tool (`stackvitals record`), someone makes a request
|
|
21
|
-
someone comments `/stackvitals` on an issue or pull request
|
|
20
|
+
incident is sent from another tool (`stackvitals record`, which sends a `repository_dispatch`), someone makes a request
|
|
21
|
+
in the app (an issue it opens, or `workflow_dispatch`), someone comments `/stackvitals` on an issue or pull request
|
|
22
|
+
(`issue_comment`), a pull request changes a lockfile (`pull_request`, for the dependency check), or the workflow or
|
|
23
|
+
settings file changes (`push`). Each
|
|
22
24
|
start is the same job; what it reads depends on what started it.
|
|
23
25
|
|
|
24
26
|
### 2. Collect
|
|
@@ -33,9 +35,10 @@ Copilot usage, Slack, Teams and Discord ([connectors.md](connectors.md)).
|
|
|
33
35
|
|
|
34
36
|
### 3. Analyse
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
The modules read the same collected data in one pass: CI Health (flaky tests and the verdict on each failing pull
|
|
37
39
|
request), Team Flow (who has to act next), Delivery and DORA (deploys, lead time and failures), Dependencies (vulnerable
|
|
38
|
-
and risky packages), Community (newcomers and first answers) and Portal (owners and scorecards
|
|
40
|
+
and risky packages), Community (newcomers and first answers) and Portal (owners and scorecards; it runs from the org's own portal repo
|
|
41
|
+
with its own workflow, not in each repo's run). Insights then puts
|
|
39
42
|
every module's findings in one list, ranked by the hours at stake.
|
|
40
43
|
|
|
41
44
|
Every verdict stands on two things: the **rules registry**, where each rule has an accuracy card measured on public repos
|
|
@@ -138,7 +141,7 @@ in `deploy/crawler/`. It publishes aggregates only. Your job reads them; it neve
|
|
|
138
141
|
| `src/stackvitals/deps` | Dependency Steward |
|
|
139
142
|
| `src/stackvitals/community` | Community health |
|
|
140
143
|
| `src/stackvitals/portal` | Portal: catalog, owners, scorecards, campaigns, golden paths, the org view |
|
|
141
|
-
| `src/stackvitals/connectors` | Jira, Linear, PagerDuty, incident.io, Copilot, Slack, Discord, Discourse |
|
|
144
|
+
| `src/stackvitals/connectors` | Jira, Linear, PagerDuty, incident.io, SonarQube, Copilot and AI-spend keys, Slack, Discord, Discourse (Teams and the other chat alerts are in `core/chat.py`) |
|
|
142
145
|
| `src/stackvitals/web` | the app and the site |
|
|
143
146
|
| `src/stackvitals/mcp_server.py` | the MCP server |
|
|
144
147
|
| `src/mergescout` | Contribute (MergeScout) |
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|