stackvitals 0.1.1__tar.gz → 0.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- stackvitals-0.1.3/.github/workflows/daily.yml +118 -0
- stackvitals-0.1.3/.github/workflows/mcp-registry.yml +32 -0
- stackvitals-0.1.3/.github/workflows/prospective.yml +79 -0
- stackvitals-0.1.3/.github/workflows/release.yml +102 -0
- stackvitals-0.1.3/.github/workflows/tests.yml +28 -0
- stackvitals-0.1.3/CHANGELOG.md +88 -0
- stackvitals-0.1.3/CODE_OF_CONDUCT.md +113 -0
- stackvitals-0.1.3/CONTRIBUTING.md +63 -0
- stackvitals-0.1.3/PKG-INFO +245 -0
- stackvitals-0.1.3/README.md +198 -0
- stackvitals-0.1.3/action.yml +221 -0
- stackvitals-0.1.3/bench/accuracy/registry.json +368 -0
- stackvitals-0.1.3/bench/accuracy/summary.py +447 -0
- stackvitals-0.1.3/deploy/crawler/workflows/bench.yml +76 -0
- stackvitals-0.1.3/deploy/crawler/workflows/check.yml +38 -0
- stackvitals-0.1.3/deploy/crawler/workflows/crawl.yml +103 -0
- stackvitals-0.1.3/deploy/crawler/workflows/discover.yml +131 -0
- stackvitals-0.1.3/deploy/crawler/workflows/keepalive.yml +23 -0
- stackvitals-0.1.3/docs/accuracy.md +147 -0
- stackvitals-0.1.3/docs/app.md +139 -0
- stackvitals-0.1.3/docs/architecture.md +150 -0
- stackvitals-0.1.3/docs/assets/architecture-detailed-dark.png +0 -0
- stackvitals-0.1.3/docs/assets/architecture-detailed-light.png +0 -0
- stackvitals-0.1.3/docs/assets/architecture-overview-dark.png +0 -0
- stackvitals-0.1.3/docs/assets/architecture-overview-light.png +0 -0
- stackvitals-0.1.3/docs/assets/divider-dark.png +0 -0
- stackvitals-0.1.3/docs/assets/divider-light.png +0 -0
- stackvitals-0.1.3/docs/assets/lockup-dark.png +0 -0
- stackvitals-0.1.3/docs/assets/lockup-light.png +0 -0
- stackvitals-0.1.3/docs/assets/stackvitals-video.avif +0 -0
- stackvitals-0.1.3/docs/assets/stackvitals-video.gif +0 -0
- stackvitals-0.1.3/docs/assets/stackvitals-video.mp4 +0 -0
- stackvitals-0.1.3/docs/connectors.md +336 -0
- stackvitals-0.1.3/docs/coverage.md +58 -0
- stackvitals-0.1.3/docs/dora-guide.md +53 -0
- stackvitals-0.1.3/docs/faq.md +86 -0
- stackvitals-0.1.3/docs/guides/maintainer.md +37 -0
- stackvitals-0.1.3/docs/guides/manager.md +37 -0
- stackvitals-0.1.3/docs/guides/platform.md +39 -0
- stackvitals-0.1.3/docs/install.md +216 -0
- stackvitals-0.1.3/docs/limitations.md +199 -0
- stackvitals-0.1.3/docs/methods.md +87 -0
- stackvitals-0.1.3/docs/modules.md +680 -0
- stackvitals-0.1.3/docs/privacy.md +42 -0
- stackvitals-0.1.3/docs/quickstart.md +69 -0
- stackvitals-0.1.3/docs/release-checklist.md +115 -0
- stackvitals-0.1.3/docs/rules.md +200 -0
- stackvitals-0.1.3/docs/scaling.md +77 -0
- stackvitals-0.1.3/docs/settings.md +312 -0
- stackvitals-0.1.3/docs/threat-model.md +91 -0
- stackvitals-0.1.3/llms.txt +34 -0
- stackvitals-0.1.3/pyproject.toml +55 -0
- stackvitals-0.1.3/scripts/prelaunch.py +947 -0
- stackvitals-0.1.3/scripts/sync_crawler.py +87 -0
- stackvitals-0.1.3/server.json +29 -0
- stackvitals-0.1.3/skills/stackvitals-ci/SKILL.md +32 -0
- stackvitals-0.1.3/skills/stackvitals-community/SKILL.md +25 -0
- stackvitals-0.1.3/skills/stackvitals-contribute/SKILL.md +26 -0
- stackvitals-0.1.3/skills/stackvitals-delivery/SKILL.md +35 -0
- stackvitals-0.1.3/skills/stackvitals-deps/SKILL.md +30 -0
- stackvitals-0.1.3/skills/stackvitals-flow/SKILL.md +31 -0
- stackvitals-0.1.3/skills/stackvitals-portal/SKILL.md +26 -0
- stackvitals-0.1.3/src/mergescout/__init__.py +1 -0
- stackvitals-0.1.3/src/stackvitals/__init__.py +2 -0
- stackvitals-0.1.3/src/stackvitals/cli.py +115 -0
- stackvitals-0.1.3/src/stackvitals/core/dataflow.py +168 -0
- stackvitals-0.1.3/src/stackvitals/core/initcli.py +259 -0
- stackvitals-0.1.3/src/stackvitals/core/installdoc.py +92 -0
- stackvitals-0.1.3/src/stackvitals/core/schema.py +221 -0
- stackvitals-0.1.3/src/stackvitals/editors/vscode/package.json +26 -0
- stackvitals-0.1.3/src/stackvitals/web/app/boot.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/brand/cube-128.png +0 -0
- stackvitals-0.1.3/src/stackvitals/web/app/brand/cube-256.png +0 -0
- stackvitals-0.1.3/src/stackvitals/web/app/brand/cube-64.png +0 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-5TSTECYX.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-7W2HH2SR.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-AEVB6UDN.js +75 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-DLORG2IY.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-FBGIG7YF.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-SACCDA46.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-TCPSLBAB.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-UWMBZCCA.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/chunk-W6N6P4C7.js +273 -0
- stackvitals-0.1.3/src/stackvitals/web/app/chunks/more-EEGUDTVE.js +10 -0
- stackvitals-0.1.3/src/stackvitals/web/app/demo/settings.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/accuracy.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/connectors.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/getting-started.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/index.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/modules.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/privacy-and-security.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/help/reference.json +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/main.css +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/main.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/about.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/ci.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/community.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/delivery.js +45 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/deps.js +7 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/help.js +6 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/investment.js +3 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/overview.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/portal.js +51 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/prs.js +4 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/settings.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/setup.js +2 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/welcome-sheet.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/app/pages/welcome.js +1 -0
- stackvitals-0.1.3/src/stackvitals/web/index.html +33 -0
- stackvitals-0.1.3/src/stackvitals/web/site/index.html +111 -0
- stackvitals-0.1.3/src/stackvitals/web/site/site.css +68 -0
- stackvitals-0.1.3/tests/local/test_audit_docs.py +19 -0
- stackvitals-0.1.3/tests/local/test_editor_marks.py +101 -0
- stackvitals-0.1.3/tests/local/test_init_cli.py +152 -0
- stackvitals-0.1.3/tests/local/test_prelaunch.py +115 -0
- stackvitals-0.1.3/uv.lock +1236 -0
- stackvitals-0.1.3/web/README.md +46 -0
- stackvitals-0.1.3/web/brand/cube-128.png +0 -0
- stackvitals-0.1.3/web/brand/cube-256.png +0 -0
- stackvitals-0.1.3/web/brand/cube-64.png +0 -0
- stackvitals-0.1.3/web/build.mjs +164 -0
- stackvitals-0.1.3/web/demo/settings.json +1 -0
- stackvitals-0.1.3/web/index.html +23 -0
- stackvitals-0.1.3/web/src/app/App.tsx +136 -0
- stackvitals-0.1.3/web/src/app/Brand.tsx +6 -0
- stackvitals-0.1.3/web/src/boot.ts +23 -0
- stackvitals-0.1.3/web/src/brand/Logo.tsx +6 -0
- stackvitals-0.1.3/web/src/data/theme.ts +35 -0
- stackvitals-0.1.3/web/src/github/workflow.ts +180 -0
- stackvitals-0.1.3/web/src/pages/about.tsx +140 -0
- stackvitals-0.1.3/web/src/pages/ci/workflowgen.ts +327 -0
- stackvitals-0.1.3/web/src/pages/community.tsx +316 -0
- stackvitals-0.1.3/web/src/pages/deps/scanning.ts +77 -0
- stackvitals-0.1.3/web/src/pages/help/commands.tsx +128 -0
- stackvitals-0.1.3/web/src/pages/setup.tsx +312 -0
- stackvitals-0.1.3/web/src/styles/base.css +42 -0
- stackvitals-0.1.3/web/src/styles/sheet.css +378 -0
- stackvitals-0.1.3/web/src/styles/shell.css +105 -0
- stackvitals-0.1.3/web/src/styles/tokens.css +94 -0
- stackvitals-0.1.3/web/test/safety.test.ts +241 -0
- stackvitals-0.1.3/web/test/workflow.test.ts +61 -0
- stackvitals-0.1.1/.github/workflows/daily.yml +0 -118
- stackvitals-0.1.1/.github/workflows/prospective.yml +0 -79
- stackvitals-0.1.1/.github/workflows/release.yml +0 -102
- stackvitals-0.1.1/.github/workflows/tests.yml +0 -28
- stackvitals-0.1.1/CHANGELOG.md +0 -69
- stackvitals-0.1.1/CONTRIBUTING.md +0 -49
- stackvitals-0.1.1/PKG-INFO +0 -134
- stackvitals-0.1.1/README.md +0 -92
- stackvitals-0.1.1/action.yml +0 -221
- stackvitals-0.1.1/bench/accuracy/registry.json +0 -368
- stackvitals-0.1.1/bench/accuracy/summary.py +0 -445
- stackvitals-0.1.1/deploy/crawler/workflows/bench.yml +0 -76
- stackvitals-0.1.1/deploy/crawler/workflows/check.yml +0 -38
- stackvitals-0.1.1/deploy/crawler/workflows/crawl.yml +0 -103
- stackvitals-0.1.1/deploy/crawler/workflows/discover.yml +0 -131
- stackvitals-0.1.1/deploy/crawler/workflows/keepalive.yml +0 -23
- stackvitals-0.1.1/docs/accuracy.md +0 -148
- stackvitals-0.1.1/docs/app.md +0 -141
- stackvitals-0.1.1/docs/architecture.md +0 -86
- stackvitals-0.1.1/docs/connectors.md +0 -337
- stackvitals-0.1.1/docs/coverage.md +0 -57
- stackvitals-0.1.1/docs/dora-guide.md +0 -51
- stackvitals-0.1.1/docs/faq.md +0 -86
- stackvitals-0.1.1/docs/guides/maintainer.md +0 -37
- stackvitals-0.1.1/docs/guides/manager.md +0 -37
- stackvitals-0.1.1/docs/guides/platform.md +0 -39
- stackvitals-0.1.1/docs/install.md +0 -195
- stackvitals-0.1.1/docs/limitations.md +0 -199
- stackvitals-0.1.1/docs/methods.md +0 -87
- stackvitals-0.1.1/docs/modules.md +0 -659
- stackvitals-0.1.1/docs/privacy.md +0 -42
- stackvitals-0.1.1/docs/quickstart.md +0 -46
- stackvitals-0.1.1/docs/release-checklist.md +0 -106
- stackvitals-0.1.1/docs/rules.md +0 -200
- stackvitals-0.1.1/docs/scaling.md +0 -77
- stackvitals-0.1.1/docs/settings.md +0 -312
- stackvitals-0.1.1/docs/threat-model.md +0 -90
- stackvitals-0.1.1/llms.txt +0 -34
- stackvitals-0.1.1/pyproject.toml +0 -48
- stackvitals-0.1.1/scripts/prelaunch.py +0 -938
- stackvitals-0.1.1/scripts/sync_crawler.py +0 -85
- stackvitals-0.1.1/server.json +0 -29
- stackvitals-0.1.1/skills/stackvitals-ci/SKILL.md +0 -32
- stackvitals-0.1.1/skills/stackvitals-community/SKILL.md +0 -25
- stackvitals-0.1.1/skills/stackvitals-contribute/SKILL.md +0 -26
- stackvitals-0.1.1/skills/stackvitals-delivery/SKILL.md +0 -35
- stackvitals-0.1.1/skills/stackvitals-deps/SKILL.md +0 -30
- stackvitals-0.1.1/skills/stackvitals-flow/SKILL.md +0 -31
- stackvitals-0.1.1/skills/stackvitals-portal/SKILL.md +0 -26
- stackvitals-0.1.1/src/mergescout/__init__.py +0 -1
- stackvitals-0.1.1/src/stackvitals/__init__.py +0 -2
- stackvitals-0.1.1/src/stackvitals/cli.py +0 -111
- stackvitals-0.1.1/src/stackvitals/core/dataflow.py +0 -168
- stackvitals-0.1.1/src/stackvitals/core/installdoc.py +0 -69
- stackvitals-0.1.1/src/stackvitals/core/schema.py +0 -205
- stackvitals-0.1.1/src/stackvitals/editors/vscode/package.json +0 -26
- stackvitals-0.1.1/src/stackvitals/web/app/boot.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-3G4SQNUC.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-7TJCBOAY.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-GPVLJRZD.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-GQYFN4PE.js +0 -75
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-MAPYGK3P.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-PABICGBL.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-RQZPSJ2Y.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/chunks/chunk-THFUOCPC.js +0 -273
- 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/chunks/more-KMJMJQD3.js +0 -10
- stackvitals-0.1.1/src/stackvitals/web/app/demo/settings.json +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/help/accuracy.json +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/help/connectors.json +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/modules.json +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/help/privacy-and-security.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/about.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/delivery.js +0 -45
- stackvitals-0.1.1/src/stackvitals/web/app/pages/deps.js +0 -7
- stackvitals-0.1.1/src/stackvitals/web/app/pages/help.js +0 -6
- stackvitals-0.1.1/src/stackvitals/web/app/pages/investment.js +0 -3
- stackvitals-0.1.1/src/stackvitals/web/app/pages/overview.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/portal.js +0 -51
- stackvitals-0.1.1/src/stackvitals/web/app/pages/prs.js +0 -4
- stackvitals-0.1.1/src/stackvitals/web/app/pages/settings.js +0 -1
- stackvitals-0.1.1/src/stackvitals/web/app/pages/setup.js +0 -2
- 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/src/stackvitals/web/index.html +0 -34
- stackvitals-0.1.1/src/stackvitals/web/site/index.html +0 -108
- stackvitals-0.1.1/src/stackvitals/web/site/site.css +0 -68
- stackvitals-0.1.1/tests/local/test_audit_docs.py +0 -17
- stackvitals-0.1.1/tests/local/test_editor_marks.py +0 -99
- stackvitals-0.1.1/tests/local/test_prelaunch.py +0 -115
- stackvitals-0.1.1/uv.lock +0 -1236
- stackvitals-0.1.1/web/README.md +0 -45
- stackvitals-0.1.1/web/build.mjs +0 -161
- stackvitals-0.1.1/web/demo/settings.json +0 -1
- stackvitals-0.1.1/web/index.html +0 -23
- stackvitals-0.1.1/web/src/app/App.tsx +0 -136
- stackvitals-0.1.1/web/src/app/LogoPicker.tsx +0 -38
- stackvitals-0.1.1/web/src/boot.ts +0 -26
- 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/web/src/data/theme.ts +0 -45
- stackvitals-0.1.1/web/src/github/workflow.ts +0 -180
- stackvitals-0.1.1/web/src/pages/about.tsx +0 -140
- stackvitals-0.1.1/web/src/pages/ci/workflowgen.ts +0 -327
- stackvitals-0.1.1/web/src/pages/community.tsx +0 -316
- stackvitals-0.1.1/web/src/pages/deps/scanning.ts +0 -77
- stackvitals-0.1.1/web/src/pages/help/commands.tsx +0 -127
- stackvitals-0.1.1/web/src/pages/setup.tsx +0 -312
- stackvitals-0.1.1/web/src/styles/base.css +0 -42
- stackvitals-0.1.1/web/src/styles/sheet.css +0 -380
- stackvitals-0.1.1/web/src/styles/shell.css +0 -115
- stackvitals-0.1.1/web/src/styles/tokens.css +0 -97
- stackvitals-0.1.1/web/test/safety.test.ts +0 -255
- stackvitals-0.1.1/web/test/workflow.test.ts +0 -61
- {stackvitals-0.1.1 → stackvitals-0.1.3}/.env.example +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/.gitattributes +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/.github/ISSUE_TEMPLATE/benchmark.yml +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/.github/build-constraints.txt +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/.gitignore +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/GOVERNANCE.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/LICENSE +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/NOTICE +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/SECURITY.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/LICENSE-DATA.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/adjudicate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/adjudicator-crosscheck.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/adoption/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/adoption/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/adoption/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/adoption/study.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/prepare.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/prepare2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/prompts.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/results2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/score2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/triage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/agents/triage_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/adjudication-detection.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/adoption-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/adoption.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/agreement-gemini-detection.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/codebook-detection.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/detection-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/detection-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/detection.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/labels-gemini-detection.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/replicate-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/ai/replicate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/audit-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/audit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/adjudication-main.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/adjudication-validation.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/affiliation-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/affiliation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-main-v2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-main.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-validation-v2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/agreement-gemini-validation.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/channels-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/channels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-main-v2.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-main.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-validation-v2.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/labels-gemini-validation.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/labels-main.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/labels-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/labels-validation.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/responses-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/responses-validation-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/responses.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/score_labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/triage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/community/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/contribute/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/contribute/frozen-manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/contribute/frozen.json.gz +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/contribute/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/contribute/prospective.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/crosscheck.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/baseline-after-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/baseline-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/baseline.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/coverage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/coverage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/exploits-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/exploits.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/incidents-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/incidents.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/lookalike-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/lookalike.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/release-signs-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/deps/release_signs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/devlake/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/devlake/head-to-head-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/devlake/pick.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/devlake/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/devlake/repos.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/devlake/run.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/devlake/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/adjudication-incidents.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/adjudication-sources-more.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/adjudication-sources.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/agreement-gemini-sources-more.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/agreement-gemini-sources.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/devlake-configured-more-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/devlake-configured-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/devlake_configured.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/environments-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/environments.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/incidents-codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/incidents-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/incidents-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/incidents.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/labels-gemini-incidents.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/labels-gemini-sources-more.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/labels-gemini-sources.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/linkage-more-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/linkage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/linkage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/sources-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/sources-more-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/sources-more-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/sources-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/sources.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/spread-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/dora/spread.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/fair.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/features/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/features/api_use.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/features/branch_growth.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/features/catalog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/features/reports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/features/scorecard.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/features/scorecard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/finalise.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-flaky.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-fresh.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-heldout.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/adjudication-masking.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-flaky-v2.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-flaky.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-fresh.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-heldout.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/agreement-gemini-masking.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/already-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/already.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/began-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/began.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/card.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/codebook.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/heldout-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/heldout-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/heldout.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/items.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/kinds-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-flaky-v2.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-flaky.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-fresh.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-heldout.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/labels-gemini-masking.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/masking-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/masking-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/masking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/maybe-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/maybe.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/natural-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/natural.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/outside-fresh-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/outside-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/outside.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/outside_fresh.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/pr-details-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/pr_details.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/safe-check-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/safe-rule-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/safe_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/safe_rule.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/views.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/flaky/wide.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/impact/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/impact/collect_reports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/impact/find_report_repos.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/impact/replay-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/impact/replay_tia.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/impact/search.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/impact/totals.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/label-sensitivity.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/labeller.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/middleware/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/middleware/preregistration.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/middleware/results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/middleware/run.sh +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/middleware/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/panel-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/panel.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/platform/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/platform/busy-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/platform/busy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/portal/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/portal/scale-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/portal/scale.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/portal/speed-after.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/portal/speed-before.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/portal/speed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/replay/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/replay/adjudication-replay.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/replay/agreement-gemini-replay.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/replay/labels-gemini-replay.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/replay/replay-labels.csv +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/replay/replay-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/replay/replay.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/reproduce.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/scorecard/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/scorecard/results-before.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/scorecard/results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/scorecard/run.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/sensitivity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/team/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/team/prospective-frozen.json.gz +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/team/prospective-manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/team/prospective.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/team/reviewers-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/team/reviewers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-2week-before-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-2week-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-before-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/nulls.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/shrinkage-groups-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/shrinkage-results.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/bench/accuracy/uncertainty/shrinkage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/deploy/crawler/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/deploy/crawler/gitignore +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/docs/chaoss.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/docs/enterprise.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/docs/roadmap.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/docs/triage.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/archive/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/archive/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/archive/convert.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/archive/events.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/archive/manifest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/archive/stream.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/ci.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/deploys.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/matched.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/prior.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/shared.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/bench/stars.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/config.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/chain.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/fetch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/runner.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/seed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/state.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/crawl/writer.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/discover/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/discover/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/discover/sweep.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/github/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/github/graphql.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/github/identities.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/github/releases.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/mcp_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/measure/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/measure/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/measure/api_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/measure/count_repos.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/measure/jsonl.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/measure/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/measure/sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/setup_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/bump_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/bumps.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/community_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/delivery_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/deps_map.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/deps_trends.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/exploits.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/flow_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/issues.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/osv.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/owners_watch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/repo_stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/rules.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/silver.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/top_packages.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/triage_math.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/signals/walls.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/snapshot/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/snapshot/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/snapshot/build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/snapshot/publish.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/snapshot/schema.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/snapshot/score.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/store/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/store/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/store/sync.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/timeutil.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/tool/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/tool/action_pack.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/tool/live.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/tool/queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/tool/refs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/tool/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/mergescout/tool/tracking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/__main__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/api.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/automation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/burnin.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/coverage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/feedback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/fingerprint.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/gitlab.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/gitlab_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/impact.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/investigate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/monitors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/quarantine_runtime.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/retry.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/selfheal.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/shards.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/share.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/testreports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/tickets.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/track_record.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/triggers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/upload.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/ci/validate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/codeowners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/affiliation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/chaoss.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/context.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/community/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/ai_spend.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/base.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/copilot.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/discord.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/discourse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/incident_io.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/jira.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/linear.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/pagerduty.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/slack.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/sonar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/tracker.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/connectors/writeback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/contribute/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/contribute/brief.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/contribute/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/actors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/agent_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/agreements.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/ai_outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/alerts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/appdata.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/bucket.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/bugs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/calendar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/capex.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/change_risk.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/changes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/chat.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/config.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/delivery_peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/delivery_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/deliverycli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/devlake_dora.sql +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/digest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/explaincli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/explore.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/exportcli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/findings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/health.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/insights.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/insightscli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/investment.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/joins.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/llmsdoc.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/merge_queue.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/metrics.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/model.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/projectcli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/propose.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/pulse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/recorded.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/releases.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/resync.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/services.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/settings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/sqlcli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/summary.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/time.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/tomledit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/uicli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/webapp.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/what_changed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/core/workspace.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/actions_vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/dossier.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/fixplan.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/guarddog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/hygiene.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/imports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/lockfiles.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/lookalike.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/reach.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/release.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/runtimes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/supply.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/deps/vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/editors/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/editors/vscode/extension.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/editors/vscode/marks.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/automate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/code_hosts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/gitlab_mr.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/knowledge.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/preflight.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/rules.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/survival.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/flow/triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/mcp_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/batch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/campaigns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/catalog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/descriptor.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/github.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/golden.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/history.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/inventory.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/pages.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/rollup.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/portal/scorecard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/security/__init__.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/security/probes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/security/repo_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/security/workflows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/shell.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/site.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/LICENSES.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/AddRepo-KRPZXWCY.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/SetupRunning-XWFQAKRZ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/accuracy-data-OQTDXI7Y.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/agents-data-BAL6QAOF.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-24LFKFZ6.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-3IXWEOIJ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-3ROQFHPV.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-45PGAQRO.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4H53OYLG.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4LUI7O5P.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4SQPQ5TB.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-4WKQTWUC.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-576YHDEK.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-6RLVD2DT.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-763NH7PP.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-76WAVKUG.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-7II2BD5F.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-ASYNLVOP.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-CTKDYZMG.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-CVB26NMC.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-G7NGB5UX.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-GT4EAKAO.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-IYMBFPCV.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-LAAGCPU3.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-P5TXDD45.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-RPXHAG6F.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-S2ZBMEVA.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-S654BBEP.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-T7QVTNXF.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-TO4VVRZ7.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-VQ5YXO54.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-VWKSMFWJ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/chunk-YTANGYYH.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/connect-KONYWYTT.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/connections-data-2DYS4UVW.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/more-PC6FVS3P.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/more-RCIVCUDE.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/more-ZKKRY6NO.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/sealbox-35YL4EUH.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/session-DYYTOE2K.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/settingsApply-2HRJEZYM.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/settingsReview-GX2FZQ4M.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/chunks/uPlot.esm-OIWT3AHJ.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/ci/impact.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/ci/quarantine.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/ci/tickets.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/alerts.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/app.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/community.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/connectors.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/data.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/decisions.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/delivery.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/deps.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/flow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/health.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/insights.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/pulse.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/security.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/prs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/summary/tests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/supply.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/mobile/vulns.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/alerts.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/app.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/community.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/connectors.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/data.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/decisions.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/delivery.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/deps.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/flow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/health.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/insights.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/pulse.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/security.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/prs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/summary/tests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/supply.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/payments-api/vulns.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/portal.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/alerts.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/app.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/community.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/connectors.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/data.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/decisions.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/delivery.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/deps.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/flow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/health.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/insights.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/pulse.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/security.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/ci_jobs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/devlake_project_pr_metrics.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/devlake_pull_requests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/manifest.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/prs.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/summary/tests.jsonl +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/supply.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/demo/web-app/vulns.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-mono-400.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-sans-400.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-sans-600.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/fonts/plex-sans-condensed-700.woff2 +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/about.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/activity.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/activity.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/agents.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/agents.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/ci.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/community.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/connections.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/connections.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/delivery.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/deps.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/explore.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/explore.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/health.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/health.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/help.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/insights.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/insights.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/investment.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/overview.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/portal.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/prs.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/settings.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/setup.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/standing.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/pages/standing.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/app/settings-workflow.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/site/integrations.html +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/src/stackvitals/web/site/setup.html +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/templates/gitlab/stackvitals.yml +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/ci_fake.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/conftest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/fixtures/issue_page.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/fixtures/osv-scan.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/fixtures/pr_page.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/fixtures/repo_meta.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_actions_vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_adjudicate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_adoption_study.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_agent_leaderboard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_agent_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_agreement_nudges.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ai_markers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ai_matched.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ai_outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ai_spend.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_api_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_app_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_archive_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_files.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_guarddog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_mcp_messages.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_sql.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_uicli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_audit_workflows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_base_images.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_began_after.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_bench_by_repo.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_bench_deploys.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_bench_report_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_bench_stars.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_branch_growth.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_bucket.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_bug_backlog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_capex.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_catalog_descriptor.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_change_risk.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_changes_14d.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_chat.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_action_pr.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_already_failing.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_analyze_tests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_artifacts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_automation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_began.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_bench_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_burnin.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_comment_shape.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_depth.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_feedback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_feedback_all.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_fingerprint.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_gitlab.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_groups.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_impact.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_issue_lifecycle.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_masking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_maybe_flaky.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_mcp.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_monitors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_outside.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_outside_ci_edit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_pr_details.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_push_evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_quarantine_mark.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_report_formats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_retry.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_review_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_safe_rule.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_settings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_surfaces_m3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_test_verdict.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_testreports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_triggers_script.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_upload.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_verdict_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_ci_webhook_formats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_code_hosts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_code_survival.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_affiliation.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_context.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_dependency.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_discussions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_fetch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_community_stated.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_config.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connector_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connector_framework.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connector_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connectors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connectors_chat.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connectors_discourse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connectors_epics.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_connectors_writeback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_contribute_brief.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_contribute_prospective.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_contribute_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_convert.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_actors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_agreements.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_alerts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_appdata.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_delivery_peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_delivery_surfaces.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_digest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_digest_step.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_explore.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_findings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_findings_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_insights.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_insights_surfaces.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_metrics.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_model.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_otel.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_propose.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_pulse.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_recovery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_request_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_requests_wording.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_roles_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_runner.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_schema.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_services.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_settings.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_sql_org.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_summary.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_summary_churn.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_tomledit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_ui.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_webapp.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_webapp_version.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_core_workspace.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_cost_guard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_count_repos.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_coverage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_fetch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_outcomes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_runner.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_seed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_state.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_crawl_writer.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_delivery_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_delivery_deploy_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_delivery_rules_m2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_bumps.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_crawl.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_exploits.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_fixed_versions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_ledger.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_map.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_osv.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_top.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_trend_quiet.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_trends.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dep_watch.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deploy_attempts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deploy_ranges.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deployment_history.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deployment_list.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_dossier.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_hygiene.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_imports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_lookalike.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_paths.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_policy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_reach.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_release.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_review_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_runtimes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_deps_vulns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_devlake_cicd.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dora_evidence.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dora_proof.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dora_rows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_dora_weeks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_enterprise_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_events.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_explain_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_fair.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_fixplan.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flake_code_kinds.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flaky_natural.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flaky_sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flaky_score_fair.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flaky_test_cost.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flaky_tickets.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_analyze.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_automate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_bench_pipeline.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_collect.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_collect_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_definitions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_m2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_peers.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_preflight.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_round2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_round3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_triage.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_windows.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_flow_wiring.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_fork_reports.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_gitlab_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_gitlab_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_graphql.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_health.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_identities.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_identity_everywhere.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_identity_match.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_insights_chains.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_investment.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_jira_fields.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_knowledge_names.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_labeller.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_llms_txt.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_local_run.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_m1_small_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_masking_card.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_mcp_core.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_mcp_provenance.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_merge_queue.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_mergescout_token.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_modular_install.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_nulls_power.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_numbers_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_odds_backtest.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_outside_fresh.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_owners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_pagers_copilot.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_pages_deploy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_parsing_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_peer_fit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_polish_m1.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_polish_m2.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_polish_review.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_app_facts.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_campaigns.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_catalog.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_export.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_golden.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_handcheck.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_history.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_html.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_m1.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_nudges.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_reviews.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_rollup.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_portal_scorecard.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_pr_exclusions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_pr_licences.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_pr_rules.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_production_branches.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_project_dora.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_pulse_trend.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_quarantine_expiry.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_quarantine_runners.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_quarantine_runtime.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_recorded.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_relay_and_polish.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_release_quality.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_releases.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_releases_ratelimit.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_report_validate.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_response_times.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_result_quality.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_resync.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_review_fixes.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_review_fixes_action.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_review_fixes_p3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_review_fixes_requests.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_review_m3.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_sample.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_schema_sections.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_scorecard_agreement.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_security_checks.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_selfheal.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_services.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_setup_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_setup_template.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_shared_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_shell_app_link.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_shrinkage_groups.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_signals_check.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_signals_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_signals_identity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_signals_issues.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_signals_labels.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_signals_repo_stats.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_signals_walls.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_site_build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_snapshot_build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_snapshot_publish.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_sonar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_state_report.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_store_cli.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_stream.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_suite_packaging.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_supply.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_sweep.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_team_dora.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_test_variants.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tool_action_pack.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tool_live.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tool_queries.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tool_server.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tool_speed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tool_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tool_tracking.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_tracker.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_triage_math.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_triage_pipeline.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_uncertainty.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_verdict_feedback.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_verdict_strict.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_vulns_dev_only.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_vulns_ignores.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_vulns_inputs.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_web_build.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_web_next_setup.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_web_replay_parity.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_what_changed.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/local/test_work_calendar.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/signals_data.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_accuracy.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_bench.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_ci.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_community.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_connectors.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_contribute.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_core.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_crawl.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_decisions.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_delivery.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_deps.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_discover.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_github.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_insights.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_portal.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_signals.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_snapshot.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_store.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_surfaces.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_team.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_tool.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/test_flow_web.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/tests/tool_data.py +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/demo/extra-ci.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/demo/extra-delivery.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/demo/extra-deps.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/demo/extra-people.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/demo/extra-portal.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/demo/source.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/defaults.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/fixtures.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/flows.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/links.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/playwright.config.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/serve.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/sweep.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/e2e/welcome.spec.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/package-lock.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/package.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/scripts/docs.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/app/AddRepo.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/app/Profile.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/app/jump.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/app/router.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/app/routes.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/charts/BarChart.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/charts/MetricHero.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/charts/ScrubChart.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/charts/Sparkline.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/charts/metric.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/files.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/format.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/repos.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/requestIssue.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/source.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/store.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/types.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/data/write.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/Decide.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/Evidence.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/Health.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/SetupRunning.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/agents-data.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/brand-logos.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/connect.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/connect.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/connectRepos.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/connections-data.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/connstatus.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/helpLink.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/markdown.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/sealbox.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/sealedbox.d.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/secrets.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/settingsApply.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/settingsModel.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/settingsPending.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/settingsReplay.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/settingsReview.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/settingsToml.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/text-css.d.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/features/vitals.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/caps.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/client.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/config.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/detect.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/diff.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/links.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/mine.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/names.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/oauth.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/open.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/session.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/setup.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/signout.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/token.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/github/watch.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/main.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/about/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/about-accuracy.d.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/about.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/accuracy-data.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/activity.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/activity.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/agents/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/agents.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/agents.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/ci/more.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/ci/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/ci/setup.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/ci.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/ci.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/community/command.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/community/report.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/community.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/connections.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/connections.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/delivery/blocks.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/delivery/blocks.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/delivery/more.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/delivery/sources.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/delivery.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/delivery.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/deps/blocks.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/deps/blocks.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/deps/lookup.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/deps/security.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/deps/tools.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/deps.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/deps.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/explore/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/explore/query.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/explore.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/explore.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/health.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/health.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/help.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/help.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/insights/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/insights.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/insights.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/investment.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/investment.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/overview/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/overview.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/overview.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal/access.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal/panel.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal/panel.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal/setup.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal/tools.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/portal.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/prs/more.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/prs/parts.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/prs/preflight.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/prs.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/prs.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/settings.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/settings.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/setup.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/standing.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/standing.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/welcome-sheet.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/welcome-sheet.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/pages/welcome.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/styles/charts.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/styles/components.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/styles/index.css +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/Button.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/Page.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/Popover.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/Portal.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/Sheet.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/Table.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/bits.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/controls.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/icons.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/motion.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/src/ui/prefill.tsx +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/ciworkflow.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/client.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/connstatus.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/depstools.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/explorequery.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/fake.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/links.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/load.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/markdown.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/portalsetup.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/preflight.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/run.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/secrets.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/settings.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/test/setup.test.ts +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/web/tsconfig.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/package.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/relay/README.md +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/relay/package.json +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/relay/src/index.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/relay/test/index.test.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/relay/wrangler.toml +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/src/index.js +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/test/index.test.mjs +0 -0
- {stackvitals-0.1.1 → stackvitals-0.1.3}/worker/wrangler.toml +0 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
name: Daily
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "17 5 * * *"
|
|
6
|
+
# Backup in case GitHub skips the first; it stops at once when today's snapshot is already published.
|
|
7
|
+
- cron: "47 13 * * *"
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
issues: read # shared benchmark figures arrive as issues
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: daily
|
|
16
|
+
cancel-in-progress: false
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
daily:
|
|
20
|
+
# Runs only in the private repo that holds the crawl data; elsewhere the job is skipped.
|
|
21
|
+
if: github.repository == 'kaushik-yadav/merge-scout'
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
timeout-minutes: 60
|
|
24
|
+
env:
|
|
25
|
+
MS_DATA_DIR: ${{ github.workspace }}/data
|
|
26
|
+
MS_RELEASE_TOKEN: ${{ github.token }}
|
|
27
|
+
steps:
|
|
28
|
+
- name: Skip a scheduled run when today's snapshot is already published
|
|
29
|
+
id: guard
|
|
30
|
+
env:
|
|
31
|
+
GH_TOKEN: ${{ github.token }}
|
|
32
|
+
run: |
|
|
33
|
+
if [ "${{ github.event_name }}" = "schedule" ] && gh release view "data-$(date -u +%F)" --repo "${{ github.repository }}" > /dev/null 2>&1; then
|
|
34
|
+
echo "skip=true" >> "$GITHUB_OUTPUT"
|
|
35
|
+
echo "Today's snapshot is already published; nothing to do."
|
|
36
|
+
fi
|
|
37
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
38
|
+
if: steps.guard.outputs.skip != 'true'
|
|
39
|
+
with:
|
|
40
|
+
persist-credentials: false
|
|
41
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
42
|
+
if: steps.guard.outputs.skip != 'true'
|
|
43
|
+
with:
|
|
44
|
+
python-version: "3.11"
|
|
45
|
+
cache: pip
|
|
46
|
+
cache-dependency-path: pyproject.toml
|
|
47
|
+
# Downloaded crawl bundles are kept between runs, so each day fetches only new ones.
|
|
48
|
+
- uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0
|
|
49
|
+
if: steps.guard.outputs.skip != 'true'
|
|
50
|
+
with:
|
|
51
|
+
path: data/bronze
|
|
52
|
+
key: bronze-${{ github.run_id }}
|
|
53
|
+
restore-keys: bronze-
|
|
54
|
+
- run: pip install ".[pipeline]"
|
|
55
|
+
if: steps.guard.outputs.skip != 'true'
|
|
56
|
+
# The package map is reused for a week per package and OSV advisories until they change, so both sources are asked little.
|
|
57
|
+
- name: Fetch yesterday's package map, vulnerability history and ownership watch
|
|
58
|
+
if: steps.guard.outputs.skip != 'true'
|
|
59
|
+
env:
|
|
60
|
+
GH_TOKEN: ${{ github.token }}
|
|
61
|
+
run: |
|
|
62
|
+
mkdir -p out
|
|
63
|
+
for f in deps-map.json deps-osv.json deps-owners.json; do
|
|
64
|
+
gh release download bench-latest -p "$f" -D out --clobber || echo "no $f yet"
|
|
65
|
+
done
|
|
66
|
+
- name: Build signals and the snapshot from the crawl releases
|
|
67
|
+
id: build
|
|
68
|
+
if: steps.guard.outputs.skip != 'true'
|
|
69
|
+
run: python -m mergescout.snapshot build --from-releases --out out
|
|
70
|
+
# The snapshot first: users depend on it; the signal tables are only an extra copy.
|
|
71
|
+
- name: Publish the snapshot
|
|
72
|
+
if: steps.guard.outputs.skip != 'true'
|
|
73
|
+
run: python -m mergescout.snapshot publish out
|
|
74
|
+
- name: Publish the signal tables
|
|
75
|
+
if: always() && steps.build.outcome == 'success'
|
|
76
|
+
run: python -m mergescout.store put out/signals.tar --tag signals-latest
|
|
77
|
+
# Opt-in figures that teams filed as issues; a group is published only with 10+ repos.
|
|
78
|
+
- name: Build peer groups from shared benchmark figures
|
|
79
|
+
if: always() && steps.build.outcome == 'success'
|
|
80
|
+
env:
|
|
81
|
+
GH_TOKEN: ${{ github.token }}
|
|
82
|
+
run: python -m mergescout.bench.shared --repo "$GITHUB_REPOSITORY" --repo stackvitals/stackvitals --out out/shared-benchmarks.json || echo "shared figures skipped"
|
|
83
|
+
# Each extra is published when it was built; a skipped one keeps yesterday's file.
|
|
84
|
+
- name: Publish the review-flow benchmarks, the triage model, the upgrade ledger and the package map
|
|
85
|
+
if: always() && steps.build.outcome == 'success'
|
|
86
|
+
run: |
|
|
87
|
+
for f in flow-benchmarks.json delivery-benchmarks.json community-benchmarks.json triage-model.json deps-ledger.json deps-map.json watch-repos.txt deps-trends.json deps-osv.json deps-owners.json shared-benchmarks.json; do
|
|
88
|
+
if [ -f "out/$f" ]; then python -m mergescout.store put "out/$f" --tag bench-latest; else echo "out/$f was not built"; fi
|
|
89
|
+
done
|
|
90
|
+
# The Action reads the CI and shared benchmarks from the public repo's release; without its token the copy is skipped.
|
|
91
|
+
- name: Check for the public benchmark token
|
|
92
|
+
id: public_bench
|
|
93
|
+
if: always() && steps.guard.outputs.skip != 'true'
|
|
94
|
+
env:
|
|
95
|
+
PUBLIC_BENCH_TOKEN: ${{ secrets.PUBLIC_BENCH_TOKEN }}
|
|
96
|
+
run: |
|
|
97
|
+
if [ -n "$PUBLIC_BENCH_TOKEN" ]; then echo "set=true" >> "$GITHUB_OUTPUT"; else echo "No PUBLIC_BENCH_TOKEN; the public copy is skipped."; fi
|
|
98
|
+
- name: Copy the CI and shared benchmarks to the public release
|
|
99
|
+
if: always() && steps.public_bench.outputs.set == 'true'
|
|
100
|
+
continue-on-error: true
|
|
101
|
+
env:
|
|
102
|
+
GH_TOKEN: ${{ github.token }}
|
|
103
|
+
PUBLIC_BENCH_TOKEN: ${{ secrets.PUBLIC_BENCH_TOKEN }}
|
|
104
|
+
run: |
|
|
105
|
+
mkdir -p public-bench
|
|
106
|
+
for f in ci-benchmarks.json shared-benchmarks.json; do
|
|
107
|
+
gh release download bench-latest -R "$GITHUB_REPOSITORY" -p "$f" -D public-bench --clobber || echo "no $f yet"
|
|
108
|
+
done
|
|
109
|
+
files=$(find public-bench -name '*.json')
|
|
110
|
+
if [ -z "$files" ]; then echo "Nothing to copy."; exit 0; fi
|
|
111
|
+
export GH_TOKEN="$PUBLIC_BENCH_TOKEN"
|
|
112
|
+
gh release view bench-latest -R stackvitals/stackvitals > /dev/null 2>&1 ||
|
|
113
|
+
gh release create bench-latest -R stackvitals/stackvitals --title "Benchmarks" --notes "Peer benchmarks the StackVitals Action compares with, refreshed daily."
|
|
114
|
+
# shellcheck disable=SC2086
|
|
115
|
+
gh release upload bench-latest $files -R stackvitals/stackvitals --clobber
|
|
116
|
+
- name: Sizes
|
|
117
|
+
if: always()
|
|
118
|
+
run: du -sh data out || true
|
|
@@ -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
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: Prospective tests
|
|
2
|
+
|
|
3
|
+
# The pre-registered reads, scored on their dates whatever they show: reviewer suggestions (from 2027-01-15), the
|
|
4
|
+
# finder's ranking (from 2027-03-20) and the adoption study (from 2027-07-01, then every three months). Each scorer
|
|
5
|
+
# refuses to run early or on a changed frozen file, and a finished read is not scored again; results come back as a PR.
|
|
6
|
+
on:
|
|
7
|
+
schedule:
|
|
8
|
+
- cron: "0 7 16 1 *"
|
|
9
|
+
- cron: "0 7 21 3 *"
|
|
10
|
+
- cron: "0 7 2 1,4,7,10 *"
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: write
|
|
15
|
+
pull-requests: write
|
|
16
|
+
issues: write
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: prospective
|
|
20
|
+
cancel-in-progress: false
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
score:
|
|
24
|
+
# Runs only in the private repo that holds the crawl data; elsewhere the job is skipped.
|
|
25
|
+
if: github.repository == 'kaushik-yadav/merge-scout'
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
timeout-minutes: 120
|
|
28
|
+
env:
|
|
29
|
+
MS_DATA_DIR: ${{ github.workspace }}/data
|
|
30
|
+
# Code search (finding adopters) needs a person's token; the built-in one reads everything else.
|
|
31
|
+
GH_TOKEN: ${{ secrets.PROSPECTIVE_TOKEN || github.token }}
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
34
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.11"
|
|
37
|
+
cache: pip
|
|
38
|
+
cache-dependency-path: pyproject.toml
|
|
39
|
+
- run: pip install ".[pipeline]"
|
|
40
|
+
- name: Download the crawl
|
|
41
|
+
env:
|
|
42
|
+
MS_RELEASE_TOKEN: ${{ github.token }}
|
|
43
|
+
run: |
|
|
44
|
+
python -c "
|
|
45
|
+
import os; from pathlib import Path
|
|
46
|
+
from mergescout.github.releases import Releases
|
|
47
|
+
from mergescout.store.sync import fetch_bronze
|
|
48
|
+
fetch_bronze(Releases(os.environ['MS_RELEASE_TOKEN'], os.environ['GITHUB_REPOSITORY']), Path(os.environ['MS_DATA_DIR']))"
|
|
49
|
+
- name: Score every test that is due
|
|
50
|
+
run: |
|
|
51
|
+
set +e
|
|
52
|
+
{
|
|
53
|
+
# A read that already has its results stands; it is not scored again.
|
|
54
|
+
echo "## Reviewer suggestions"
|
|
55
|
+
if [ -f bench/accuracy/team/prospective-results.json ]; then echo "Already scored; the read stands."
|
|
56
|
+
else python bench/accuracy/team/prospective.py score; echo "exit $?"; fi
|
|
57
|
+
echo "## Finder's ranking"
|
|
58
|
+
if [ -f bench/accuracy/contribute/prospective-results.json ]; then echo "Already scored; the read stands."
|
|
59
|
+
else python bench/accuracy/contribute/prospective.py score --crawl data/bronze/crawl; echo "exit $?"; fi
|
|
60
|
+
# study.py refuses by itself (exit 4) once a read included 20+ adopters or after 2028-07-01.
|
|
61
|
+
echo "## Adoption study"
|
|
62
|
+
if [ "$(date -u +%F)" \> "2027-06-30" ]; then python bench/accuracy/adoption/study.py find; fi
|
|
63
|
+
python bench/accuracy/adoption/study.py score --crawl data/bronze/crawl; echo "exit $?"
|
|
64
|
+
} 2>&1 | tee scores.log
|
|
65
|
+
- name: Open a pull request with the results
|
|
66
|
+
run: |
|
|
67
|
+
for f in bench/accuracy/team/prospective-results.json bench/accuracy/contribute/prospective-results.json \
|
|
68
|
+
bench/accuracy/adoption/adopters.json bench/accuracy/adoption/results.json; do
|
|
69
|
+
if [ -f "$f" ]; then git add "$f"; fi
|
|
70
|
+
done
|
|
71
|
+
if git diff --cached --quiet; then echo "Nothing was due."; exit 0; fi
|
|
72
|
+
branch="test/prospective-$(date -u +%F)-${{ github.run_id }}"
|
|
73
|
+
git -c user.name="github-actions[bot]" -c user.email="41898282+github-actions[bot]@users.noreply.github.com" \
|
|
74
|
+
commit -q -m "test(measure): Score the pre-registered prospective tests due $(date -u +%F)"
|
|
75
|
+
git push -q origin "HEAD:refs/heads/$branch"
|
|
76
|
+
body="$(printf 'Scored by the Prospective tests workflow, published whatever the results show.\n\n```\n%s\n```\n' "$(tail -c 60000 scores.log)")"
|
|
77
|
+
# Repos that don't let Actions open pull requests get an issue pointing at the branch instead.
|
|
78
|
+
gh pr create --head "$branch" --title "Prospective test results $(date -u +%F)" --body "$body" ||
|
|
79
|
+
gh issue create --title "Prospective test results $(date -u +%F) (branch $branch)" --body "$body"
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
# A version tag (v0.1.0) builds the package with read-only rights, then a second job signs every file keylessly with
|
|
3
|
+
# Sigstore, writes a software bill of materials and a build provenance attestation, and publishes them on the release.
|
|
4
|
+
# A third job then uploads the same wheel and sdist to PyPI by trusted publishing (no stored token).
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
# Version tags only: moving the floating `v0` tag must not make a release.
|
|
8
|
+
tags: ["v*.*.*"]
|
|
9
|
+
permissions: {}
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
timeout-minutes: 15
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
18
|
+
with:
|
|
19
|
+
persist-credentials: false
|
|
20
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
21
|
+
with:
|
|
22
|
+
enable-cache: false
|
|
23
|
+
- name: Build
|
|
24
|
+
# The build backend is pinned, so a new upload to PyPI can never change what gets signed.
|
|
25
|
+
run: uv build --build-constraint .github/build-constraints.txt --no-cache --out-dir dist
|
|
26
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
27
|
+
with:
|
|
28
|
+
name: dist
|
|
29
|
+
path: dist/
|
|
30
|
+
retention-days: 1
|
|
31
|
+
publish:
|
|
32
|
+
needs: build
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
timeout-minutes: 15
|
|
35
|
+
# Reviewers on this environment and a tag ruleset decide who can publish (repo settings).
|
|
36
|
+
environment: release
|
|
37
|
+
permissions:
|
|
38
|
+
contents: write # the release and its files
|
|
39
|
+
id-token: write # Sigstore's keyless signing and the provenance attestation
|
|
40
|
+
attestations: write
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
|
43
|
+
with:
|
|
44
|
+
name: dist
|
|
45
|
+
path: dist
|
|
46
|
+
- name: Find the wheel
|
|
47
|
+
id: wheel
|
|
48
|
+
run: echo "path=$(ls dist/*.whl)" >> "$GITHUB_OUTPUT"
|
|
49
|
+
- name: Software bill of materials
|
|
50
|
+
# What the wheel installs, not the whole source tree with its test and bench tools.
|
|
51
|
+
uses: anchore/sbom-action@66cbf4bc1f1c0d2edc94016e65bc221b6bb0ad6c # v0.24.3
|
|
52
|
+
with:
|
|
53
|
+
file: ${{ steps.wheel.outputs.path }}
|
|
54
|
+
format: spdx-json
|
|
55
|
+
output-file: sbom.spdx.json
|
|
56
|
+
upload-artifact: false
|
|
57
|
+
upload-release-assets: false
|
|
58
|
+
- name: Keep the SBOM with the release files
|
|
59
|
+
run: mv sbom.spdx.json dist/stackvitals.spdx.json
|
|
60
|
+
- name: Sign with Sigstore
|
|
61
|
+
uses: sigstore/gh-action-sigstore-python@790bc6befb9d733738f18d8f895854b453640ec9 # v3.5.0
|
|
62
|
+
with:
|
|
63
|
+
inputs: ./dist/*.whl ./dist/*.tar.gz ./dist/stackvitals.spdx.json
|
|
64
|
+
upload-signing-artifacts: false
|
|
65
|
+
release-signing-artifacts: false
|
|
66
|
+
- name: Build provenance
|
|
67
|
+
uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
|
|
68
|
+
with:
|
|
69
|
+
subject-path: dist/*
|
|
70
|
+
- name: Publish the release
|
|
71
|
+
env:
|
|
72
|
+
GH_TOKEN: ${{ github.token }}
|
|
73
|
+
TAG: ${{ github.ref_name }}
|
|
74
|
+
REPO: ${{ github.repository }}
|
|
75
|
+
run: gh release create "$TAG" dist/* --repo "$REPO" --title "$TAG" --generate-notes --verify-tag
|
|
76
|
+
pypi:
|
|
77
|
+
needs: [build, publish]
|
|
78
|
+
# The real home only (forks and copies skip it); update this name if the repo moves (launch step C1).
|
|
79
|
+
if: github.repository == 'stackvitals/stackvitals'
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
timeout-minutes: 15
|
|
82
|
+
# PyPI's trusted publisher names this repo, release.yml and this environment; nothing else can upload.
|
|
83
|
+
environment: release
|
|
84
|
+
permissions:
|
|
85
|
+
id-token: write # the short-lived PyPI upload token, by OIDC
|
|
86
|
+
steps:
|
|
87
|
+
# The files the build job made and the publish job signed, not a rebuild.
|
|
88
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
|
89
|
+
with:
|
|
90
|
+
name: dist
|
|
91
|
+
path: dist
|
|
92
|
+
- name: Check the tag matches the package version
|
|
93
|
+
env:
|
|
94
|
+
TAG: ${{ github.ref_name }}
|
|
95
|
+
run: |
|
|
96
|
+
ls dist
|
|
97
|
+
test -f "dist/stackvitals-${TAG#v}.tar.gz" && test "$(ls dist | wc -l)" -eq 2
|
|
98
|
+
- name: Publish to PyPI
|
|
99
|
+
uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
100
|
+
with:
|
|
101
|
+
packages-dir: dist/
|
|
102
|
+
# The MCP registry listing is a separate, manual step: docs/release-checklist.md, "Publishing".
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
# The committed workflow tests on every pull request, with a read-only token and no secrets.
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
concurrency:
|
|
9
|
+
group: tests-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
timeout-minutes: 30
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
|
|
17
|
+
with:
|
|
18
|
+
persist-credentials: false
|
|
19
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
20
|
+
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
|
21
|
+
with:
|
|
22
|
+
node-version: 22
|
|
23
|
+
# The web app's build tools, so the suite can rebuild the app and check the committed build is current.
|
|
24
|
+
- name: Install the web app's build tools
|
|
25
|
+
working-directory: web
|
|
26
|
+
run: npm ci --ignore-scripts --no-audit --no-fund
|
|
27
|
+
- name: Run the tests
|
|
28
|
+
run: uv run --locked --extra dev pytest -q
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.3 (2026-10-31)
|
|
4
|
+
|
|
5
|
+
- The app's About page and the project site say Apache 2.0 (they said MIT); the site shows the cube logo and the
|
|
6
|
+
one-command setup.
|
|
7
|
+
- The app's Setup page and Help give `stackvitals init owner/repo` as the terminal way to set a repo up.
|
|
8
|
+
- PyPI lists the project's links (home, docs, source, issues, changelog).
|
|
9
|
+
- Docs: the install page says how to get the command; guides, quickstart and modules lead with `stackvitals init`;
|
|
10
|
+
contradictions fixed (golden paths, GitLab, GitHub Enterprise Server, sign-in, private repos' CI runs, cycle-time
|
|
11
|
+
phases); the PR verdicts are a table; the settings page says which switches are on by default; the architecture
|
|
12
|
+
diagrams list every trigger and show Portal running from the org's repo; a release checklist with the real steps.
|
|
13
|
+
- A code of conduct (Contributor Covenant 2.1), with reports through the repository's private reporting form.
|
|
14
|
+
|
|
15
|
+
## 0.1.2 (2026-10-31)
|
|
16
|
+
|
|
17
|
+
- `stackvitals init owner/repo` sets StackVitals up in one command: commits the workflow (or opens a pull request), follows
|
|
18
|
+
the first run and turns on Pages for a public repo; a private repo keeps Pages off and opens with `stackvitals ui`.
|
|
19
|
+
- The StackVitals cube is the app's logo in the sidebar, the browser tab and the splash; the logo picker is gone.
|
|
20
|
+
- The README opens with the logo, a short tour and the architecture; the architecture docs open with a detailed diagram.
|
|
21
|
+
|
|
22
|
+
## 0.1.1 (2026-10-31)
|
|
23
|
+
|
|
24
|
+
- The Action's description is shorter, to fit the GitHub Marketplace listing. No other change.
|
|
25
|
+
|
|
26
|
+
## 0.1.0 (2026-10-31)
|
|
27
|
+
|
|
28
|
+
First release of StackVitals: one Action, one CLI and one MCP server over these modules. History stays in your repo's
|
|
29
|
+
`stackvitals-data` branch, with an app on your repo's GitHub Pages (or `stackvitals ui owner/repo` on your machine).
|
|
30
|
+
|
|
31
|
+
**CI Health**
|
|
32
|
+
- Finds flaky jobs and tests from your GitHub Actions history: a failure that later passed with no code change, on a re-run or on another run of the same code. Outages, gatekeeper jobs and GitHub-managed workflows are ignored.
|
|
33
|
+
- Calls a failure likely flaky only with a flake's sign in the log and no changed file named; likely flakes are re-run once, never passed by the verdict check.
|
|
34
|
+
- Reads JUnit XML and CTRF JSON test reports from run artifacts (or `stackvitals ci upload` from any CI, GitLab CI included), groups failures by root cause, names the matrix variant flakes came from, and keeps each test's state with the day it began.
|
|
35
|
+
- One comment per pull request: which failures are known flakes, which already fail on the default branch (with the same error), and which are new.
|
|
36
|
+
- What each flaky test cost and the pull requests it got in the way of; what CI costs by workflow and job; the first-try share opened into the pushes that missed it.
|
|
37
|
+
- Opt-in automation: re-run known flakes once, retry only failed tests in the job, quarantine inside Playwright, Maven and dotnet test runs (ending after `max_days`), burn-in for new tests, one issue or Jira/Linear ticket per flaky test, verified fix requests for real CI breaks, and Slack, Discord or Teams alerts.
|
|
38
|
+
- Test impact: picks the tests a change can affect, with a replay of the rule on past pull requests.
|
|
39
|
+
|
|
40
|
+
**Team Flow and Delivery**
|
|
41
|
+
- Who acts next on each open pull request, review stages, insiders and outside contributors, suggested reviewers, size labels and PR rules as code.
|
|
42
|
+
- LinearB's six cycle-time phases with P50 and P75 (weekends and holidays left out with a working calendar), and DORA counted exactly as DevLake's dashboard counts it, with an export in DevLake's table shapes.
|
|
43
|
+
- Deployments from the Deployments API, releases, merges or workflow runs, with release and GitFlow branches; deployments and incidents from any tool through `repository_dispatch`; GitLab merge requests and deployments.
|
|
44
|
+
- A deployments tab, all four DORA metrics week by week, per team and per service in a monorepo, several repos pooled into one project, and every DORA number opened into the pull requests and deployments behind it (`stackvitals explain` in the terminal).
|
|
45
|
+
- Coding agents' work, review load and how much of people's and agents' code lasts 30 and 90 days; AI tool usage and spend beside AI-involved pull requests.
|
|
46
|
+
- Change risk on open pull requests where the repo's own backtest shows it works; what changed in the hours before an incident; a capitalisation CSV for finance.
|
|
47
|
+
|
|
48
|
+
**Insights and alerts**
|
|
49
|
+
- One ranked list of what to fix first, in hours at stake, and alerts when pickup, review, cycle time or change failure rate crosses a threshold.
|
|
50
|
+
|
|
51
|
+
**Dependency Steward**
|
|
52
|
+
- Known vulnerabilities and malware in every lockfile OSV-Scanner reads, .NET project files and SBOMs, the Actions your workflows use and container base images; exploited advisories, dependency paths, development-only packages and Go reachability.
|
|
53
|
+
- The smallest fixing upgrade with its command, licence checks on new packages, look-alike package names, `osv-scanner.toml` ignores honoured, SARIF for GitHub's Security tab, and OpenSSF Scorecard's checks run on the repo itself.
|
|
54
|
+
|
|
55
|
+
**Community, Portal and Explore**
|
|
56
|
+
- Newcomers waiting for a first answer (maintainers, regular responders and triagers count as the project's answer), the contributor funnel, cohorts and star history, with forums and chat.
|
|
57
|
+
- An org catalog with owners, scorecards, golden paths, required checks, an org-wide view and a Backstage export.
|
|
58
|
+
- SQL over your history in the browser, with links to share a query.
|
|
59
|
+
|
|
60
|
+
**Contribute (MergeScout)**
|
|
61
|
+
- Open-source issues an outsider can get merged, with evidence, from a daily snapshot of public repos.
|
|
62
|
+
|
|
63
|
+
**The app**
|
|
64
|
+
- One page per module in the Instrument design, with Overview and Insights first, a Data health page, a demo at `?demo=1`, and decisions and settings saved from the browser.
|
|
65
|
+
- One-click setups for more repos once GitHub is connected, and a test call for every connection.
|
|
66
|
+
|
|
67
|
+
**Decisions and the weekly digest**
|
|
68
|
+
- `/stackvitals` commands in comments (quarantine, unquarantine, mute, acknowledge, snooze, exclude) from people with access, each logged with who, why and until when; temporary ones end on their own.
|
|
69
|
+
- Requests from the app as prefilled issues, applied by the workflow (settings changes open a pull request when the branch is protected).
|
|
70
|
+
- A weekly digest on one pinned issue and/or the webhook; findings keep "open since" and how much of the last 90 days they were active.
|
|
71
|
+
|
|
72
|
+
**Integrations**
|
|
73
|
+
- Jira Cloud, Linear, PagerDuty, incident.io, SonarQube or SonarCloud, Copilot usage reports, Claude Code analytics, Anthropic, OpenAI and Cursor spend, Slack, Teams, Discord, Discourse, Bitbucket, Azure DevOps, GitLab, Backstage and DevLake's tables; GitHub Enterprise Server's API addresses are followed from the job.
|
|
74
|
+
- A service can be read again from a chosen date instead of starting over.
|
|
75
|
+
|
|
76
|
+
**Settings and install**
|
|
77
|
+
- `.github/stackvitals.toml`, read on every run; every key is listed in docs/settings.md.
|
|
78
|
+
- Modules can be installed one at a time, each asking only for the permissions it uses.
|
|
79
|
+
|
|
80
|
+
**Measured, with the losses published**
|
|
81
|
+
- Accuracy cards with ranges for every headline rule, labels checked by two model families and a model panel, and one command to reproduce each result ([docs/accuracy.md](docs/accuracy.md)).
|
|
82
|
+
- Pre-registered side-by-side runs against Apache DevLake, Middleware and OpenSSF Scorecard on public repos.
|
|
83
|
+
|
|
84
|
+
**Security**
|
|
85
|
+
- Every action pinned to a commit, release files signed with Sigstore with an SBOM and build provenance, locked installs, and test reports from forks not trusted.
|
|
86
|
+
|
|
87
|
+
**For AI agents**
|
|
88
|
+
- `stackvitals serve`: one MCP server with every module's tools (11 core tools by default, all 35 with `--tools all`), each answer stamped with when and where it came from, a skill pack and `llms.txt`.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience
|
|
6
|
+
for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
7
|
+
identity and expression, level of experience, education, socio-economic status, nationality, personal appearance,
|
|
8
|
+
race, caste, color, religion, or sexual identity and orientation.
|
|
9
|
+
|
|
10
|
+
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy
|
|
11
|
+
community.
|
|
12
|
+
|
|
13
|
+
## Our Standards
|
|
14
|
+
|
|
15
|
+
Examples of behavior that contributes to a positive environment for our community include:
|
|
16
|
+
|
|
17
|
+
* Demonstrating empathy and kindness toward other people
|
|
18
|
+
* Being respectful of differing opinions, viewpoints, and experiences
|
|
19
|
+
* Giving and gracefully accepting constructive feedback
|
|
20
|
+
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
|
21
|
+
* Focusing on what is best not just for us as individuals, but for the overall community
|
|
22
|
+
|
|
23
|
+
Examples of unacceptable behavior include:
|
|
24
|
+
|
|
25
|
+
* The use of sexualized language or imagery, and sexual attention or advances of any kind
|
|
26
|
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
27
|
+
* Public or private harassment
|
|
28
|
+
* Publishing others' private information, such as a physical or email address, without their explicit permission
|
|
29
|
+
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
|
30
|
+
|
|
31
|
+
## Enforcement Responsibilities
|
|
32
|
+
|
|
33
|
+
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take
|
|
34
|
+
appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening,
|
|
35
|
+
offensive, or harmful.
|
|
36
|
+
|
|
37
|
+
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
|
|
38
|
+
issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for
|
|
39
|
+
moderation decisions when appropriate.
|
|
40
|
+
|
|
41
|
+
## Scope
|
|
42
|
+
|
|
43
|
+
This Code of Conduct applies within all community spaces, and also applies when an individual is officially
|
|
44
|
+
representing the community in public spaces. Examples of representing our community include using an official e-mail
|
|
45
|
+
address, posting via an official social media account, or acting as an appointed representative at an online or
|
|
46
|
+
offline event.
|
|
47
|
+
|
|
48
|
+
## Enforcement
|
|
49
|
+
|
|
50
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders
|
|
51
|
+
responsible for enforcement privately, through GitHub's private reporting form for this repository: open the
|
|
52
|
+
**Security** tab of [stackvitals/stackvitals](https://github.com/stackvitals/stackvitals/security), choose **Report a
|
|
53
|
+
vulnerability**, and start the title with "Conduct:". Only the maintainers can read it. You can also use GitHub's
|
|
54
|
+
[Report content](https://docs.github.com/en/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam)
|
|
55
|
+
on any comment, issue or pull request. All complaints will be reviewed and investigated promptly and fairly.
|
|
56
|
+
|
|
57
|
+
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
|
58
|
+
|
|
59
|
+
## Enforcement Guidelines
|
|
60
|
+
|
|
61
|
+
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they
|
|
62
|
+
deem in violation of this Code of Conduct:
|
|
63
|
+
|
|
64
|
+
### 1. Correction
|
|
65
|
+
|
|
66
|
+
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the
|
|
67
|
+
community.
|
|
68
|
+
|
|
69
|
+
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the
|
|
70
|
+
violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
|
|
71
|
+
|
|
72
|
+
### 2. Warning
|
|
73
|
+
|
|
74
|
+
**Community Impact**: A violation through a single incident or series of actions.
|
|
75
|
+
|
|
76
|
+
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved,
|
|
77
|
+
including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This
|
|
78
|
+
includes avoiding interactions in community spaces as well as external channels like social media. Violating these
|
|
79
|
+
terms may lead to a temporary or permanent ban.
|
|
80
|
+
|
|
81
|
+
### 3. Temporary Ban
|
|
82
|
+
|
|
83
|
+
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
|
|
84
|
+
|
|
85
|
+
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a
|
|
86
|
+
specified period of time. No public or private interaction with the people involved, including unsolicited
|
|
87
|
+
interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to
|
|
88
|
+
a permanent ban.
|
|
89
|
+
|
|
90
|
+
### 4. Permanent Ban
|
|
91
|
+
|
|
92
|
+
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate
|
|
93
|
+
behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
|
|
94
|
+
|
|
95
|
+
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
|
96
|
+
|
|
97
|
+
## Attribution
|
|
98
|
+
|
|
99
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at
|
|
100
|
+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
|
101
|
+
|
|
102
|
+
Community Impact Guidelines were inspired by
|
|
103
|
+
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
|
104
|
+
|
|
105
|
+
For answers to common questions about this code of conduct, see the FAQ at
|
|
106
|
+
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
|
107
|
+
[https://www.contributor-covenant.org/translations][translations].
|
|
108
|
+
|
|
109
|
+
[homepage]: https://www.contributor-covenant.org
|
|
110
|
+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
|
111
|
+
[Mozilla CoC]: https://github.com/mozilla/diversity
|
|
112
|
+
[FAQ]: https://www.contributor-covenant.org/faq
|
|
113
|
+
[translations]: https://www.contributor-covenant.org/translations
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for helping. StackVitals is small enough that one person can read any part of it in an afternoon; please
|
|
4
|
+
keep it that way. Everyone taking part follows the [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
5
|
+
|
|
6
|
+
## Set up
|
|
7
|
+
|
|
8
|
+
You need Python 3.11+, [uv](https://docs.astral.sh/uv/), git and Node 22 (a few tests check the app's scripts).
|
|
9
|
+
|
|
10
|
+
Clone the repo, then from its folder:
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
uv run --extra dev pytest tests -q
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The tests need no token and no network. [docs/architecture.md](docs/architecture.md) explains how the parts fit.
|
|
17
|
+
|
|
18
|
+
**The web app** is TypeScript in `web/`, built into `src/stackvitals/web/app/`, and the built files are committed
|
|
19
|
+
(they ship in the package). After changing it:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
cd web
|
|
23
|
+
npm ci
|
|
24
|
+
npm run build
|
|
25
|
+
npm test
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Commit `web/` and the rebuilt `src/stackvitals/web/` together; a test fails when the build is out of date.
|
|
29
|
+
[web/README.md](web/README.md) explains its layout and the browser tests (`npm run e2e`).
|
|
30
|
+
|
|
31
|
+
## What a good change looks like
|
|
32
|
+
|
|
33
|
+
- **A bug:** a failing test first, then the fix. Task-sized tests go in `tests/local/`; a test that guards a real
|
|
34
|
+
bug or finding for a whole flow goes in the `tests/test_flow_<area>.py` file for that area.
|
|
35
|
+
- **A new rule or a changed one** (anything that decides a verdict or a number people see): add or update its entry in
|
|
36
|
+
[bench/accuracy/registry.json](bench/accuracy/registry.json) with what it was tuned on, what it was checked on and
|
|
37
|
+
the bar, check it on public data the rule never saw, then run `python bench/accuracy/summary.py` to regenerate
|
|
38
|
+
[docs/accuracy.md](docs/accuracy.md) and [docs/rules.md](docs/rules.md). A change that makes a number look better
|
|
39
|
+
without held-out evidence won't be merged; a change that publishes a loss will.
|
|
40
|
+
- **A new setting:** add it to `src/stackvitals/core/schema.py`; [docs/settings.md](docs/settings.md) is generated
|
|
41
|
+
from it and a test checks they match.
|
|
42
|
+
- **Anything that reaches a new host or needs a new permission:** say so in the pull request. The privacy page lists
|
|
43
|
+
every outside host and a test fails if code can reach one it doesn't name ([docs/privacy.md](docs/privacy.md)).
|
|
44
|
+
- **A new action in a workflow:** pin it to a commit with the version in a comment; a test fails otherwise.
|
|
45
|
+
|
|
46
|
+
## Style
|
|
47
|
+
|
|
48
|
+
- Code reads like the code around it. Comments are short, plain and say why, not what.
|
|
49
|
+
- Copy people see is plain English: what happened, how many, since when, and what to do. No unexplained jargon, and
|
|
50
|
+
never a number without its sample size.
|
|
51
|
+
- Each test says what real bug or finding it guards; the `tests/test_flow_*.py` files stay few and test whole flows.
|
|
52
|
+
|
|
53
|
+
## Pull requests
|
|
54
|
+
|
|
55
|
+
- Branch names: `type/short-topic` (`fix/flake-window`). Commit messages follow
|
|
56
|
+
[Conventional Commits](https://www.conventionalcommits.org/): `fix(ci): Keep the failing step when a job is re-run`.
|
|
57
|
+
- The Tests workflow runs on every pull request. A maintainer reviews within a week; if it has been longer, comment
|
|
58
|
+
to ask.
|
|
59
|
+
- By contributing you agree your work is released under the [Apache License 2.0](LICENSE).
|
|
60
|
+
|
|
61
|
+
## Security problems
|
|
62
|
+
|
|
63
|
+
Never in a public issue: see [SECURITY.md](SECURITY.md).
|