stackvitals 0.1.2__tar.gz → 0.1.3__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.2 → stackvitals-0.1.3}/CHANGELOG.md +12 -0
- stackvitals-0.1.3/CODE_OF_CONDUCT.md +113 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/CONTRIBUTING.md +17 -3
- {stackvitals-0.1.2 → stackvitals-0.1.3}/PKG-INFO +7 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/README.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/registry.json +3 -3
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/summary.py +8 -6
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/accuracy.md +21 -22
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/app.md +2 -3
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/architecture.md +8 -5
- stackvitals-0.1.3/docs/assets/architecture-detailed-dark.png +0 -0
- stackvitals-0.1.3/docs/assets/architecture-detailed-light.png +0 -0
- stackvitals-0.1.3/docs/assets/architecture-overview-dark.png +0 -0
- stackvitals-0.1.3/docs/assets/architecture-overview-light.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/connectors.md +3 -4
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/coverage.md +2 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/dora-guide.md +4 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/faq.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/guides/maintainer.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/guides/manager.md +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/guides/platform.md +3 -3
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/install.md +22 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/limitations.md +5 -5
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/methods.md +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/modules.md +25 -4
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/privacy.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/quickstart.md +14 -5
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/release-checklist.md +29 -17
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/rules.md +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/scaling.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/settings.md +14 -14
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/threat-model.md +3 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/llms.txt +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/pyproject.toml +8 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/scripts/sync_crawler.py +2 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/server.json +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/skills/stackvitals-ci/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/skills/stackvitals-community/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/skills/stackvitals-contribute/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/skills/stackvitals-delivery/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/skills/stackvitals-deps/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/skills/stackvitals-flow/SKILL.md +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/skills/stackvitals-portal/SKILL.md +1 -1
- stackvitals-0.1.3/src/mergescout/__init__.py +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/__init__.py +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/dataflow.py +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/installdoc.py +28 -5
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/schema.py +20 -4
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/editors/vscode/package.json +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-GPVLJRZD.js → stackvitals-0.1.3/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.3/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.3/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.3/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.3/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.3/src/stackvitals/web/app/chunks/more-EEGUDTVE.js +1 -1
- stackvitals-0.1.3/src/stackvitals/web/app/demo/settings.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/accuracy.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/connectors.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/getting-started.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/index.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/modules.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/privacy-and-security.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/reference.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/main.css +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/main.js +1 -1
- stackvitals-0.1.3/src/stackvitals/web/app/pages/about.js +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/ci.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/community.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/deps.js +1 -1
- stackvitals-0.1.3/src/stackvitals/web/app/pages/help.js +6 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/portal.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/setup.js +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/welcome-sheet.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/welcome.js +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/site/index.html +5 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/site/site.css +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_docs.py +2 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/uv.lock +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/README.md +2 -1
- stackvitals-0.1.3/web/demo/settings.json +1 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/app/App.tsx +3 -3
- stackvitals-0.1.2/web/src/app/LogoPicker.tsx → stackvitals-0.1.3/web/src/app/Brand.tsx +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/workflow.ts +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/about.tsx +2 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/community.tsx +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/help/commands.tsx +3 -2
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/setup.tsx +1 -1
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/styles/sheet.css +1 -3
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/styles/shell.css +0 -10
- {stackvitals-0.1.2 → stackvitals-0.1.3}/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.3}/.env.example +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.gitattributes +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.github/ISSUE_TEMPLATE/benchmark.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.github/build-constraints.txt +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.github/workflows/daily.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.github/workflows/mcp-registry.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.github/workflows/prospective.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.github/workflows/release.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.github/workflows/tests.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/.gitignore +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/GOVERNANCE.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/LICENSE +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/NOTICE +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/SECURITY.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/action.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/LICENSE-DATA.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/adjudicate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/adjudicator-crosscheck.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/adoption/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/adoption/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/adoption/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/adoption/study.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/prepare.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/prepare2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/prompts.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/results2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/score2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/triage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/agents/triage_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/adjudication-detection.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/adoption-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/adoption.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/agreement-gemini-detection.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/codebook-detection.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/detection-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/detection-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/detection.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/labels-gemini-detection.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/replicate-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/ai/replicate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/audit-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/audit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/adjudication-main.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/adjudication-validation.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/affiliation-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/affiliation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-main-v2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-main.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-validation-v2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-validation.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/channels-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/channels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-main-v2.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-main.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-validation-v2.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-validation.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/labels-main.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/labels-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/labels-validation.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/responses-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/responses-validation-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/responses.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/score_labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/triage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/community/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/contribute/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/contribute/frozen-manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/contribute/frozen.json.gz +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/contribute/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/contribute/prospective.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/crosscheck.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/baseline-after-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/baseline-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/baseline.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/coverage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/coverage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/exploits-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/exploits.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/incidents-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/incidents.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/lookalike-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/lookalike.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/release-signs-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/deps/release_signs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/devlake/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/devlake/head-to-head-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/devlake/pick.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/devlake/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/devlake/repos.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/devlake/run.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/devlake/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/adjudication-incidents.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/adjudication-sources-more.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/adjudication-sources.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/agreement-gemini-sources-more.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/agreement-gemini-sources.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/devlake-configured-more-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/devlake-configured-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/devlake_configured.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/environments-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/environments.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/incidents-codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/incidents-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/incidents-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/incidents.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/labels-gemini-incidents.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/labels-gemini-sources-more.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/labels-gemini-sources.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/linkage-more-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/linkage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/linkage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/sources-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/sources-more-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/sources-more-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/sources-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/sources.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/spread-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/dora/spread.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/fair.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/features/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/features/api_use.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/features/branch_growth.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/features/catalog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/features/reports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/features/scorecard.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/features/scorecard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/finalise.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-flaky.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-fresh.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-heldout.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-masking.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-flaky-v2.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-flaky.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-fresh.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-heldout.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-masking.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/already-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/already.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/began-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/began.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/card.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/codebook.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/heldout-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/heldout-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/heldout.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/items.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/kinds-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-flaky-v2.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-flaky.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-fresh.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-heldout.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-masking.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/masking-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/masking-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/masking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/maybe-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/maybe.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/natural-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/natural.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/outside-fresh-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/outside-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/outside.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/outside_fresh.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/pr-details-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/pr_details.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/safe-check-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/safe-rule-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/safe_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/safe_rule.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/views.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/flaky/wide.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/impact/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/impact/collect_reports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/impact/find_report_repos.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/impact/replay-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/impact/replay_tia.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/impact/search.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/impact/totals.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/label-sensitivity.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/labeller.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/middleware/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/middleware/preregistration.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/middleware/results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/middleware/run.sh +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/middleware/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/panel-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/panel.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/platform/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/platform/busy-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/platform/busy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/portal/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/portal/scale-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/portal/scale.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/portal/speed-after.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/portal/speed-before.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/portal/speed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/replay/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/replay/adjudication-replay.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/replay/agreement-gemini-replay.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/replay/labels-gemini-replay.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/replay/replay-labels.csv +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/replay/replay-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/replay/replay.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/reproduce.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/scorecard/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/scorecard/results-before.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/scorecard/results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/scorecard/run.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/sensitivity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/team/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/team/prospective-frozen.json.gz +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/team/prospective-manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/team/prospective.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/team/reviewers-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/team/reviewers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-2week-before-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-2week-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-before-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/shrinkage-groups-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/shrinkage-results.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/bench/accuracy/uncertainty/shrinkage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/deploy/crawler/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/deploy/crawler/gitignore +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/deploy/crawler/workflows/bench.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/deploy/crawler/workflows/check.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/deploy/crawler/workflows/crawl.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/deploy/crawler/workflows/discover.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/deploy/crawler/workflows/keepalive.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/assets/divider-dark.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/assets/divider-light.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/assets/lockup-dark.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/assets/lockup-light.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/assets/stackvitals-video.avif +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/assets/stackvitals-video.gif +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/assets/stackvitals-video.mp4 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/chaoss.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/enterprise.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/roadmap.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/docs/triage.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/scripts/prelaunch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/archive/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/archive/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/archive/convert.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/archive/events.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/archive/manifest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/archive/stream.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/ci.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/deploys.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/matched.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/prior.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/shared.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/bench/stars.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/config.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/chain.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/fetch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/runner.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/seed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/state.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/crawl/writer.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/discover/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/discover/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/discover/sweep.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/github/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/github/graphql.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/github/identities.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/github/releases.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/mcp_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/measure/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/measure/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/measure/api_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/measure/count_repos.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/measure/jsonl.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/measure/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/measure/sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/setup_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/bump_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/bumps.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/community_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/delivery_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/deps_map.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/deps_trends.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/exploits.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/flow_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/issues.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/osv.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/owners_watch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/repo_stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/rules.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/silver.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/top_packages.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/triage_math.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/signals/walls.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/snapshot/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/snapshot/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/snapshot/build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/snapshot/publish.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/snapshot/schema.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/snapshot/score.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/store/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/store/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/store/sync.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/timeutil.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/tool/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/tool/action_pack.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/tool/live.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/tool/queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/tool/refs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/tool/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/mergescout/tool/tracking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/__main__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/api.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/automation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/burnin.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/coverage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/feedback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/fingerprint.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/gitlab.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/gitlab_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/impact.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/investigate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/monitors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/quarantine_runtime.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/retry.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/selfheal.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/shards.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/share.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/testreports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/tickets.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/track_record.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/triggers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/upload.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/ci/validate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/codeowners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/affiliation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/chaoss.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/context.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/community/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/ai_spend.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/base.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/copilot.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/discord.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/discourse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/incident_io.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/jira.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/linear.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/pagerduty.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/slack.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/sonar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/tracker.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/connectors/writeback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/contribute/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/contribute/brief.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/contribute/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/actors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/agent_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/agreements.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/ai_outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/alerts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/appdata.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/bucket.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/bugs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/calendar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/capex.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/change_risk.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/changes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/chat.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/config.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/delivery_peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/delivery_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/deliverycli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/devlake_dora.sql +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/digest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/explaincli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/explore.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/exportcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/findings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/health.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/initcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/insights.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/insightscli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/investment.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/joins.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/llmsdoc.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/merge_queue.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/metrics.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/model.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/projectcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/propose.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/pulse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/recorded.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/releases.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/resync.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/services.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/settings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/sqlcli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/summary.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/time.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/tomledit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/uicli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/webapp.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/what_changed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/core/workspace.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/actions_vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/dossier.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/fixplan.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/guarddog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/hygiene.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/imports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/lockfiles.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/lookalike.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/reach.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/release.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/runtimes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/supply.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/deps/vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/editors/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/editors/vscode/extension.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/editors/vscode/marks.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/automate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/code_hosts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/gitlab_mr.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/knowledge.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/preflight.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/rules.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/survival.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/flow/triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/mcp_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/batch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/campaigns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/catalog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/descriptor.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/github.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/golden.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/history.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/inventory.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/pages.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/rollup.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/portal/scorecard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/security/__init__.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/security/probes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/security/repo_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/security/workflows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/shell.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/site.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/LICENSES.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/boot.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/brand/cube-128.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/brand/cube-256.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/brand/cube-64.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/AddRepo-KRPZXWCY.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/SetupRunning-XWFQAKRZ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/accuracy-data-OQTDXI7Y.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/agents-data-BAL6QAOF.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-24LFKFZ6.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-3IXWEOIJ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-3ROQFHPV.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-45PGAQRO.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4H53OYLG.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4LUI7O5P.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4SQPQ5TB.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4WKQTWUC.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-576YHDEK.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-6RLVD2DT.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-763NH7PP.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-76WAVKUG.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-7II2BD5F.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-ASYNLVOP.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-CTKDYZMG.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-CVB26NMC.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-DLORG2IY.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-FBGIG7YF.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-G7NGB5UX.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-GT4EAKAO.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-IYMBFPCV.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-LAAGCPU3.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-P5TXDD45.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-RPXHAG6F.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-S2ZBMEVA.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-S654BBEP.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-SACCDA46.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-T7QVTNXF.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-TCPSLBAB.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-TO4VVRZ7.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-VQ5YXO54.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-VWKSMFWJ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-YTANGYYH.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/connect-KONYWYTT.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/connections-data-2DYS4UVW.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/more-PC6FVS3P.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/more-RCIVCUDE.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/more-ZKKRY6NO.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/sealbox-35YL4EUH.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/session-DYYTOE2K.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/settingsApply-2HRJEZYM.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/settingsReview-GX2FZQ4M.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/uPlot.esm-OIWT3AHJ.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/ci/impact.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/ci/quarantine.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/ci/tickets.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/alerts.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/app.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/community.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/connectors.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/data.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/decisions.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/delivery.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/deps.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/flow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/health.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/insights.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/pulse.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/security.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/prs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/tests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/supply.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/vulns.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/alerts.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/app.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/community.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/connectors.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/data.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/decisions.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/delivery.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/deps.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/flow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/health.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/insights.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/pulse.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/security.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/prs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/tests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/supply.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/vulns.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/portal.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/alerts.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/app.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/community.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/connectors.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/data.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/decisions.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/delivery.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/deps.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/flow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/health.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/insights.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/pulse.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/security.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/manifest.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/prs.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/tests.jsonl +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/supply.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/vulns.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-mono-400.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-sans-400.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-sans-600.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-sans-condensed-700.woff2 +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/about.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/activity.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/activity.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/agents.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/agents.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/ci.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/community.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/connections.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/connections.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/delivery.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/delivery.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/deps.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/explore.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/explore.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/health.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/health.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/help.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/insights.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/insights.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/investment.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/investment.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/overview.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/overview.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/portal.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/prs.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/prs.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/settings.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/settings.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/setup.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/standing.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/standing.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/app/settings-workflow.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/index.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/site/integrations.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/src/stackvitals/web/site/setup.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/templates/gitlab/stackvitals.yml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/ci_fake.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/conftest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/fixtures/issue_page.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/fixtures/osv-scan.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/fixtures/pr_page.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/fixtures/repo_meta.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_actions_vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_adjudicate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_adoption_study.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_agent_leaderboard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_agent_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_agreement_nudges.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ai_markers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ai_matched.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ai_outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ai_spend.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_api_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_app_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_archive_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_files.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_guarddog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_mcp_messages.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_sql.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_uicli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_audit_workflows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_base_images.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_began_after.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_bench_by_repo.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_bench_deploys.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_bench_report_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_bench_stars.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_branch_growth.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_bucket.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_bug_backlog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_capex.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_catalog_descriptor.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_change_risk.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_changes_14d.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_chat.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_action_pr.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_already_failing.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_analyze_tests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_artifacts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_automation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_began.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_bench_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_burnin.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_comment_shape.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_depth.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_feedback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_feedback_all.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_fingerprint.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_gitlab.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_groups.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_impact.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_issue_lifecycle.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_masking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_maybe_flaky.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_mcp.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_monitors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_outside.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_outside_ci_edit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_pr_details.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_push_evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_quarantine_mark.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_report_formats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_retry.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_review_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_safe_rule.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_settings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_surfaces_m3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_test_verdict.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_testreports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_triggers_script.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_upload.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_verdict_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_ci_webhook_formats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_code_hosts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_code_survival.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_affiliation.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_context.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_dependency.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_discussions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_fetch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_community_stated.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_config.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connector_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connector_framework.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connector_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connectors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connectors_chat.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connectors_discourse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connectors_epics.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_connectors_writeback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_contribute_brief.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_contribute_prospective.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_contribute_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_convert.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_actors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_agreements.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_alerts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_appdata.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_delivery_peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_delivery_surfaces.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_digest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_digest_step.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_explore.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_findings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_findings_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_insights.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_insights_surfaces.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_metrics.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_model.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_otel.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_propose.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_pulse.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_recovery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_request_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_requests_wording.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_roles_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_runner.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_schema.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_services.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_settings.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_sql_org.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_summary.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_summary_churn.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_tomledit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_ui.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_webapp.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_webapp_version.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_core_workspace.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_cost_guard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_count_repos.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_coverage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_fetch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_outcomes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_runner.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_seed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_state.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_crawl_writer.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_delivery_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_delivery_deploy_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_delivery_rules_m2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_bumps.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_crawl.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_exploits.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_fixed_versions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_ledger.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_map.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_osv.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_top.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_trend_quiet.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_trends.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dep_watch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deploy_attempts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deploy_ranges.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deployment_history.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deployment_list.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_dossier.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_hygiene.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_imports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_lookalike.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_paths.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_policy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_reach.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_release.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_review_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_runtimes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_deps_vulns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_devlake_cicd.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dora_evidence.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dora_proof.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dora_rows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_dora_weeks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_editor_marks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_enterprise_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_events.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_explain_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_fair.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_fixplan.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flake_code_kinds.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flaky_natural.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flaky_sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flaky_score_fair.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flaky_test_cost.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flaky_tickets.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_analyze.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_automate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_bench_pipeline.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_collect.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_collect_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_definitions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_m2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_peers.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_preflight.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_round2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_round3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_triage.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_windows.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_flow_wiring.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_fork_reports.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_gitlab_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_gitlab_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_graphql.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_health.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_identities.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_identity_everywhere.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_identity_match.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_init_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_insights_chains.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_investment.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_jira_fields.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_knowledge_names.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_labeller.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_llms_txt.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_local_run.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_m1_small_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_masking_card.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_mcp_core.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_mcp_provenance.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_merge_queue.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_mergescout_token.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_modular_install.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_nulls_power.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_numbers_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_odds_backtest.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_outside_fresh.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_owners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_pagers_copilot.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_pages_deploy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_parsing_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_peer_fit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_polish_m1.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_polish_m2.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_polish_review.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_app_facts.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_campaigns.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_catalog.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_export.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_golden.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_handcheck.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_history.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_html.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_m1.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_nudges.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_reviews.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_rollup.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_portal_scorecard.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_pr_exclusions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_pr_licences.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_pr_rules.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_prelaunch.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_production_branches.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_project_dora.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_pulse_trend.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_quarantine_expiry.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_quarantine_runners.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_quarantine_runtime.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_recorded.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_relay_and_polish.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_release_quality.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_releases.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_releases_ratelimit.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_report_validate.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_response_times.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_result_quality.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_resync.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_review_fixes.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_review_fixes_action.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_review_fixes_p3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_review_fixes_requests.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_review_m3.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_sample.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_schema_sections.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_scorecard_agreement.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_security_checks.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_selfheal.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_services.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_setup_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_setup_template.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_shared_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_shell_app_link.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_shrinkage_groups.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_signals_check.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_signals_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_signals_identity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_signals_issues.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_signals_labels.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_signals_repo_stats.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_signals_walls.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_site_build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_snapshot_build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_snapshot_publish.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_sonar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_state_report.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_store_cli.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_stream.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_suite_packaging.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_supply.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_sweep.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_team_dora.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_test_variants.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tool_action_pack.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tool_live.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tool_queries.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tool_server.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tool_speed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tool_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tool_tracking.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_tracker.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_triage_math.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_triage_pipeline.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_uncertainty.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_verdict_feedback.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_verdict_strict.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_vulns_dev_only.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_vulns_ignores.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_vulns_inputs.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_web_build.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_web_next_setup.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_web_replay_parity.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_what_changed.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/local/test_work_calendar.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/signals_data.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_accuracy.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_bench.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_ci.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_community.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_connectors.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_contribute.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_core.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_crawl.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_decisions.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_delivery.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_deps.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_discover.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_github.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_insights.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_portal.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_signals.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_snapshot.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_store.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_surfaces.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_team.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_tool.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/test_flow_web.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/tests/tool_data.py +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/brand/cube-128.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/brand/cube-256.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/brand/cube-64.png +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/build.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/demo/extra-ci.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/demo/extra-delivery.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/demo/extra-deps.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/demo/extra-people.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/demo/extra-portal.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/demo/source.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/defaults.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/fixtures.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/flows.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/links.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/playwright.config.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/serve.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/sweep.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/e2e/welcome.spec.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/index.html +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/package-lock.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/package.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/scripts/docs.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/app/AddRepo.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/app/Profile.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/app/jump.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/app/router.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/app/routes.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/boot.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/brand/Logo.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/charts/BarChart.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/charts/MetricHero.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/charts/ScrubChart.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/charts/Sparkline.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/charts/metric.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/files.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/format.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/repos.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/requestIssue.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/source.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/store.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/theme.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/types.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/data/write.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/Decide.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/Evidence.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/Health.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/SetupRunning.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/agents-data.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/brand-logos.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/connect.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/connect.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/connectRepos.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/connections-data.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/connstatus.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/helpLink.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/markdown.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/sealbox.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/sealedbox.d.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/secrets.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/settingsApply.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/settingsModel.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/settingsPending.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/settingsReplay.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/settingsReview.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/settingsToml.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/text-css.d.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/features/vitals.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/caps.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/client.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/config.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/detect.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/diff.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/links.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/mine.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/names.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/oauth.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/open.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/session.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/setup.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/signout.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/token.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/github/watch.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/main.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/about/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/about-accuracy.d.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/about.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/accuracy-data.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/activity.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/activity.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/agents/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/agents.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/agents.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/ci/more.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/ci/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/ci/setup.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/ci/workflowgen.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/ci.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/ci.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/community/command.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/community/report.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/community.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/connections.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/connections.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/delivery/blocks.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/delivery/blocks.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/delivery/more.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/delivery/sources.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/delivery.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/delivery.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps/blocks.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps/blocks.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps/lookup.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps/scanning.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps/security.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps/tools.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/deps.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/explore/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/explore/query.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/explore.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/explore.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/health.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/health.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/help.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/help.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/insights/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/insights.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/insights.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/investment.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/investment.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/overview/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/overview.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/overview.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal/access.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal/panel.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal/panel.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal/setup.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal/tools.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/portal.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/prs/more.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/prs/parts.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/prs/preflight.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/prs.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/prs.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/settings.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/settings.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/setup.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/standing.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/standing.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/welcome-sheet.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/welcome-sheet.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/pages/welcome.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/styles/base.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/styles/charts.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/styles/components.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/styles/index.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/styles/tokens.css +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/Button.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/Page.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/Popover.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/Portal.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/Sheet.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/Table.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/bits.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/controls.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/icons.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/motion.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/src/ui/prefill.tsx +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/ciworkflow.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/client.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/connstatus.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/depstools.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/explorequery.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/fake.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/links.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/load.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/markdown.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/portalsetup.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/preflight.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/run.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/safety.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/secrets.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/settings.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/test/setup.test.ts +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/web/tsconfig.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/package.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/relay/README.md +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/relay/package.json +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/relay/src/index.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/relay/test/index.test.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/relay/wrangler.toml +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/src/index.js +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/test/index.test.mjs +0 -0
- {stackvitals-0.1.2 → stackvitals-0.1.3}/worker/wrangler.toml +0 -0
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.3 (2026-10-31)
|
|
4
|
+
|
|
5
|
+
- The app's About page and the project site say Apache 2.0 (they said MIT); the site shows the cube logo and the
|
|
6
|
+
one-command setup.
|
|
7
|
+
- The app's Setup page and Help give `stackvitals init owner/repo` as the terminal way to set a repo up.
|
|
8
|
+
- PyPI lists the project's links (home, docs, source, issues, changelog).
|
|
9
|
+
- Docs: the install page says how to get the command; guides, quickstart and modules lead with `stackvitals init`;
|
|
10
|
+
contradictions fixed (golden paths, GitLab, GitHub Enterprise Server, sign-in, private repos' CI runs, cycle-time
|
|
11
|
+
phases); the PR verdicts are a table; the settings page says which switches are on by default; the architecture
|
|
12
|
+
diagrams list every trigger and show Portal running from the org's repo; a release checklist with the real steps.
|
|
13
|
+
- A code of conduct (Contributor Covenant 2.1), with reports through the repository's private reporting form.
|
|
14
|
+
|
|
3
15
|
## 0.1.2 (2026-10-31)
|
|
4
16
|
|
|
5
17
|
- `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.3
|
|
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",
|
|
@@ -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.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
|
|
@@ -117,8 +117,8 @@ goes through a server of ours, and the keys are only used to read unless you tur
|
|
|
117
117
|
shows it, an email). With `[identity] aliases` naming those people's GitHub logins, Delivery counts issues done
|
|
118
118
|
per team, and Slack and Discord count a reply from an aliased team member as the team's, so nobody is listed twice.
|
|
119
119
|
Without an alias, an assignee whose email name is a GitHub login of this repo (`bo@acme.com` for `bo`) counts as
|
|
120
|
-
that login; one whose email or name only reads like a login (`
|
|
121
|
-
`
|
|
120
|
+
that login; one whose email or name only reads like a login (`jane.doe@` or "Jane Doe" for
|
|
121
|
+
`jdoe`) is not counted, but the Issues view offers the alias line to paste. A public repo keeps no assignee.
|
|
122
122
|
- Only connectors whose key is in the workflow count: remove a key, and its issues and incidents stop counting (what
|
|
123
123
|
was pulled stays on the branch and counts again if the key comes back).
|
|
124
124
|
- Like the rest of the history, connector day files are kept 400 days (Copilot reports two years) and count toward
|
|
@@ -331,7 +331,6 @@ request's pipeline failed it leaves one note (edited on later pipelines, and to
|
|
|
331
331
|
which failures are known flakes or also fail on the default branch. If the push to `stackvitals-data` is refused (a
|
|
332
332
|
protected branch, a push rule, or a token without `write_repository`), the job fails and says so. GitLab has no "after
|
|
333
333
|
the pipeline" trigger, so the job reads its own pipeline while it runs; there is no verdict check to block a merge. It
|
|
334
|
-
is tested against a stand-in GitLab API, not a live project yet.
|
|
335
|
-
until then use `main` in its URL and set the `STACKVITALS_REF` variable to `main`.
|
|
334
|
+
is tested against a stand-in GitLab API, not a live project yet.
|
|
336
335
|
|
|
337
336
|
The merge request, deployment and incident records above come next, in the same job.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Coverage and peer groups
|
|
2
2
|
|
|
3
|
-
When StackVitals compares your repo with "similar public repos", the peers come from the
|
|
3
|
+
When StackVitals compares your repo with "similar public repos", the peers come from the project's crawler (built for MergeScout, the Contribute module, and now feeding every
|
|
4
|
+
benchmark), which reads public GitHub repos daily on GitHub Actions. This page says what it reads, what it misses, and how each peer group is formed.
|
|
4
5
|
|
|
5
6
|
## What the crawl reads
|
|
6
7
|
|
|
@@ -8,7 +8,8 @@ one can't tell you and how each is gamed, so a team can read them honestly.
|
|
|
8
8
|
|
|
9
9
|
DORA groups its [five software delivery metrics](https://dora.dev/guides/dora-metrics/) in two: throughput (deployment
|
|
10
10
|
frequency, change lead time, failed deployment recovery time) and instability (change fail rate, deployment rework
|
|
11
|
-
rate). StackVitals counts
|
|
11
|
+
rate). StackVitals counts deployment frequency, change lead time, failed deployment recovery time and change fail rate with
|
|
12
|
+
Apache DevLake's definitions (an incident blames the last production
|
|
12
13
|
deployment before it), and shows beside the change fail rate a second one where a revert blames the deployment that
|
|
13
14
|
shipped what it undid; rework rate is the share of deployments that shipped an unplanned fix. The tiers (elite,
|
|
14
15
|
high, medium, low) come from DevLake's 2023 table, which predates rework rate, so rework rate has no tier.
|
|
@@ -48,4 +49,5 @@ the delivery, and the number stops meaning anything (Goodhart's law).
|
|
|
48
49
|
## Further reading
|
|
49
50
|
|
|
50
51
|
- DORA's own guidance on the metrics and their misuse: <https://dora.dev/guides/dora-metrics-four-keys/>
|
|
51
|
-
- LinearB's definitions of the
|
|
52
|
+
- LinearB's definitions of the four cycle-time phases (coding, pickup, review, deploy; review is shown split into its
|
|
53
|
+
approve and merge times): <https://linearb.helpdocs.io/article/1s38stsugw-glossary-metrics>
|
|
@@ -67,7 +67,7 @@ command line takes the same two variables when you run it against your server.
|
|
|
67
67
|
|
|
68
68
|
## Is there a login, with roles for who sees what?
|
|
69
69
|
|
|
70
|
-
Yes, and it is GitHub's own. The app
|
|
70
|
+
Yes, and it is GitHub's own. The app uses your GitHub token (or GitHub sign-in, where the site has a sign-in relay) and reads each repo's data branch with your access, so a
|
|
71
71
|
person sees exactly the repos GitHub already lets them read, and an org's roles (members, outside collaborators, teams)
|
|
72
72
|
apply unchanged; Portal's org view shows only the repos the viewer can open. Nothing is copied to a server of ours to
|
|
73
73
|
guard, so there is no second user list to keep in step. What you don't get is a separate admin screen for roles: you
|
|
@@ -5,7 +5,7 @@ is free on public repos and needs only the built-in token.
|
|
|
5
5
|
|
|
6
6
|
## Set it up
|
|
7
7
|
|
|
8
|
-
[Quickstart](../quickstart.md):
|
|
8
|
+
[Quickstart](../quickstart.md): `stackvitals init owner/repo` adds the workflow file, runs it once and turns on GitHub Pages from the `stackvitals-data` branch. Your
|
|
9
9
|
dashboard is public like your repo. Your code stays in GitHub; the dependency check sends package names to deps.dev
|
|
10
10
|
and the registries unless you set `[deps] outside_lookups = false` ([privacy](../privacy.md)).
|
|
11
11
|
|
|
@@ -8,13 +8,13 @@ You want to know where your team's time goes and whether changes help, without r
|
|
|
8
8
|
90 days of CI and a year of pull requests on the first run, so you start with history, not an empty page.
|
|
9
9
|
2. **Open Insights** in the app: one list of what to fix first across CI, reviews and delivery, ranked by hours at
|
|
10
10
|
stake ([modules](../modules.md#insights-what-to-fix-first)). Start at the top.
|
|
11
|
-
3. **Read Delivery** for cycle time in LinearB's phases and DORA's five metrics. Before you share a DORA number,
|
|
11
|
+
3. **Read Delivery** for cycle time in LinearB's phases (coding, pickup, review, deploy) and DORA's five metrics (the industry's standard delivery measures: how often you deploy, how long a change takes to ship, how often a change fails, and how fast you recover). Before you share a DORA number,
|
|
12
12
|
read [the DORA guide](../dora-guide.md): what each number can't tell, how it gets gamed, and why it is never for
|
|
13
13
|
individual reviews.
|
|
14
14
|
|
|
15
15
|
## Every week
|
|
16
16
|
|
|
17
|
-
- The **weekly digest** (Monday, one comment on a pinned issue;
|
|
17
|
+
- The **weekly digest** (Monday, one comment on a pinned issue; to post it to chat too, set the `webhook` input, then `channels = ["issue", "webhook"]` under `[digest]`) says what
|
|
18
18
|
changed. It reports a change only when it stands out from how much your repo's weeks usually swing, so false alarms
|
|
19
19
|
are rare, but a quiet digest means nothing stood out, not that nothing moved: on small repos even large slowdowns
|
|
20
20
|
can go unflagged ([modules](../modules.md#decide-on-github-hear-back-every-week)).
|
|
@@ -6,11 +6,11 @@ and a security review you can sign off.
|
|
|
6
6
|
## Roll it out
|
|
7
7
|
|
|
8
8
|
1. **Portal first.** Create a private repo (for example `portal`) and save the workflow from
|
|
9
|
-
`stackvitals portal init` in it (`stackvitals portal check my-org` first says what your token can read). With the built-in token it reads public repos; for private ones, an org
|
|
9
|
+
`stackvitals portal init` in it (`stackvitals portal check my-org` first says what your token can read (it uses your `gh auth login` or `GITHUB_TOKEN`)). With the built-in token it reads public repos; for private ones, an org
|
|
10
10
|
owner creates a read-only org App (`stackvitals portal app-link my-org` opens GitHub's form filled in)
|
|
11
11
|
([modules](../modules.md#portal)).
|
|
12
|
-
2. **The suite per repo.** Each team
|
|
13
|
-
|
|
12
|
+
2. **The suite per repo.** Each team runs `stackvitals init OWNER/REPO` ([quickstart](../quickstart.md)), which
|
|
13
|
+
commits the workflow with that repo's CI workflows named and follows the first run. Private repos set `pages: artifact` (each run that
|
|
14
14
|
changed the app uploads it as a download kept 7 days) or open the app with `stackvitals ui OWNER/REPO`.
|
|
15
15
|
3. **Settings as code.** `.github/stackvitals.toml` per repo; every setting, its default and the permission it needs
|
|
16
16
|
are in [settings.md](../settings.md).
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
# Install
|
|
2
2
|
|
|
3
|
-
StackVitals
|
|
3
|
+
StackVitals has two parts: a GitHub Action, `uses: stackvitals/stackvitals@v0`, that runs in your repo, and the `stackvitals` command on your machine, which sets the Action up, opens a private repo's dashboard and runs the MCP server for AI agents. The Action needs nothing installed; the command is one `pip install`.
|
|
4
|
+
|
|
5
|
+
## Get the command
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
pip install stackvitals # Python 3.11 or newer
|
|
9
|
+
gh auth login # once; or set GITHUB_TOKEN
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Or run any command without installing, with [uv](https://docs.astral.sh/uv/): `uvx stackvitals init owner/repo`. Upgrade with `pip install -U stackvitals`. `stackvitals sql` needs the SQL extra: `pip install "stackvitals[sql]"`. The same package holds the CLI, `stackvitals ui` (a dashboard on your machine) and the MCP server (`stackvitals serve`).
|
|
13
|
+
|
|
14
|
+
## Set up a repo
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
stackvitals init owner/repo
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`init` commits the workflow file below (or opens a pull request when the branch is protected or a different `stackvitals.yml` is there), follows the first run and turns on GitHub Pages for a public repo. A private repo keeps Pages off, since a Pages site is public on most plans: open its dashboard with `stackvitals ui owner/repo`. The app's Setup page does the same without a terminal. More: [quickstart.md](quickstart.md).
|
|
21
|
+
|
|
22
|
+
`stackvitals/stackvitals@v0` follows the latest release; to pin an exact one, use its version tag (`stackvitals/stackvitals@vX.Y.Z`, listed under [releases](https://github.com/stackvitals/stackvitals/releases)).
|
|
23
|
+
|
|
24
|
+
The rest of this page is the reference for doing it by hand. The file below is exactly what `stackvitals ci init owner/repo` prints (that command also fills in your CI workflows' names) and what `init` and the app's Setup page commit for you. Save it as `.github/workflows/stackvitals.yml`; committing it starts the first run. No settings file is needed: a missing `.github/stackvitals.toml` means the defaults ([settings.md](settings.md)).
|
|
4
25
|
|
|
5
26
|
## Modules
|
|
6
27
|
|
|
@@ -133,8 +133,8 @@ verdict check, `issues: write` for flaky-test issues.
|
|
|
133
133
|
a docs index, with GitHub's own sign-in and repository roles. It doesn't replace an internal developer portal with
|
|
134
134
|
plugins, live service data from clouds or its own access control (Backstage, Port, Cortex, OpsLevel); it exports
|
|
135
135
|
to Backstage instead.
|
|
136
|
-
- Golden paths open a pull request in a repo the requester can already write to
|
|
137
|
-
arbitrary scripts. Required checks post a check run; a branch rule must still name it.
|
|
136
|
+
- Golden paths open a pull request in a repo the requester can already write to, or create a repo from a template
|
|
137
|
+
when the org App may create repos; they never run arbitrary scripts. Required checks post a check run; a branch rule must still name it.
|
|
138
138
|
- The built-in token reads public repos only; private repos need an org-owned read-only App. A public portal repo
|
|
139
139
|
leaves private repos out.
|
|
140
140
|
- The org view adds up and takes medians of what each repo published; repos that never ran a module are left out of
|
|
@@ -153,7 +153,7 @@ verdict check, `issues: write` for flaky-test issues.
|
|
|
153
153
|
- **Copilot:** needs an org App with "Organization Copilot metrics: read"; the workflow token can't have it. Each day
|
|
154
154
|
arrives two days late.
|
|
155
155
|
- **Untested live:** comment commands' access check and uploads from other CI systems are covered by tests only.
|
|
156
|
-
- **GitLab:** CI only (flaky jobs, pages, merge request notes; no verdict check); merge requests, deploys
|
|
156
|
+
- **GitLab:** CI only (flaky jobs, pages, merge request notes; no verdict check); the GitLab job doesn't read merge requests, deploys or incidents yet (the command line reads merge requests and deployments: `stackvitals delivery group/project --gitlab`). The GitLab job is tested against a stand-in API, not a live project.
|
|
157
157
|
|
|
158
158
|
## The app
|
|
159
159
|
|
|
@@ -195,5 +195,5 @@ What happens when something goes wrong mid-run. Each line is held by a test in `
|
|
|
195
195
|
| A JSON test report stopped early | Read and marked as cut short | `test_a_json_report_that_stopped_early_says_so` |
|
|
196
196
|
| A pull request's own files try to fool or break the dependency check | Odd file names can't inject workflow commands, a renamed or off-registry package borrows no verdict, an unreadable lockfile is skipped | `test_the_pr_check_cannot_be_fooled_or_broken_by_the_prs_own_files` |
|
|
197
197
|
|
|
198
|
-
**Not tested yet:** Bors and other merge bots outside GitHub's merge queue, monorepo task runners (Nx, Turborepo,
|
|
199
|
-
Bazel) that skip unchanged tests
|
|
198
|
+
**Not tested yet:** Bors and other merge bots outside GitHub's merge queue, and monorepo task runners (Nx, Turborepo,
|
|
199
|
+
Bazel) that skip unchanged tests. GitHub Enterprise Server is tested against a stand-in server only, not a live one.
|
|
@@ -28,7 +28,7 @@ half, the upper end reads "or more". Under 10 items, the page says "too few".
|
|
|
28
28
|
|
|
29
29
|
Fewer than 5 items on either side is not a test: it says "too few to tell" and doesn't count against the others.
|
|
30
30
|
|
|
31
|
-
**Calibration.** Work arrives in batches, so events in a week are not independent. Each number is also tested for each
|
|
31
|
+
**Calibration.** In short: a repo whose numbers usually swing a lot needs a bigger change before it is called a change. Work arrives in batches, so events in a week are not independent. Each number is also tested for each
|
|
32
32
|
of the repo's past 8 weeks, and the spread of those results (mean squared z, each capped at 16) widens this week's
|
|
33
33
|
test. The spread is blended with a typical swing worth 4 weeks:
|
|
34
34
|
- 1.5 for review times, set on half of 20 public repos and checked on the other half;
|
|
@@ -81,7 +81,7 @@ Each card's labelled sample is labelled twice, by two different model families,
|
|
|
81
81
|
1. **Claude**, which made the first labels.
|
|
82
82
|
2. **Gemini (Flash-Lite)**, from the same codebook and evidence.
|
|
83
83
|
|
|
84
|
-
Disagreements are settled by a third reading with both answers and the evidence. Cards publish both labellers'
|
|
84
|
+
Disagreements are settled by a third reading (by Claude) with both answers and the evidence. Cards publish both labellers'
|
|
85
85
|
agreement (share and Cohen's kappa) and every changed label. No person has audited the labels yet.
|
|
86
86
|
|
|
87
87
|
Only links and labels are published, never log text.
|