stackvitals 0.1.1__tar.gz → 0.1.2__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.1 → stackvitals-0.1.2}/.github/workflows/daily.yml +3 -3
- stackvitals-0.1.2/.github/workflows/mcp-registry.yml +32 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.github/workflows/prospective.yml +2 -2
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.github/workflows/release.yml +4 -4
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.github/workflows/tests.yml +2 -2
- {stackvitals-0.1.1 → stackvitals-0.1.2}/CHANGELOG.md +7 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/PKG-INFO +134 -28
- stackvitals-0.1.2/README.md +198 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/action.yml +2 -2
- {stackvitals-0.1.1 → stackvitals-0.1.2}/deploy/crawler/workflows/bench.yml +2 -2
- {stackvitals-0.1.1 → stackvitals-0.1.2}/deploy/crawler/workflows/check.yml +2 -2
- {stackvitals-0.1.1 → stackvitals-0.1.2}/deploy/crawler/workflows/crawl.yml +4 -4
- {stackvitals-0.1.1 → stackvitals-0.1.2}/deploy/crawler/workflows/discover.yml +4 -4
- {stackvitals-0.1.1 → stackvitals-0.1.2}/deploy/crawler/workflows/keepalive.yml +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/app.md +2 -3
- stackvitals-0.1.2/docs/architecture.md +147 -0
- 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/docs/assets/divider-dark.png +0 -0
- stackvitals-0.1.2/docs/assets/divider-light.png +0 -0
- stackvitals-0.1.2/docs/assets/lockup-dark.png +0 -0
- stackvitals-0.1.2/docs/assets/lockup-light.png +0 -0
- stackvitals-0.1.2/docs/assets/stackvitals-video.avif +0 -0
- stackvitals-0.1.2/docs/assets/stackvitals-video.gif +0 -0
- stackvitals-0.1.2/docs/assets/stackvitals-video.mp4 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/quickstart.md +14 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/release-checklist.md +5 -8
- {stackvitals-0.1.1 → stackvitals-0.1.2}/pyproject.toml +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/scripts/prelaunch.py +14 -5
- {stackvitals-0.1.1 → stackvitals-0.1.2}/server.json +2 -2
- stackvitals-0.1.2/src/mergescout/__init__.py +1 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/__init__.py +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/cli.py +4 -0
- stackvitals-0.1.2/src/stackvitals/core/initcli.py +259 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/editors/vscode/package.json +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/boot.js +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/brand/cube-128.png +0 -0
- stackvitals-0.1.2/src/stackvitals/web/app/brand/cube-256.png +0 -0
- stackvitals-0.1.2/src/stackvitals/web/app/brand/cube-64.png +0 -0
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-3G4SQNUC.js → stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-DLORG2IY.js +1 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-7TJCBOAY.js → stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-FBGIG7YF.js +1 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-RQZPSJ2Y.js → stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-JWBRT5E4.js +1 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-THFUOCPC.js → stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-OFWDU5XX.js +2 -2
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-SACCDA46.js +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/chunks/chunk-TCPSLBAB.js +1 -0
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/more-KMJMJQD3.js → stackvitals-0.1.2/src/stackvitals/web/app/chunks/more-5EXFWDGM.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/help/getting-started.json +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/help/index.json +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/help/reference.json +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/main.css +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/main.js +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/pages/ci.js +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/pages/community.js +1 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/delivery.js +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/deps.js +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/investment.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/pages/overview.js +1 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/prs.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/pages/settings.js +1 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/setup.js +1 -1
- stackvitals-0.1.2/src/stackvitals/web/app/pages/welcome-sheet.js +1 -0
- stackvitals-0.1.2/src/stackvitals/web/app/pages/welcome.js +1 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/index.html +4 -5
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_editor_marks.py +4 -2
- stackvitals-0.1.2/tests/local/test_init_cli.py +152 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_prelaunch.py +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/uv.lock +1 -1
- stackvitals-0.1.2/web/brand/cube-128.png +0 -0
- stackvitals-0.1.2/web/brand/cube-256.png +0 -0
- stackvitals-0.1.2/web/brand/cube-64.png +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/build.mjs +3 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/index.html +1 -1
- stackvitals-0.1.2/web/src/app/LogoPicker.tsx +6 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/boot.ts +3 -6
- stackvitals-0.1.2/web/src/brand/Logo.tsx +6 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/theme.ts +1 -11
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/ci/workflowgen.ts +4 -4
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps/scanning.ts +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/styles/base.css +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/styles/shell.css +1 -1
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/styles/tokens.css +0 -3
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/safety.test.ts +0 -14
- stackvitals-0.1.1/README.md +0 -92
- stackvitals-0.1.1/docs/architecture.md +0 -86
- stackvitals-0.1.1/src/mergescout/__init__.py +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/boot.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-6BDBXA6V.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-MAPYGK3P.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-Y6LUXDM6.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/logos-N5IINUAM.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/help/getting-started.json +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/help/index.json +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/help/reference.json +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/main.css +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/main.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/ci.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/community.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/overview.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/settings.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/welcome-sheet.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/welcome.js +0 -1
- stackvitals-0.1.1/web/src/app/LogoPicker.tsx +0 -38
- stackvitals-0.1.1/web/src/brand/Logo.tsx +0 -11
- stackvitals-0.1.1/web/src/brand/logos.ts +0 -33
- stackvitals-0.1.1/web/src/brand/mark.ts +0 -48
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.env.example +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.gitattributes +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.github/ISSUE_TEMPLATE/benchmark.yml +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.github/build-constraints.txt +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/.gitignore +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/CONTRIBUTING.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/GOVERNANCE.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/LICENSE +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/NOTICE +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/SECURITY.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/LICENSE-DATA.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/adjudicate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/adjudicator-crosscheck.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/adoption/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/adoption/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/adoption/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/adoption/study.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/prepare.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/prepare2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/prompts.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/results2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/score2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/triage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/agents/triage_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/adjudication-detection.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/adoption-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/adoption.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/agreement-gemini-detection.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/codebook-detection.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/detection-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/detection-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/detection.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/labels-gemini-detection.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/replicate-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/ai/replicate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/audit-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/audit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/adjudication-main.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/adjudication-validation.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/affiliation-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/affiliation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/agreement-gemini-main-v2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/agreement-gemini-main.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/agreement-gemini-validation-v2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/agreement-gemini-validation.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/channels-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/channels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/labels-gemini-main-v2.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/labels-gemini-main.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/labels-gemini-validation-v2.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/labels-gemini-validation.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/labels-main.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/labels-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/labels-validation.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/responses-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/responses-validation-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/responses.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/score_labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/triage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/community/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/contribute/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/contribute/frozen-manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/contribute/frozen.json.gz +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/contribute/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/contribute/prospective.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/crosscheck.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/baseline-after-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/baseline-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/baseline.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/coverage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/coverage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/exploits-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/exploits.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/incidents-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/incidents.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/lookalike-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/lookalike.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/release-signs-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/deps/release_signs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/devlake/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/devlake/head-to-head-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/devlake/pick.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/devlake/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/devlake/repos.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/devlake/run.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/devlake/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/adjudication-incidents.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/adjudication-sources-more.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/adjudication-sources.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/agreement-gemini-sources-more.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/agreement-gemini-sources.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/devlake-configured-more-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/devlake-configured-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/devlake_configured.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/environments-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/environments.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/incidents-codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/incidents-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/incidents-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/incidents.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/labels-gemini-incidents.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/labels-gemini-sources-more.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/labels-gemini-sources.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/linkage-more-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/linkage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/linkage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/sources-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/sources-more-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/sources-more-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/sources-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/sources.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/spread-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/dora/spread.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/fair.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/features/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/features/api_use.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/features/branch_growth.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/features/catalog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/features/reports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/features/scorecard.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/features/scorecard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/finalise.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/adjudication-flaky.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/adjudication-fresh.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/adjudication-heldout.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/adjudication-masking.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/agreement-gemini-flaky-v2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/agreement-gemini-flaky.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/agreement-gemini-fresh.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/agreement-gemini-heldout.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/agreement-gemini-masking.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/already-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/already.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/began-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/began.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/card.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/heldout-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/heldout-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/heldout.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/items.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/kinds-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/labels-gemini-flaky-v2.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/labels-gemini-flaky.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/labels-gemini-fresh.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/labels-gemini-heldout.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/labels-gemini-masking.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/masking-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/masking-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/masking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/maybe-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/maybe.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/natural-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/natural.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/outside-fresh-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/outside-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/outside.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/outside_fresh.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/pr-details-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/pr_details.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/safe-check-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/safe-rule-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/safe_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/safe_rule.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/views.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/flaky/wide.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/impact/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/impact/collect_reports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/impact/find_report_repos.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/impact/replay-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/impact/replay_tia.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/impact/search.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/impact/totals.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/label-sensitivity.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/labeller.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/middleware/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/middleware/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/middleware/results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/middleware/run.sh +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/middleware/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/panel-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/panel.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/platform/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/platform/busy-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/platform/busy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/portal/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/portal/scale-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/portal/scale.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/portal/speed-after.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/portal/speed-before.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/portal/speed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/registry.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/replay/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/replay/adjudication-replay.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/replay/agreement-gemini-replay.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/replay/labels-gemini-replay.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/replay/replay-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/replay/replay-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/replay/replay.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/reproduce.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/scorecard/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/scorecard/results-before.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/scorecard/results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/scorecard/run.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/sensitivity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/summary.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/team/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/team/prospective-frozen.json.gz +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/team/prospective-manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/team/prospective.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/team/reviewers-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/team/reviewers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/nulls-2week-before-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/nulls-2week-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/nulls-before-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/nulls-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/nulls.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/shrinkage-groups-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/shrinkage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/bench/accuracy/uncertainty/shrinkage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/deploy/crawler/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/deploy/crawler/gitignore +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/accuracy.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/chaoss.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/connectors.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/coverage.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/dora-guide.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/enterprise.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/faq.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/guides/maintainer.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/guides/manager.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/guides/platform.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/install.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/limitations.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/methods.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/modules.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/privacy.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/roadmap.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/rules.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/scaling.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/settings.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/threat-model.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/docs/triage.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/llms.txt +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/scripts/sync_crawler.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/skills/stackvitals-ci/SKILL.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/skills/stackvitals-community/SKILL.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/skills/stackvitals-contribute/SKILL.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/skills/stackvitals-delivery/SKILL.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/skills/stackvitals-deps/SKILL.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/skills/stackvitals-flow/SKILL.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/skills/stackvitals-portal/SKILL.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/archive/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/archive/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/archive/convert.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/archive/events.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/archive/manifest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/archive/stream.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/ci.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/deploys.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/matched.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/prior.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/shared.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/bench/stars.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/config.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/chain.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/fetch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/runner.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/seed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/state.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/crawl/writer.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/discover/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/discover/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/discover/sweep.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/github/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/github/graphql.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/github/identities.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/github/releases.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/mcp_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/measure/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/measure/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/measure/api_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/measure/count_repos.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/measure/jsonl.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/measure/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/measure/sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/setup_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/bump_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/bumps.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/community_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/delivery_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/deps_map.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/deps_trends.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/exploits.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/flow_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/issues.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/osv.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/owners_watch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/repo_stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/rules.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/silver.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/top_packages.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/triage_math.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/signals/walls.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/snapshot/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/snapshot/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/snapshot/build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/snapshot/publish.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/snapshot/schema.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/snapshot/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/store/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/store/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/store/sync.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/timeutil.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/tool/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/tool/action_pack.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/tool/live.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/tool/queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/tool/refs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/tool/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/mergescout/tool/tracking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/api.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/automation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/burnin.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/coverage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/feedback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/fingerprint.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/gitlab.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/gitlab_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/impact.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/investigate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/monitors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/quarantine_runtime.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/retry.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/selfheal.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/shards.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/share.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/testreports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/tickets.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/track_record.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/triggers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/upload.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/ci/validate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/codeowners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/affiliation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/chaoss.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/context.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/community/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/ai_spend.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/base.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/copilot.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/discord.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/discourse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/incident_io.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/jira.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/linear.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/pagerduty.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/slack.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/sonar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/tracker.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/connectors/writeback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/contribute/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/contribute/brief.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/contribute/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/actors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/agent_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/agreements.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/ai_outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/alerts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/appdata.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/bucket.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/bugs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/calendar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/capex.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/change_risk.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/changes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/chat.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/config.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/dataflow.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/delivery_peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/delivery_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/deliverycli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/devlake_dora.sql +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/digest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/explaincli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/explore.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/exportcli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/findings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/health.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/insights.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/insightscli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/installdoc.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/investment.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/joins.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/llmsdoc.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/merge_queue.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/metrics.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/model.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/projectcli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/propose.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/pulse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/recorded.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/releases.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/resync.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/schema.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/services.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/settings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/sqlcli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/summary.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/time.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/tomledit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/uicli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/webapp.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/what_changed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/core/workspace.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/actions_vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/dossier.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/fixplan.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/guarddog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/hygiene.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/imports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/lockfiles.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/lookalike.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/reach.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/release.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/runtimes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/supply.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/deps/vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/editors/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/editors/vscode/extension.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/editors/vscode/marks.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/automate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/code_hosts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/gitlab_mr.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/knowledge.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/preflight.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/rules.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/survival.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/flow/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/mcp_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/batch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/campaigns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/catalog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/descriptor.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/github.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/golden.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/history.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/inventory.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/pages.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/rollup.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/portal/scorecard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/security/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/security/probes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/security/repo_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/security/workflows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/shell.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/site.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/LICENSES.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/AddRepo-KRPZXWCY.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/SetupRunning-XWFQAKRZ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/accuracy-data-OQTDXI7Y.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/agents-data-BAL6QAOF.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-24LFKFZ6.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-3IXWEOIJ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-3ROQFHPV.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-45PGAQRO.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-4H53OYLG.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-4LUI7O5P.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-4SQPQ5TB.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-4WKQTWUC.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-576YHDEK.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-6RLVD2DT.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-763NH7PP.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-76WAVKUG.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-7II2BD5F.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-ASYNLVOP.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-CTKDYZMG.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-CVB26NMC.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-G7NGB5UX.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-GPVLJRZD.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-GQYFN4PE.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-GT4EAKAO.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-IYMBFPCV.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-LAAGCPU3.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-P5TXDD45.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-PABICGBL.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-RPXHAG6F.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-S2ZBMEVA.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-S654BBEP.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-T7QVTNXF.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-TO4VVRZ7.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-VQ5YXO54.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-VWKSMFWJ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/chunk-YTANGYYH.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/connect-KONYWYTT.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/connections-data-2DYS4UVW.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/more-PC6FVS3P.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/more-RCIVCUDE.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/more-ZKKRY6NO.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/sealbox-35YL4EUH.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/session-DYYTOE2K.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/settingsApply-2HRJEZYM.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/settingsReview-GX2FZQ4M.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/chunks/uPlot.esm-OIWT3AHJ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/ci/impact.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/ci/quarantine.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/ci/tickets.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/alerts.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/app.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/community.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/connectors.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/data.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/decisions.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/delivery.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/deps.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/flow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/health.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/insights.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/pulse.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/security.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/summary/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/summary/prs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/summary/tests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/supply.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/mobile/vulns.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/alerts.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/app.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/community.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/connectors.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/data.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/decisions.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/delivery.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/deps.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/flow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/health.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/insights.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/pulse.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/security.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/summary/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/summary/prs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/summary/tests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/supply.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/payments-api/vulns.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/portal.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/settings.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/alerts.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/app.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/community.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/connectors.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/data.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/decisions.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/delivery.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/deps.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/flow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/health.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/insights.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/pulse.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/security.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/summary/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/summary/prs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/summary/tests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/supply.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/demo/web-app/vulns.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/fonts/plex-mono-400.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/fonts/plex-sans-400.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/fonts/plex-sans-600.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/fonts/plex-sans-condensed-700.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/help/accuracy.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/help/connectors.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/help/modules.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/help/privacy-and-security.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/about.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/about.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/activity.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/activity.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/agents.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/agents.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/ci.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/community.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/connections.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/connections.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/delivery.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/deps.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/explore.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/explore.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/health.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/health.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/help.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/help.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/insights.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/insights.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/investment.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/overview.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/portal.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/portal.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/prs.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/settings.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/setup.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/standing.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/pages/standing.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/app/settings-workflow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/site/index.html +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/site/integrations.html +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/site/setup.html +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/src/stackvitals/web/site/site.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/templates/gitlab/stackvitals.yml +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/ci_fake.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/conftest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/fixtures/issue_page.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/fixtures/osv-scan.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/fixtures/pr_page.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/fixtures/repo_meta.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_actions_vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_adjudicate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_adoption_study.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_agent_leaderboard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_agent_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_agreement_nudges.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ai_markers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ai_matched.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ai_outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ai_spend.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_api_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_app_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_archive_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_docs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_files.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_guarddog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_mcp_messages.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_sql.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_uicli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_audit_workflows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_base_images.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_began_after.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_bench_by_repo.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_bench_deploys.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_bench_report_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_bench_stars.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_branch_growth.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_bucket.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_bug_backlog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_capex.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_catalog_descriptor.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_change_risk.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_changes_14d.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_chat.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_action_pr.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_already_failing.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_analyze_tests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_artifacts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_automation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_began.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_bench_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_burnin.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_comment_shape.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_depth.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_feedback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_feedback_all.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_fingerprint.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_gitlab.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_groups.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_impact.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_issue_lifecycle.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_masking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_maybe_flaky.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_mcp.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_monitors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_outside.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_outside_ci_edit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_pr_details.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_push_evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_quarantine_mark.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_report_formats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_retry.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_review_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_safe_rule.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_settings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_surfaces_m3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_test_verdict.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_testreports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_triggers_script.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_upload.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_verdict_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_ci_webhook_formats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_code_hosts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_code_survival.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_affiliation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_context.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_dependency.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_discussions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_fetch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_community_stated.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_config.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connector_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connector_framework.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connector_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connectors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connectors_chat.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connectors_discourse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connectors_epics.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_connectors_writeback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_contribute_brief.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_contribute_prospective.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_contribute_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_convert.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_actors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_agreements.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_alerts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_appdata.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_delivery_peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_delivery_surfaces.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_digest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_digest_step.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_explore.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_findings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_findings_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_insights.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_insights_surfaces.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_metrics.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_model.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_otel.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_propose.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_pulse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_recovery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_request_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_requests_wording.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_roles_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_runner.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_schema.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_services.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_settings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_sql_org.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_summary.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_summary_churn.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_tomledit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_ui.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_webapp.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_webapp_version.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_core_workspace.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_cost_guard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_count_repos.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_coverage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_fetch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_runner.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_seed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_state.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_crawl_writer.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_delivery_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_delivery_deploy_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_delivery_rules_m2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_bumps.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_crawl.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_exploits.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_fixed_versions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_map.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_osv.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_top.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_trend_quiet.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_trends.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dep_watch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deploy_attempts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deploy_ranges.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deployment_history.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deployment_list.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_dossier.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_hygiene.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_imports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_lookalike.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_paths.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_policy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_reach.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_release.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_review_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_runtimes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_deps_vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_devlake_cicd.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dora_evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dora_proof.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dora_rows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_dora_weeks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_enterprise_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_events.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_explain_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_fair.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_fixplan.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flake_code_kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flaky_natural.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flaky_sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flaky_score_fair.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flaky_test_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flaky_tickets.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_automate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_bench_pipeline.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_collect_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_definitions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_m2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_preflight.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_round2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_round3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_windows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_flow_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_fork_reports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_gitlab_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_gitlab_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_graphql.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_health.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_identities.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_identity_everywhere.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_identity_match.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_insights_chains.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_investment.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_jira_fields.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_knowledge_names.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_labeller.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_llms_txt.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_local_run.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_m1_small_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_masking_card.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_mcp_core.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_mcp_provenance.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_merge_queue.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_mergescout_token.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_modular_install.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_nulls_power.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_numbers_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_odds_backtest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_outside_fresh.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_pagers_copilot.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_pages_deploy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_parsing_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_peer_fit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_polish_m1.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_polish_m2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_polish_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_app_facts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_campaigns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_catalog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_golden.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_handcheck.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_history.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_html.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_m1.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_nudges.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_reviews.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_rollup.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_portal_scorecard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_pr_exclusions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_pr_licences.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_pr_rules.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_production_branches.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_project_dora.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_pulse_trend.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_quarantine_expiry.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_quarantine_runners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_quarantine_runtime.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_recorded.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_relay_and_polish.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_release_quality.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_releases.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_releases_ratelimit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_report_validate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_response_times.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_result_quality.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_resync.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_review_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_review_fixes_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_review_fixes_p3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_review_fixes_requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_review_m3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_schema_sections.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_scorecard_agreement.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_security_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_selfheal.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_services.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_setup_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_setup_template.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_shared_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_shell_app_link.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_shrinkage_groups.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_signals_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_signals_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_signals_identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_signals_issues.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_signals_labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_signals_repo_stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_signals_walls.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_site_build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_snapshot_build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_snapshot_publish.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_sonar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_state_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_store_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_stream.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_suite_packaging.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_supply.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_sweep.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_team_dora.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_test_variants.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tool_action_pack.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tool_live.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tool_queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tool_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tool_speed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tool_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tool_tracking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_tracker.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_triage_math.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_triage_pipeline.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_uncertainty.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_verdict_feedback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_verdict_strict.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_vulns_dev_only.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_vulns_ignores.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_vulns_inputs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_web_build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_web_next_setup.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_web_replay_parity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_what_changed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/local/test_work_calendar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/signals_data.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_accuracy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_ci.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_community.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_connectors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_contribute.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_core.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_crawl.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_deps.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_discover.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_github.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_insights.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_portal.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_signals.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_snapshot.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_surfaces.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_team.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_tool.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/test_flow_web.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/tests/tool_data.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/demo/extra-ci.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/demo/extra-delivery.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/demo/extra-deps.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/demo/extra-people.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/demo/extra-portal.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/demo/settings.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/demo/source.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/defaults.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/fixtures.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/flows.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/links.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/playwright.config.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/serve.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/sweep.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/e2e/welcome.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/package-lock.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/package.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/scripts/docs.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/app/AddRepo.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/app/App.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/app/Profile.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/app/jump.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/app/router.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/app/routes.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/charts/BarChart.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/charts/MetricHero.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/charts/ScrubChart.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/charts/Sparkline.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/charts/metric.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/files.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/format.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/repos.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/requestIssue.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/source.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/store.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/types.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/data/write.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/Decide.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/Evidence.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/Health.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/SetupRunning.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/agents-data.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/brand-logos.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/connect.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/connect.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/connectRepos.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/connections-data.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/connstatus.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/helpLink.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/markdown.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/sealbox.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/sealedbox.d.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/secrets.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/settingsApply.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/settingsModel.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/settingsPending.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/settingsReplay.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/settingsReview.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/settingsToml.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/text-css.d.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/features/vitals.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/caps.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/client.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/config.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/detect.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/diff.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/links.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/mine.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/names.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/oauth.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/open.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/session.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/setup.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/signout.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/token.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/watch.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/github/workflow.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/main.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/about/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/about-accuracy.d.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/about.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/about.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/accuracy-data.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/activity.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/activity.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/agents/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/agents.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/agents.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/ci/more.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/ci/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/ci/setup.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/ci.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/ci.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/community/command.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/community/report.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/community.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/community.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/connections.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/connections.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/delivery/blocks.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/delivery/blocks.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/delivery/more.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/delivery/sources.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/delivery.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/delivery.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps/blocks.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps/blocks.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps/lookup.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps/security.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps/tools.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/deps.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/explore/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/explore/query.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/explore.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/explore.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/health.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/health.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/help/commands.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/help.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/help.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/insights/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/insights.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/insights.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/investment.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/investment.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/overview/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/overview.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/overview.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal/access.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal/panel.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal/panel.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal/setup.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal/tools.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/portal.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/prs/more.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/prs/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/prs/preflight.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/prs.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/prs.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/settings.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/settings.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/setup.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/setup.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/standing.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/standing.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/welcome-sheet.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/welcome-sheet.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/pages/welcome.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/styles/charts.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/styles/components.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/styles/index.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/styles/sheet.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/Button.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/Page.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/Popover.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/Portal.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/Sheet.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/Table.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/bits.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/controls.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/icons.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/motion.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/src/ui/prefill.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/ciworkflow.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/client.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/connstatus.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/depstools.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/explorequery.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/fake.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/links.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/load.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/markdown.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/portalsetup.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/preflight.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/run.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/secrets.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/settings.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/setup.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/test/workflow.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/web/tsconfig.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/package.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/relay/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/relay/package.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/relay/src/index.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/relay/test/index.test.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/relay/wrangler.toml +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/src/index.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/test/index.test.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.2}/worker/wrangler.toml +0 -0
|
@@ -34,18 +34,18 @@ jobs:
|
|
|
34
34
|
echo "skip=true" >> "$GITHUB_OUTPUT"
|
|
35
35
|
echo "Today's snapshot is already published; nothing to do."
|
|
36
36
|
fi
|
|
37
|
-
- uses: actions/checkout@
|
|
37
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
38
38
|
if: steps.guard.outputs.skip != 'true'
|
|
39
39
|
with:
|
|
40
40
|
persist-credentials: false
|
|
41
|
-
- uses: actions/setup-python@
|
|
41
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
42
42
|
if: steps.guard.outputs.skip != 'true'
|
|
43
43
|
with:
|
|
44
44
|
python-version: "3.11"
|
|
45
45
|
cache: pip
|
|
46
46
|
cache-dependency-path: pyproject.toml
|
|
47
47
|
# Downloaded crawl bundles are kept between runs, so each day fetches only new ones.
|
|
48
|
-
- uses: actions/cache@
|
|
48
|
+
- uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0
|
|
49
49
|
if: steps.guard.outputs.skip != 'true'
|
|
50
50
|
with:
|
|
51
51
|
path: data/bronze
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: MCP registry
|
|
2
|
+
# Lists server.json in the MCP registry after each successful release (or by hand). GitHub's OIDC token proves the
|
|
3
|
+
# org namespace, so no token is stored.
|
|
4
|
+
on:
|
|
5
|
+
workflow_run:
|
|
6
|
+
workflows: [Release]
|
|
7
|
+
types: [completed]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
permissions: {}
|
|
10
|
+
jobs:
|
|
11
|
+
publish:
|
|
12
|
+
if: github.repository == 'stackvitals/stackvitals' && (github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success')
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
timeout-minutes: 10
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
id-token: write # the registry's GitHub OIDC sign-in
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
20
|
+
with:
|
|
21
|
+
persist-credentials: false
|
|
22
|
+
# The released commit, not whatever main holds now.
|
|
23
|
+
ref: ${{ github.event.workflow_run.head_sha || github.sha }}
|
|
24
|
+
- name: Install mcp-publisher (pinned, checksum checked)
|
|
25
|
+
run: |
|
|
26
|
+
curl -sSfL -o mcp-publisher.tar.gz https://github.com/modelcontextprotocol/registry/releases/download/v1.8.7/mcp-publisher_linux_amd64.tar.gz
|
|
27
|
+
echo "00b21004149a4ce66f0782508ae4a2bce67d1bea395a8da0bd8028159fb59579 mcp-publisher.tar.gz" | sha256sum -c -
|
|
28
|
+
tar -xzf mcp-publisher.tar.gz mcp-publisher
|
|
29
|
+
- name: Publish
|
|
30
|
+
run: |
|
|
31
|
+
./mcp-publisher login github-oidc
|
|
32
|
+
./mcp-publisher publish
|
|
@@ -30,8 +30,8 @@ jobs:
|
|
|
30
30
|
# Code search (finding adopters) needs a person's token; the built-in one reads everything else.
|
|
31
31
|
GH_TOKEN: ${{ secrets.PROSPECTIVE_TOKEN || github.token }}
|
|
32
32
|
steps:
|
|
33
|
-
- uses: actions/checkout@
|
|
34
|
-
- uses: actions/setup-python@
|
|
33
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
34
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
35
35
|
with:
|
|
36
36
|
python-version: "3.11"
|
|
37
37
|
cache: pip
|
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
permissions:
|
|
15
15
|
contents: read
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
18
18
|
with:
|
|
19
19
|
persist-credentials: false
|
|
20
20
|
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
- name: Build
|
|
24
24
|
# The build backend is pinned, so a new upload to PyPI can never change what gets signed.
|
|
25
25
|
run: uv build --build-constraint .github/build-constraints.txt --no-cache --out-dir dist
|
|
26
|
-
- uses: actions/upload-artifact@
|
|
26
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
27
27
|
with:
|
|
28
28
|
name: dist
|
|
29
29
|
path: dist/
|
|
@@ -39,7 +39,7 @@ jobs:
|
|
|
39
39
|
id-token: write # Sigstore's keyless signing and the provenance attestation
|
|
40
40
|
attestations: write
|
|
41
41
|
steps:
|
|
42
|
-
- uses: actions/download-artifact@
|
|
42
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
|
43
43
|
with:
|
|
44
44
|
name: dist
|
|
45
45
|
path: dist
|
|
@@ -85,7 +85,7 @@ jobs:
|
|
|
85
85
|
id-token: write # the short-lived PyPI upload token, by OIDC
|
|
86
86
|
steps:
|
|
87
87
|
# The files the build job made and the publish job signed, not a rebuild.
|
|
88
|
-
- uses: actions/download-artifact@
|
|
88
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
|
89
89
|
with:
|
|
90
90
|
name: dist
|
|
91
91
|
path: dist
|
|
@@ -13,11 +13,11 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
timeout-minutes: 30
|
|
15
15
|
steps:
|
|
16
|
-
- uses: actions/checkout@
|
|
16
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
17
17
|
with:
|
|
18
18
|
persist-credentials: false
|
|
19
19
|
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
20
|
-
- uses: actions/setup-node@
|
|
20
|
+
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
|
21
21
|
with:
|
|
22
22
|
node-version: 22
|
|
23
23
|
# The web app's build tools, so the suite can rebuild the app and check the committed build is current.
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.2 (2026-10-31)
|
|
4
|
+
|
|
5
|
+
- `stackvitals init owner/repo` sets StackVitals up in one command: commits the workflow (or opens a pull request), follows
|
|
6
|
+
the first run and turns on Pages for a public repo; a private repo keeps Pages off and opens with `stackvitals ui`.
|
|
7
|
+
- The StackVitals cube is the app's logo in the sidebar, the browser tab and the splash; the logo picker is gone.
|
|
8
|
+
- The README opens with the logo, a short tour and the architecture; the architecture docs open with a detailed diagram.
|
|
9
|
+
|
|
3
10
|
## 0.1.1 (2026-10-31)
|
|
4
11
|
|
|
5
12
|
- The Action's description is shorter, to fit the GitHub Marketplace listing. No other change.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: stackvitals
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Free, open-source developer suite: CI health, team flow, dependencies, community, and MergeScout for contributors.
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -40,11 +40,29 @@ Provides-Extra: sql
|
|
|
40
40
|
Requires-Dist: duckdb<3,>=1.3; extra == 'sql'
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
<p align="center">
|
|
44
|
+
<picture>
|
|
45
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/lockup-dark.png">
|
|
46
|
+
<img alt="StackVitals" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/lockup-light.png" width="420">
|
|
47
|
+
</picture>
|
|
48
|
+
</p>
|
|
49
|
+
|
|
50
|
+
<p align="center"><b>The vital signs of your GitHub repo.</b> Flaky tests, slow reviews, delivery and DORA, risky
|
|
51
|
+
dependencies and community health, measured in your own GitHub Actions.</p>
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
<a href="https://pypi.org/project/stackvitals/"><img alt="PyPI" src="https://img.shields.io/pypi/v/stackvitals?label=PyPI"></a>
|
|
55
|
+
<a href="https://github.com/marketplace/actions/stackvitals"><img alt="GitHub Marketplace" src="https://img.shields.io/badge/Marketplace-StackVitals-green?logo=github"></a>
|
|
56
|
+
<a href="https://github.com/stackvitals/stackvitals/actions/workflows/tests.yml"><img alt="Tests" src="https://github.com/stackvitals/stackvitals/actions/workflows/tests.yml/badge.svg"></a>
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
<p align="center">
|
|
60
|
+
<picture>
|
|
61
|
+
<source type="image/avif" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/stackvitals-video.avif">
|
|
62
|
+
<img alt="A 27-second tour: three failing CI checks sorted by StackVitals, then the app's Overview, CI Health, Pull Requests and Delivery pages" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/stackvitals-video.gif" width="880">
|
|
63
|
+
</picture>
|
|
64
|
+
<br><sub>A tour on demo data. <a href="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/stackvitals-video.mp4">Watch it with sound</a>.</sub>
|
|
65
|
+
</p>
|
|
48
66
|
|
|
49
67
|
A free, open-source developer suite for GitHub: CI health and flaky tests, pull request flow, delivery and DORA,
|
|
50
68
|
dependencies, community health and an org portal. It runs in your own GitHub Actions and keeps its history in your own
|
|
@@ -65,31 +83,14 @@ Install it as the GitHub Action `stackvitals/stackvitals@v0` (also on the
|
|
|
65
83
|
|
|
66
84
|
<!-- mcp-name: io.github.stackvitals/stackvitals -->
|
|
67
85
|
|
|
68
|
-
|
|
86
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
69
87
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
- **Where you deploy from.** With no setup, StackVitals named the right deployment source for 53 of 60 repos (30 of
|
|
73
|
-
35 held out). On the same 60, DevLake's default pattern got 9 and a pattern a user would typically write got 22. A
|
|
74
|
-
wrong source makes every DORA number wrong.
|
|
75
|
-
- **Who answered an issue.** Of the first comments by non-maintainers that the github/issue-metrics action counts as
|
|
76
|
-
the answer, 46% are drive-bys (40-52%, held-out repos). StackVitals counts the project's answers: maintainers,
|
|
77
|
-
regular responders and triagers.
|
|
78
|
-
- **Whether AI help changed anything.** Agents' pull requests look 9 points less likely than people's to be merged by someone else.
|
|
79
|
-
Compared within the same repo, month and size, the gap is +0.5 points (0.0 to +1.1): most of the raw gap comes
|
|
80
|
-
from which repos agents work in and the size of their changes.
|
|
81
|
-
|
|
82
|
-
It publishes what failed too. Of the failures an old rule called safe to re-run, 44% (15 of 34) were caused by the
|
|
83
|
-
change. The tightened rule still got 13 of 81 held-out calls wrong (16%). A stricter one (a flake's sign in the log,
|
|
84
|
-
no changed file named) got none of 4 fresh calls wrong, too few to show 5%, so nothing is called safe: likely flakes
|
|
85
|
-
are re-run, never passed by the check. Each sample was labelled by two
|
|
86
|
-
model families (Claude and Gemini); no person has audited the labels.
|
|
87
|
-
|
|
88
|
-
## What you see first
|
|
88
|
+
# What you see first
|
|
89
89
|
|
|
90
90
|
When CI fails on a pull request, one comment sorts each failure, from the repo's own CI history:
|
|
91
91
|
|
|
92
92
|
> **StackVitals: about this CI failure**
|
|
93
|
+
>
|
|
93
94
|
> 1 of 3 failure(s) look like flakes; the rest need a look.
|
|
94
95
|
>
|
|
95
96
|
> | Verdict | What failed | Why |
|
|
@@ -100,7 +101,43 @@ When CI fails on a pull request, one comment sorts each failure, from the repo's
|
|
|
100
101
|
|
|
101
102
|
The verdict check still blocks until CI is green: a known flake is re-run, never waved through.
|
|
102
103
|
|
|
103
|
-
|
|
104
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
105
|
+
|
|
106
|
+
# Quick start
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
pip install stackvitals
|
|
110
|
+
gh auth login # once, so StackVitals can use your GitHub sign-in
|
|
111
|
+
stackvitals init your-name/your-repo
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
`init` adds one workflow file to your repo, runs it once and turns on your dashboard:
|
|
115
|
+
|
|
116
|
+
- **Public repo:** the dashboard goes live at `https://your-name.github.io/your-repo/`.
|
|
117
|
+
- **Private repo:** your data stays in your private repo, and the dashboard opens on your machine:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
stackvitals ui your-name/your-repo
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Just looking? `stackvitals ci report owner/repo` reports CI health for any public repo in about 20 seconds, with
|
|
124
|
+
nothing added to it. Prefer clicking? The app's **Setup** page does the same as `init`. More:
|
|
125
|
+
[docs/quickstart.md](docs/quickstart.md).
|
|
126
|
+
|
|
127
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
128
|
+
|
|
129
|
+
# How it works
|
|
130
|
+
|
|
131
|
+
<picture>
|
|
132
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/architecture-overview-dark.png">
|
|
133
|
+
<img alt="How StackVitals works: your repo and your tools feed a StackVitals run in GitHub Actions (collect, analyse with six modules, save), which commits to the stackvitals-data branch and feeds the web app, PR comments, alerts and the MCP server. No server, no account." src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/architecture-overview-light.png">
|
|
134
|
+
</picture>
|
|
135
|
+
|
|
136
|
+
Every step, from what starts a run to what you see: [the architecture in detail](docs/architecture.md).
|
|
137
|
+
|
|
138
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
139
|
+
|
|
140
|
+
# Modules
|
|
104
141
|
|
|
105
142
|
| Module | What it answers | Status |
|
|
106
143
|
|---|---|---|
|
|
@@ -121,7 +158,76 @@ less; its behaviour may still change.
|
|
|
121
158
|
test reports from other CI systems, Backstage, and DevLake's tables ([docs/connectors.md](docs/connectors.md)). AI
|
|
122
159
|
agents get every module through one MCP server (11 core tools by default, all 35 with `--tools all`).
|
|
123
160
|
|
|
124
|
-
|
|
161
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
162
|
+
|
|
163
|
+
# Connect your tools (optional)
|
|
164
|
+
|
|
165
|
+
Everything works with GitHub's built-in token. Integrations are optional; pass their keys as repository secrets:
|
|
166
|
+
|
|
167
|
+
```yaml
|
|
168
|
+
- uses: stackvitals/stackvitals@v0
|
|
169
|
+
with:
|
|
170
|
+
webhook: ${{ secrets.SLACK_WEBHOOK }} # alerts to Slack, Teams or Discord
|
|
171
|
+
pagerduty-token: ${{ secrets.PAGERDUTY_TOKEN }} # incidents count in DORA
|
|
172
|
+
jira-email: ${{ secrets.JIRA_EMAIL }} # Jira, with its site URL under
|
|
173
|
+
jira-token: ${{ secrets.JIRA_TOKEN }} # [connectors.jira] in .github/stackvitals.toml
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Every input: [docs/install.md](docs/install.md). Every setting: [docs/settings.md](docs/settings.md).
|
|
177
|
+
|
|
178
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
179
|
+
|
|
180
|
+
# AI agents (MCP)
|
|
181
|
+
|
|
182
|
+
Your coding agent can ask StackVitals before and while it changes code: *is this failure a known flake?*, *what is
|
|
183
|
+
blocking PR #123?*, *who should review this?*, *is this package safe to add?* It answers from your repo's history, with
|
|
184
|
+
the evidence.
|
|
185
|
+
|
|
186
|
+
Claude Code:
|
|
187
|
+
|
|
188
|
+
```sh
|
|
189
|
+
claude mcp add stackvitals -- uvx stackvitals serve
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Claude Desktop, Cursor, VS Code and other MCP clients:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"mcpServers": {
|
|
197
|
+
"stackvitals": { "command": "uvx", "args": ["stackvitals", "serve"] }
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
It uses your `gh` login or `GITHUB_TOKEN`. The 11 core tools load by default (`ci_failure`, `is_known_flake`,
|
|
203
|
+
`pr_queue`, `who_should_review`, `check_package`, `insights` and more); `stackvitals serve --tools all` loads all 35.
|
|
204
|
+
Listed in the MCP registry as `io.github.stackvitals/stackvitals`.
|
|
205
|
+
|
|
206
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
207
|
+
|
|
208
|
+
# Three things it gets right that others get wrong
|
|
209
|
+
|
|
210
|
+
Measured on public repos beside the rules other tools use ([docs/accuracy.md](docs/accuracy.md)):
|
|
211
|
+
|
|
212
|
+
- **Where you deploy from.** With no setup, StackVitals named the right deployment source for 53 of 60 repos (30 of
|
|
213
|
+
35 held out). On the same 60, DevLake's default pattern got 9 and a pattern a user would typically write got 22. A
|
|
214
|
+
wrong source makes every DORA number wrong.
|
|
215
|
+
- **Who answered an issue.** Of the first comments by non-maintainers that the github/issue-metrics action counts as
|
|
216
|
+
the answer, 46% are drive-bys (40-52%, held-out repos). StackVitals counts the project's answers: maintainers,
|
|
217
|
+
regular responders and triagers.
|
|
218
|
+
- **Whether AI help changed anything.** Agents' pull requests look 9 points less likely than people's to be merged by someone else.
|
|
219
|
+
Compared within the same repo, month and size, the gap is +0.5 points (0.0 to +1.1): most of the raw gap comes
|
|
220
|
+
from which repos agents work in and the size of their changes.
|
|
221
|
+
|
|
222
|
+
It publishes what failed too. Of the failures an old rule called safe to re-run, 44% (15 of 34) were caused by the
|
|
223
|
+
change. The tightened rule still got 13 of 81 held-out calls wrong (16%). A stricter one (a flake's sign in the log,
|
|
224
|
+
no changed file named) got none of 4 fresh calls wrong, too few to show 5%, so nothing is called safe: likely flakes
|
|
225
|
+
are re-run, never passed by the check. Each sample was labelled by two
|
|
226
|
+
model families (Claude and Gemini); no person has audited the labels.
|
|
227
|
+
|
|
228
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
229
|
+
|
|
230
|
+
# Learn more
|
|
125
231
|
|
|
126
232
|
- **Five minutes:** [docs/quickstart.md](docs/quickstart.md). Try CI Health on any public repo first (needs
|
|
127
233
|
[uv](https://docs.astral.sh/uv/) and `gh auth login` or a `GITHUB_TOKEN`):
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/lockup-dark.png">
|
|
4
|
+
<img alt="StackVitals" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/lockup-light.png" width="420">
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<p align="center"><b>The vital signs of your GitHub repo.</b> Flaky tests, slow reviews, delivery and DORA, risky
|
|
9
|
+
dependencies and community health, measured in your own GitHub Actions.</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://pypi.org/project/stackvitals/"><img alt="PyPI" src="https://img.shields.io/pypi/v/stackvitals?label=PyPI"></a>
|
|
13
|
+
<a href="https://github.com/marketplace/actions/stackvitals"><img alt="GitHub Marketplace" src="https://img.shields.io/badge/Marketplace-StackVitals-green?logo=github"></a>
|
|
14
|
+
<a href="https://github.com/stackvitals/stackvitals/actions/workflows/tests.yml"><img alt="Tests" src="https://github.com/stackvitals/stackvitals/actions/workflows/tests.yml/badge.svg"></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<picture>
|
|
19
|
+
<source type="image/avif" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/stackvitals-video.avif">
|
|
20
|
+
<img alt="A 27-second tour: three failing CI checks sorted by StackVitals, then the app's Overview, CI Health, Pull Requests and Delivery pages" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/stackvitals-video.gif" width="880">
|
|
21
|
+
</picture>
|
|
22
|
+
<br><sub>A tour on demo data. <a href="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/stackvitals-video.mp4">Watch it with sound</a>.</sub>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
A free, open-source developer suite for GitHub: CI health and flaky tests, pull request flow, delivery and DORA,
|
|
26
|
+
dependencies, community health and an org portal. It runs in your own GitHub Actions and keeps its history in your own
|
|
27
|
+
repo: no StackVitals-hosted backend, account or subscription, and optional integrations use services and keys you
|
|
28
|
+
choose. GitHub's built-in token covers every module in a repo; an org's private repos in the Portal need a read-only
|
|
29
|
+
App, and org-wide Copilot usage an org token. Actions minutes on private repos are billed by GitHub as usual
|
|
30
|
+
([docs/scaling.md](docs/scaling.md#actions-minutes-private-repos)). The rules behind its verdicts are checked on public
|
|
31
|
+
data, with the losses published.
|
|
32
|
+
|
|
33
|
+
Every run publishes an app on your repo's GitHub Pages (or `stackvitals ui owner/repo` on your machine): one page per
|
|
34
|
+
module, decisions and settings saved straight from the browser, setup for more repos in a few clicks once GitHub is
|
|
35
|
+
connected (connecting takes one token, made from a prefilled GitHub page; Pages are turned on for public repos), and a demo at
|
|
36
|
+
`?demo=1`. [docs/app.md](docs/app.md) walks through it.
|
|
37
|
+
|
|
38
|
+
Install it as the GitHub Action `stackvitals/stackvitals@v0` (also on the
|
|
39
|
+
[GitHub Marketplace](https://github.com/marketplace/actions/stackvitals)), or the CLI and MCP server from PyPI:
|
|
40
|
+
`pip install stackvitals` (or run it without installing: `uvx stackvitals`).
|
|
41
|
+
|
|
42
|
+
<!-- mcp-name: io.github.stackvitals/stackvitals -->
|
|
43
|
+
|
|
44
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
45
|
+
|
|
46
|
+
# What you see first
|
|
47
|
+
|
|
48
|
+
When CI fails on a pull request, one comment sorts each failure, from the repo's own CI history:
|
|
49
|
+
|
|
50
|
+
> **StackVitals: about this CI failure**
|
|
51
|
+
>
|
|
52
|
+
> 1 of 3 failure(s) look like flakes; the rest need a look.
|
|
53
|
+
>
|
|
54
|
+
> | Verdict | What failed | Why |
|
|
55
|
+
> |---|---|---|
|
|
56
|
+
> | Likely flaky | test `t::flaky_one` | flaked 6 times in 80 runs in the last 30 days, last 2026-10-20, and the message shows a flake's sign ("TimeoutError"): looks like a flake, check the error, then re-run it |
|
|
57
|
+
> | New | test `t::new_one` | no earlier flakes: likely from this change (fails with "assert result == 2") |
|
|
58
|
+
> | Already failing on main | test `t::broken_one` | also failing on the default branch, not caused by this change |
|
|
59
|
+
|
|
60
|
+
The verdict check still blocks until CI is green: a known flake is re-run, never waved through.
|
|
61
|
+
|
|
62
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
63
|
+
|
|
64
|
+
# Quick start
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
pip install stackvitals
|
|
68
|
+
gh auth login # once, so StackVitals can use your GitHub sign-in
|
|
69
|
+
stackvitals init your-name/your-repo
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`init` adds one workflow file to your repo, runs it once and turns on your dashboard:
|
|
73
|
+
|
|
74
|
+
- **Public repo:** the dashboard goes live at `https://your-name.github.io/your-repo/`.
|
|
75
|
+
- **Private repo:** your data stays in your private repo, and the dashboard opens on your machine:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
stackvitals ui your-name/your-repo
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Just looking? `stackvitals ci report owner/repo` reports CI health for any public repo in about 20 seconds, with
|
|
82
|
+
nothing added to it. Prefer clicking? The app's **Setup** page does the same as `init`. More:
|
|
83
|
+
[docs/quickstart.md](docs/quickstart.md).
|
|
84
|
+
|
|
85
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
86
|
+
|
|
87
|
+
# How it works
|
|
88
|
+
|
|
89
|
+
<picture>
|
|
90
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/architecture-overview-dark.png">
|
|
91
|
+
<img alt="How StackVitals works: your repo and your tools feed a StackVitals run in GitHub Actions (collect, analyse with six modules, save), which commits to the stackvitals-data branch and feeds the web app, PR comments, alerts and the MCP server. No server, no account." src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/architecture-overview-light.png">
|
|
92
|
+
</picture>
|
|
93
|
+
|
|
94
|
+
Every step, from what starts a run to what you see: [the architecture in detail](docs/architecture.md).
|
|
95
|
+
|
|
96
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
97
|
+
|
|
98
|
+
# Modules
|
|
99
|
+
|
|
100
|
+
| Module | What it answers | Status |
|
|
101
|
+
|---|---|---|
|
|
102
|
+
| **[CI Health](docs/modules.md#ci-health)** | Which jobs and tests are flaky or slowing down, who owns them, coverage and patch coverage | stable |
|
|
103
|
+
| **[Team Flow](docs/modules.md#team-flow)** | Who has to act next on each pull request, and how long reviews take | stable |
|
|
104
|
+
| **[Delivery](docs/modules.md#delivery-cycle-time-and-dora)** | Cycle time split into coding, pickup, review and deploy (LinearB's phases), DORA's five metrics, AI-assisted work compared like with like | stable |
|
|
105
|
+
| **[Insights](docs/modules.md#insights-what-to-fix-first)** | What to fix first across modules, ranked by hours lost, with alerts and a weekly digest | stable |
|
|
106
|
+
| **[Dependency Steward](docs/modules.md#dependency-steward)** | Known vulnerabilities and malware in the lockfiles OSV-Scanner reads (npm, PyPI, Go, Rust, Maven, Ruby, .NET, PHP and more; 65 of 100 sampled repos had one); whether to add, keep or upgrade a package, with upgrade evidence from public repos | preview |
|
|
107
|
+
| **[Community](docs/modules.md#community)** | Where newcomers drop out, how fast they get an answer, who carries the work | stable |
|
|
108
|
+
| **[Portal](docs/modules.md#portal)** | A lightweight catalog on GitHub alone: what an org owns, who owns it (checked), scorecards, golden paths and an org-wide view | preview |
|
|
109
|
+
| **Explore** | SQL over your repo's data in the browser, with links to share a query | preview |
|
|
110
|
+
| **[Contribute](docs/modules.md#contribute-mergescout)** | Open-source issues an outsider can realistically get merged | stable |
|
|
111
|
+
|
|
112
|
+
Stable: measured, reviewed and used on the sandbox for every release. Preview: built and tested, but newer or measured on
|
|
113
|
+
less; its behaviour may still change.
|
|
114
|
+
|
|
115
|
+
**Works with** Jira Cloud, Linear, PagerDuty, incident.io, Copilot usage reports, Slack, Teams, Discord, Discourse,
|
|
116
|
+
test reports from other CI systems, Backstage, and DevLake's tables ([docs/connectors.md](docs/connectors.md)). AI
|
|
117
|
+
agents get every module through one MCP server (11 core tools by default, all 35 with `--tools all`).
|
|
118
|
+
|
|
119
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
120
|
+
|
|
121
|
+
# Connect your tools (optional)
|
|
122
|
+
|
|
123
|
+
Everything works with GitHub's built-in token. Integrations are optional; pass their keys as repository secrets:
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
- uses: stackvitals/stackvitals@v0
|
|
127
|
+
with:
|
|
128
|
+
webhook: ${{ secrets.SLACK_WEBHOOK }} # alerts to Slack, Teams or Discord
|
|
129
|
+
pagerduty-token: ${{ secrets.PAGERDUTY_TOKEN }} # incidents count in DORA
|
|
130
|
+
jira-email: ${{ secrets.JIRA_EMAIL }} # Jira, with its site URL under
|
|
131
|
+
jira-token: ${{ secrets.JIRA_TOKEN }} # [connectors.jira] in .github/stackvitals.toml
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Every input: [docs/install.md](docs/install.md). Every setting: [docs/settings.md](docs/settings.md).
|
|
135
|
+
|
|
136
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
137
|
+
|
|
138
|
+
# AI agents (MCP)
|
|
139
|
+
|
|
140
|
+
Your coding agent can ask StackVitals before and while it changes code: *is this failure a known flake?*, *what is
|
|
141
|
+
blocking PR #123?*, *who should review this?*, *is this package safe to add?* It answers from your repo's history, with
|
|
142
|
+
the evidence.
|
|
143
|
+
|
|
144
|
+
Claude Code:
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
claude mcp add stackvitals -- uvx stackvitals serve
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Claude Desktop, Cursor, VS Code and other MCP clients:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"mcpServers": {
|
|
155
|
+
"stackvitals": { "command": "uvx", "args": ["stackvitals", "serve"] }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
It uses your `gh` login or `GITHUB_TOKEN`. The 11 core tools load by default (`ci_failure`, `is_known_flake`,
|
|
161
|
+
`pr_queue`, `who_should_review`, `check_package`, `insights` and more); `stackvitals serve --tools all` loads all 35.
|
|
162
|
+
Listed in the MCP registry as `io.github.stackvitals/stackvitals`.
|
|
163
|
+
|
|
164
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
165
|
+
|
|
166
|
+
# Three things it gets right that others get wrong
|
|
167
|
+
|
|
168
|
+
Measured on public repos beside the rules other tools use ([docs/accuracy.md](docs/accuracy.md)):
|
|
169
|
+
|
|
170
|
+
- **Where you deploy from.** With no setup, StackVitals named the right deployment source for 53 of 60 repos (30 of
|
|
171
|
+
35 held out). On the same 60, DevLake's default pattern got 9 and a pattern a user would typically write got 22. A
|
|
172
|
+
wrong source makes every DORA number wrong.
|
|
173
|
+
- **Who answered an issue.** Of the first comments by non-maintainers that the github/issue-metrics action counts as
|
|
174
|
+
the answer, 46% are drive-bys (40-52%, held-out repos). StackVitals counts the project's answers: maintainers,
|
|
175
|
+
regular responders and triagers.
|
|
176
|
+
- **Whether AI help changed anything.** Agents' pull requests look 9 points less likely than people's to be merged by someone else.
|
|
177
|
+
Compared within the same repo, month and size, the gap is +0.5 points (0.0 to +1.1): most of the raw gap comes
|
|
178
|
+
from which repos agents work in and the size of their changes.
|
|
179
|
+
|
|
180
|
+
It publishes what failed too. Of the failures an old rule called safe to re-run, 44% (15 of 34) were caused by the
|
|
181
|
+
change. The tightened rule still got 13 of 81 held-out calls wrong (16%). A stricter one (a flake's sign in the log,
|
|
182
|
+
no changed file named) got none of 4 fresh calls wrong, too few to show 5%, so nothing is called safe: likely flakes
|
|
183
|
+
are re-run, never passed by the check. Each sample was labelled by two
|
|
184
|
+
model families (Claude and Gemini); no person has audited the labels.
|
|
185
|
+
|
|
186
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-dark.png"><img alt="" src="https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/divider-light.png" width="100%"></picture>
|
|
187
|
+
|
|
188
|
+
# Learn more
|
|
189
|
+
|
|
190
|
+
- **Five minutes:** [docs/quickstart.md](docs/quickstart.md). Try CI Health on any public repo first (needs
|
|
191
|
+
[uv](https://docs.astral.sh/uv/) and `gh auth login` or a `GITHUB_TOKEN`):
|
|
192
|
+
`uvx stackvitals ci report owner/repo --days 14 --html ./ci-report`.
|
|
193
|
+
- **By role:** [engineering managers](docs/guides/manager.md), [maintainers](docs/guides/maintainer.md),
|
|
194
|
+
[platform teams](docs/guides/platform.md).
|
|
195
|
+
- **Before you rely on it:** [what each rule does](docs/rules.md), [known limitations](docs/limitations.md),
|
|
196
|
+
[what leaves your repo](docs/privacy.md), [threat model](docs/threat-model.md), [enterprise controls](docs/enterprise.md).
|
|
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).
|
|
@@ -149,7 +149,7 @@ runs:
|
|
|
149
149
|
cache-dependency-glob: ""
|
|
150
150
|
# The pinned vulnerability scanner (checked against its SHA-256 when downloaded), kept between runs.
|
|
151
151
|
- if: contains(inputs.modules, 'deps')
|
|
152
|
-
uses: actions/cache@
|
|
152
|
+
uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0
|
|
153
153
|
with:
|
|
154
154
|
path: ${{ runner.tool_cache }}/stackvitals/osv-scanner-2.7.0
|
|
155
155
|
key: stackvitals-osv-scanner-2.7.0-${{ runner.os }}-${{ runner.arch }}
|
|
@@ -207,7 +207,7 @@ runs:
|
|
|
207
207
|
run: PYTHONPATH="$GITHUB_ACTION_PATH/src" uv run --quiet --frozen --only-group action --project "$GITHUB_ACTION_PATH" python -m stackvitals action --modules "$SV_MODULES" --days "$SV_DAYS" --budget "$SV_BUDGET" --tests "$SV_TESTS" --test-artifacts "$SV_TEST_ARTIFACTS" --pr-comments "$SV_PR_COMMENTS" --rerun-flaky "$SV_RERUN" --quarantine "$SV_QUARANTINE" --issues "$SV_ISSUES" --preflight-comments "$SV_PREFLIGHT" --deps-comments "$SV_DEPS_COMMENTS" --mention-owners "$SV_MENTION_OWNERS" --label-stuck "$SV_LABEL_STUCK"
|
|
208
208
|
# The app as a download (opt-in, for private repos), only when this run changed it.
|
|
209
209
|
- if: inputs.pages == 'artifact' && steps.vitals.outputs.pages == 'true'
|
|
210
|
-
uses: actions/upload-artifact@
|
|
210
|
+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
211
211
|
with:
|
|
212
212
|
name: stackvitals-app-${{ github.job }}
|
|
213
213
|
path: ${{ runner.temp }}/stackvitals-pages
|
|
@@ -27,10 +27,10 @@ jobs:
|
|
|
27
27
|
MS_RELEASE_TOKEN: ${{ secrets.MS_STORE_TOKEN }}
|
|
28
28
|
MS_STORE_REPO: kaushik-yadav/merge-scout
|
|
29
29
|
steps:
|
|
30
|
-
- uses: actions/checkout@
|
|
30
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
31
31
|
with:
|
|
32
32
|
persist-credentials: false
|
|
33
|
-
- uses: actions/setup-python@
|
|
33
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
34
34
|
with:
|
|
35
35
|
python-version: "3.11"
|
|
36
36
|
cache: pip
|
|
@@ -13,10 +13,10 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
timeout-minutes: 10
|
|
15
15
|
steps:
|
|
16
|
-
- uses: actions/checkout@
|
|
16
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
17
17
|
with:
|
|
18
18
|
persist-credentials: false
|
|
19
|
-
- uses: actions/setup-python@
|
|
19
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
20
20
|
with:
|
|
21
21
|
python-version: "3.11"
|
|
22
22
|
cache: pip
|
|
@@ -32,17 +32,17 @@ jobs:
|
|
|
32
32
|
MS_STORE_REPO: kaushik-yadav/merge-scout
|
|
33
33
|
steps:
|
|
34
34
|
# Checkout first: it empties the folder, so the restored state must come after it.
|
|
35
|
-
- uses: actions/checkout@
|
|
35
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
36
36
|
with:
|
|
37
37
|
persist-credentials: false
|
|
38
38
|
- name: Restore state from the cache
|
|
39
39
|
id: cache
|
|
40
|
-
uses: actions/cache/restore@
|
|
40
|
+
uses: actions/cache/restore@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0
|
|
41
41
|
with:
|
|
42
42
|
path: data
|
|
43
43
|
key: crawl-state-${{ github.run_id }}
|
|
44
44
|
restore-keys: crawl-state-
|
|
45
|
-
- uses: actions/setup-python@
|
|
45
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
46
46
|
with:
|
|
47
47
|
python-version: "3.11"
|
|
48
48
|
cache: pip
|
|
@@ -85,7 +85,7 @@ jobs:
|
|
|
85
85
|
run: python -m mergescout.store push
|
|
86
86
|
- name: Save state to the cache
|
|
87
87
|
if: always() && steps.state.outcome == 'success'
|
|
88
|
-
uses: actions/cache/save@
|
|
88
|
+
uses: actions/cache/save@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0
|
|
89
89
|
with:
|
|
90
90
|
path: data
|
|
91
91
|
key: crawl-state-${{ github.run_id }}-${{ github.run_attempt }}
|