stackvitals 0.1.0__py3-none-any.whl
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.
- mergescout/__init__.py +1 -0
- mergescout/archive/__init__.py +0 -0
- mergescout/archive/__main__.py +30 -0
- mergescout/archive/convert.py +83 -0
- mergescout/archive/events.py +55 -0
- mergescout/archive/manifest.py +45 -0
- mergescout/archive/stream.py +83 -0
- mergescout/bench/__init__.py +1 -0
- mergescout/bench/__main__.py +135 -0
- mergescout/bench/ci.py +257 -0
- mergescout/bench/deploys.py +115 -0
- mergescout/bench/matched.py +22 -0
- mergescout/bench/prior.py +42 -0
- mergescout/bench/report.py +230 -0
- mergescout/bench/shared.py +112 -0
- mergescout/bench/stars.py +57 -0
- mergescout/cli.py +89 -0
- mergescout/config.py +35 -0
- mergescout/crawl/__init__.py +0 -0
- mergescout/crawl/__main__.py +97 -0
- mergescout/crawl/chain.py +34 -0
- mergescout/crawl/fetch.py +146 -0
- mergescout/crawl/outcomes.py +69 -0
- mergescout/crawl/queries.py +250 -0
- mergescout/crawl/runner.py +176 -0
- mergescout/crawl/seed.py +77 -0
- mergescout/crawl/state.py +169 -0
- mergescout/crawl/writer.py +87 -0
- mergescout/discover/__init__.py +0 -0
- mergescout/discover/__main__.py +58 -0
- mergescout/discover/sweep.py +286 -0
- mergescout/github/__init__.py +0 -0
- mergescout/github/graphql.py +202 -0
- mergescout/github/identities.py +35 -0
- mergescout/github/releases.py +137 -0
- mergescout/labels.py +20 -0
- mergescout/mcp_server.py +228 -0
- mergescout/measure/__init__.py +0 -0
- mergescout/measure/__main__.py +75 -0
- mergescout/measure/api_cost.py +91 -0
- mergescout/measure/count_repos.py +30 -0
- mergescout/measure/jsonl.py +14 -0
- mergescout/measure/report.py +56 -0
- mergescout/measure/sample.py +37 -0
- mergescout/owners.py +22 -0
- mergescout/setup_check.py +64 -0
- mergescout/signals/__init__.py +0 -0
- mergescout/signals/__main__.py +96 -0
- mergescout/signals/bump_ledger.py +258 -0
- mergescout/signals/bumps.py +104 -0
- mergescout/signals/check.py +141 -0
- mergescout/signals/community_bench.py +149 -0
- mergescout/signals/delivery_bench.py +103 -0
- mergescout/signals/deps_map.py +261 -0
- mergescout/signals/deps_trends.py +117 -0
- mergescout/signals/evidence.py +94 -0
- mergescout/signals/exploits.py +43 -0
- mergescout/signals/flow_bench.py +258 -0
- mergescout/signals/identity.py +73 -0
- mergescout/signals/issues.py +76 -0
- mergescout/signals/labels.py +79 -0
- mergescout/signals/osv.py +232 -0
- mergescout/signals/owners_watch.py +80 -0
- mergescout/signals/repo_stats.py +96 -0
- mergescout/signals/rules.py +70 -0
- mergescout/signals/silver.py +33 -0
- mergescout/signals/top_packages.py +26 -0
- mergescout/signals/triage.py +71 -0
- mergescout/signals/triage_math.py +120 -0
- mergescout/signals/walls.py +91 -0
- mergescout/snapshot/__init__.py +0 -0
- mergescout/snapshot/__main__.py +215 -0
- mergescout/snapshot/build.py +147 -0
- mergescout/snapshot/publish.py +70 -0
- mergescout/snapshot/schema.py +34 -0
- mergescout/snapshot/score.py +30 -0
- mergescout/store/__init__.py +0 -0
- mergescout/store/__main__.py +46 -0
- mergescout/store/sync.py +148 -0
- mergescout/timeutil.py +11 -0
- mergescout/tool/__init__.py +0 -0
- mergescout/tool/action_pack.py +62 -0
- mergescout/tool/live.py +201 -0
- mergescout/tool/queries.py +293 -0
- mergescout/tool/refs.py +31 -0
- mergescout/tool/store.py +129 -0
- mergescout/tool/tracking.py +83 -0
- stackvitals/__init__.py +2 -0
- stackvitals/__main__.py +4 -0
- stackvitals/ci/__init__.py +1 -0
- stackvitals/ci/action.py +574 -0
- stackvitals/ci/analyze.py +577 -0
- stackvitals/ci/api.py +218 -0
- stackvitals/ci/automation.py +212 -0
- stackvitals/ci/bench.py +195 -0
- stackvitals/ci/burnin.py +102 -0
- stackvitals/ci/cli.py +570 -0
- stackvitals/ci/collect.py +239 -0
- stackvitals/ci/cost.py +107 -0
- stackvitals/ci/coverage.py +155 -0
- stackvitals/ci/feedback.py +699 -0
- stackvitals/ci/fingerprint.py +220 -0
- stackvitals/ci/gitlab.py +121 -0
- stackvitals/ci/gitlab_action.py +125 -0
- stackvitals/ci/impact.py +125 -0
- stackvitals/ci/investigate.py +59 -0
- stackvitals/ci/kinds.py +52 -0
- stackvitals/ci/monitors.py +105 -0
- stackvitals/ci/owners.py +116 -0
- stackvitals/ci/quarantine_runtime.py +90 -0
- stackvitals/ci/report.py +435 -0
- stackvitals/ci/retry.py +67 -0
- stackvitals/ci/selfheal.py +102 -0
- stackvitals/ci/shards.py +120 -0
- stackvitals/ci/share.py +59 -0
- stackvitals/ci/store.py +93 -0
- stackvitals/ci/testreports.py +351 -0
- stackvitals/ci/tickets.py +106 -0
- stackvitals/ci/track_record.json +11 -0
- stackvitals/ci/triage.py +130 -0
- stackvitals/ci/triggers.py +147 -0
- stackvitals/ci/upload.py +85 -0
- stackvitals/ci/validate.py +91 -0
- stackvitals/cli.py +111 -0
- stackvitals/codeowners.py +69 -0
- stackvitals/community/__init__.py +0 -0
- stackvitals/community/action.py +140 -0
- stackvitals/community/affiliation.py +51 -0
- stackvitals/community/analyze.py +507 -0
- stackvitals/community/build.py +56 -0
- stackvitals/community/chaoss.py +70 -0
- stackvitals/community/cli.py +79 -0
- stackvitals/community/collect.py +240 -0
- stackvitals/community/context.py +54 -0
- stackvitals/community/report.py +250 -0
- stackvitals/connectors/__init__.py +244 -0
- stackvitals/connectors/ai_spend.py +190 -0
- stackvitals/connectors/base.py +82 -0
- stackvitals/connectors/check.py +686 -0
- stackvitals/connectors/copilot.py +104 -0
- stackvitals/connectors/discord.py +103 -0
- stackvitals/connectors/discourse.py +117 -0
- stackvitals/connectors/incident_io.py +106 -0
- stackvitals/connectors/jira.py +210 -0
- stackvitals/connectors/linear.py +140 -0
- stackvitals/connectors/pagerduty.py +96 -0
- stackvitals/connectors/slack.py +110 -0
- stackvitals/connectors/sonar.py +77 -0
- stackvitals/connectors/store.py +120 -0
- stackvitals/connectors/tracker.py +108 -0
- stackvitals/connectors/writeback.py +105 -0
- stackvitals/contribute/__init__.py +1 -0
- stackvitals/contribute/brief.py +297 -0
- stackvitals/contribute/cli.py +64 -0
- stackvitals/core/__init__.py +1 -0
- stackvitals/core/actors.py +103 -0
- stackvitals/core/agent_ledger.py +120 -0
- stackvitals/core/agreements.py +95 -0
- stackvitals/core/ai_outcomes.py +276 -0
- stackvitals/core/alerts.py +224 -0
- stackvitals/core/appdata.py +112 -0
- stackvitals/core/bucket.py +190 -0
- stackvitals/core/bugs.py +43 -0
- stackvitals/core/calendar.py +34 -0
- stackvitals/core/capex.py +57 -0
- stackvitals/core/change_risk.py +181 -0
- stackvitals/core/changes.py +133 -0
- stackvitals/core/chat.py +143 -0
- stackvitals/core/config.py +373 -0
- stackvitals/core/dataflow.py +168 -0
- stackvitals/core/decisions.py +275 -0
- stackvitals/core/delivery.py +954 -0
- stackvitals/core/delivery_peers.py +98 -0
- stackvitals/core/delivery_report.py +429 -0
- stackvitals/core/deliverycli.py +147 -0
- stackvitals/core/devlake_dora.sql +485 -0
- stackvitals/core/digest.py +333 -0
- stackvitals/core/explaincli.py +107 -0
- stackvitals/core/explore.py +296 -0
- stackvitals/core/export.py +342 -0
- stackvitals/core/exportcli.py +117 -0
- stackvitals/core/findings.py +350 -0
- stackvitals/core/health.py +94 -0
- stackvitals/core/identity.py +82 -0
- stackvitals/core/insights.py +365 -0
- stackvitals/core/insightscli.py +43 -0
- stackvitals/core/installdoc.py +69 -0
- stackvitals/core/investment.py +187 -0
- stackvitals/core/joins.py +43 -0
- stackvitals/core/llmsdoc.py +40 -0
- stackvitals/core/merge_queue.py +70 -0
- stackvitals/core/metrics.py +109 -0
- stackvitals/core/model.py +285 -0
- stackvitals/core/projectcli.py +66 -0
- stackvitals/core/propose.py +86 -0
- stackvitals/core/pulse.py +85 -0
- stackvitals/core/recorded.py +145 -0
- stackvitals/core/releases.py +39 -0
- stackvitals/core/requests.py +528 -0
- stackvitals/core/resync.py +35 -0
- stackvitals/core/schema.py +205 -0
- stackvitals/core/services.py +203 -0
- stackvitals/core/settings.py +96 -0
- stackvitals/core/sqlcli.py +111 -0
- stackvitals/core/stats.py +222 -0
- stackvitals/core/store.py +125 -0
- stackvitals/core/summary.py +104 -0
- stackvitals/core/time.py +29 -0
- stackvitals/core/tomledit.py +149 -0
- stackvitals/core/uicli.py +138 -0
- stackvitals/core/webapp.py +79 -0
- stackvitals/core/what_changed.py +76 -0
- stackvitals/core/workspace.py +194 -0
- stackvitals/deps/__init__.py +1 -0
- stackvitals/deps/action.py +299 -0
- stackvitals/deps/actions_vulns.py +89 -0
- stackvitals/deps/cli.py +77 -0
- stackvitals/deps/dossier.py +341 -0
- stackvitals/deps/evidence.py +44 -0
- stackvitals/deps/fixplan.py +40 -0
- stackvitals/deps/guarddog.py +32 -0
- stackvitals/deps/hygiene.py +47 -0
- stackvitals/deps/imports.py +113 -0
- stackvitals/deps/lockfiles.py +198 -0
- stackvitals/deps/lookalike.py +80 -0
- stackvitals/deps/reach.py +59 -0
- stackvitals/deps/release.py +110 -0
- stackvitals/deps/runtimes.py +161 -0
- stackvitals/deps/supply.py +454 -0
- stackvitals/deps/vulns.py +588 -0
- stackvitals/editors/__init__.py +40 -0
- stackvitals/editors/vscode/extension.js +101 -0
- stackvitals/editors/vscode/marks.js +92 -0
- stackvitals/editors/vscode/package.json +26 -0
- stackvitals/flow/__init__.py +1 -0
- stackvitals/flow/action.py +178 -0
- stackvitals/flow/analyze.py +418 -0
- stackvitals/flow/automate.py +72 -0
- stackvitals/flow/build.py +46 -0
- stackvitals/flow/cli.py +93 -0
- stackvitals/flow/code_hosts.py +146 -0
- stackvitals/flow/collect.py +451 -0
- stackvitals/flow/gitlab_mr.py +75 -0
- stackvitals/flow/knowledge.py +202 -0
- stackvitals/flow/peers.py +90 -0
- stackvitals/flow/preflight.py +210 -0
- stackvitals/flow/report.py +253 -0
- stackvitals/flow/rules.py +135 -0
- stackvitals/flow/store.py +108 -0
- stackvitals/flow/survival.py +84 -0
- stackvitals/flow/triage.py +62 -0
- stackvitals/mcp_server.py +670 -0
- stackvitals/portal/__init__.py +0 -0
- stackvitals/portal/action.py +205 -0
- stackvitals/portal/batch.py +80 -0
- stackvitals/portal/campaigns.py +104 -0
- stackvitals/portal/catalog.py +104 -0
- stackvitals/portal/checks.py +63 -0
- stackvitals/portal/cli.py +172 -0
- stackvitals/portal/descriptor.py +105 -0
- stackvitals/portal/export.py +43 -0
- stackvitals/portal/github.py +48 -0
- stackvitals/portal/golden.py +95 -0
- stackvitals/portal/history.py +30 -0
- stackvitals/portal/inventory.py +264 -0
- stackvitals/portal/owners.py +78 -0
- stackvitals/portal/pages.py +153 -0
- stackvitals/portal/rollup.py +32 -0
- stackvitals/portal/scorecard.py +366 -0
- stackvitals/security/__init__.py +2 -0
- stackvitals/security/probes.py +154 -0
- stackvitals/security/repo_checks.py +132 -0
- stackvitals/security/workflows.py +111 -0
- stackvitals/shell.py +107 -0
- stackvitals/site.py +51 -0
- stackvitals/web/app/LICENSES.md +428 -0
- stackvitals/web/app/boot.js +1 -0
- stackvitals/web/app/chunks/AddRepo-KRPZXWCY.js +1 -0
- stackvitals/web/app/chunks/SetupRunning-XWFQAKRZ.js +1 -0
- stackvitals/web/app/chunks/accuracy-data-OQTDXI7Y.js +1 -0
- stackvitals/web/app/chunks/agents-data-BAL6QAOF.js +11 -0
- stackvitals/web/app/chunks/chunk-24LFKFZ6.js +1 -0
- stackvitals/web/app/chunks/chunk-3G4SQNUC.js +1 -0
- stackvitals/web/app/chunks/chunk-3IXWEOIJ.js +154 -0
- stackvitals/web/app/chunks/chunk-3ROQFHPV.js +1 -0
- stackvitals/web/app/chunks/chunk-45PGAQRO.js +8 -0
- stackvitals/web/app/chunks/chunk-4H53OYLG.js +1 -0
- stackvitals/web/app/chunks/chunk-4LUI7O5P.js +1 -0
- stackvitals/web/app/chunks/chunk-4SQPQ5TB.js +1 -0
- stackvitals/web/app/chunks/chunk-4WKQTWUC.js +2 -0
- stackvitals/web/app/chunks/chunk-576YHDEK.js +8 -0
- stackvitals/web/app/chunks/chunk-6BDBXA6V.js +1 -0
- stackvitals/web/app/chunks/chunk-6RLVD2DT.js +1 -0
- stackvitals/web/app/chunks/chunk-763NH7PP.js +1 -0
- stackvitals/web/app/chunks/chunk-76WAVKUG.js +1 -0
- stackvitals/web/app/chunks/chunk-7II2BD5F.js +1 -0
- stackvitals/web/app/chunks/chunk-7TJCBOAY.js +1 -0
- stackvitals/web/app/chunks/chunk-ASYNLVOP.js +1 -0
- stackvitals/web/app/chunks/chunk-CTKDYZMG.js +1 -0
- stackvitals/web/app/chunks/chunk-CVB26NMC.js +1 -0
- stackvitals/web/app/chunks/chunk-G7NGB5UX.js +1 -0
- stackvitals/web/app/chunks/chunk-GPVLJRZD.js +1 -0
- stackvitals/web/app/chunks/chunk-GQYFN4PE.js +75 -0
- stackvitals/web/app/chunks/chunk-GT4EAKAO.js +2 -0
- stackvitals/web/app/chunks/chunk-IYMBFPCV.js +1 -0
- stackvitals/web/app/chunks/chunk-LAAGCPU3.js +1 -0
- stackvitals/web/app/chunks/chunk-MAPYGK3P.js +1 -0
- stackvitals/web/app/chunks/chunk-P5TXDD45.js +1 -0
- stackvitals/web/app/chunks/chunk-PABICGBL.js +1 -0
- stackvitals/web/app/chunks/chunk-RPXHAG6F.js +1 -0
- stackvitals/web/app/chunks/chunk-RQZPSJ2Y.js +1 -0
- stackvitals/web/app/chunks/chunk-S2ZBMEVA.js +1 -0
- stackvitals/web/app/chunks/chunk-S654BBEP.js +6 -0
- stackvitals/web/app/chunks/chunk-T7QVTNXF.js +1 -0
- stackvitals/web/app/chunks/chunk-THFUOCPC.js +273 -0
- stackvitals/web/app/chunks/chunk-TO4VVRZ7.js +1 -0
- stackvitals/web/app/chunks/chunk-VQ5YXO54.js +1 -0
- stackvitals/web/app/chunks/chunk-VWKSMFWJ.js +1 -0
- stackvitals/web/app/chunks/chunk-Y6LUXDM6.js +1 -0
- stackvitals/web/app/chunks/chunk-YTANGYYH.js +1 -0
- stackvitals/web/app/chunks/connect-KONYWYTT.js +1 -0
- stackvitals/web/app/chunks/connections-data-2DYS4UVW.js +32 -0
- stackvitals/web/app/chunks/logos-N5IINUAM.js +1 -0
- stackvitals/web/app/chunks/more-KMJMJQD3.js +10 -0
- stackvitals/web/app/chunks/more-PC6FVS3P.js +1 -0
- stackvitals/web/app/chunks/more-RCIVCUDE.js +2 -0
- stackvitals/web/app/chunks/more-ZKKRY6NO.css +1 -0
- stackvitals/web/app/chunks/sealbox-35YL4EUH.js +3 -0
- stackvitals/web/app/chunks/session-DYYTOE2K.js +1 -0
- stackvitals/web/app/chunks/settingsApply-2HRJEZYM.js +1 -0
- stackvitals/web/app/chunks/settingsReview-GX2FZQ4M.js +3 -0
- stackvitals/web/app/chunks/uPlot.esm-OIWT3AHJ.js +3 -0
- stackvitals/web/app/demo/ci/impact.json +1 -0
- stackvitals/web/app/demo/ci/quarantine.json +1 -0
- stackvitals/web/app/demo/ci/tickets.json +1 -0
- stackvitals/web/app/demo/mobile/alerts.json +1 -0
- stackvitals/web/app/demo/mobile/app.json +1 -0
- stackvitals/web/app/demo/mobile/community.json +1 -0
- stackvitals/web/app/demo/mobile/connectors.json +1 -0
- stackvitals/web/app/demo/mobile/data.json +1 -0
- stackvitals/web/app/demo/mobile/decisions.json +1 -0
- stackvitals/web/app/demo/mobile/delivery.json +1 -0
- stackvitals/web/app/demo/mobile/deps.json +1 -0
- stackvitals/web/app/demo/mobile/flow.json +1 -0
- stackvitals/web/app/demo/mobile/health.json +1 -0
- stackvitals/web/app/demo/mobile/insights.json +1 -0
- stackvitals/web/app/demo/mobile/pulse.json +1 -0
- stackvitals/web/app/demo/mobile/security.json +1 -0
- stackvitals/web/app/demo/mobile/summary/ci_jobs.jsonl +5 -0
- stackvitals/web/app/demo/mobile/summary/devlake_project_pr_metrics.jsonl +14 -0
- stackvitals/web/app/demo/mobile/summary/devlake_pull_requests.jsonl +14 -0
- stackvitals/web/app/demo/mobile/summary/manifest.json +1 -0
- stackvitals/web/app/demo/mobile/summary/prs.jsonl +19 -0
- stackvitals/web/app/demo/mobile/summary/tests.jsonl +1 -0
- stackvitals/web/app/demo/mobile/supply.json +1 -0
- stackvitals/web/app/demo/mobile/vulns.json +1 -0
- stackvitals/web/app/demo/payments-api/alerts.json +1 -0
- stackvitals/web/app/demo/payments-api/app.json +1 -0
- stackvitals/web/app/demo/payments-api/community.json +1 -0
- stackvitals/web/app/demo/payments-api/connectors.json +1 -0
- stackvitals/web/app/demo/payments-api/data.json +1 -0
- stackvitals/web/app/demo/payments-api/decisions.json +1 -0
- stackvitals/web/app/demo/payments-api/delivery.json +1 -0
- stackvitals/web/app/demo/payments-api/deps.json +1 -0
- stackvitals/web/app/demo/payments-api/flow.json +1 -0
- stackvitals/web/app/demo/payments-api/health.json +1 -0
- stackvitals/web/app/demo/payments-api/insights.json +1 -0
- stackvitals/web/app/demo/payments-api/pulse.json +1 -0
- stackvitals/web/app/demo/payments-api/security.json +1 -0
- stackvitals/web/app/demo/payments-api/summary/ci_jobs.jsonl +5 -0
- stackvitals/web/app/demo/payments-api/summary/devlake_project_pr_metrics.jsonl +14 -0
- stackvitals/web/app/demo/payments-api/summary/devlake_pull_requests.jsonl +14 -0
- stackvitals/web/app/demo/payments-api/summary/manifest.json +1 -0
- stackvitals/web/app/demo/payments-api/summary/prs.jsonl +22 -0
- stackvitals/web/app/demo/payments-api/summary/tests.jsonl +3 -0
- stackvitals/web/app/demo/payments-api/supply.json +1 -0
- stackvitals/web/app/demo/payments-api/vulns.json +1 -0
- stackvitals/web/app/demo/portal.json +1 -0
- stackvitals/web/app/demo/settings.json +1 -0
- stackvitals/web/app/demo/web-app/alerts.json +1 -0
- stackvitals/web/app/demo/web-app/app.json +1 -0
- stackvitals/web/app/demo/web-app/community.json +1 -0
- stackvitals/web/app/demo/web-app/connectors.json +1 -0
- stackvitals/web/app/demo/web-app/data.json +1 -0
- stackvitals/web/app/demo/web-app/decisions.json +1 -0
- stackvitals/web/app/demo/web-app/delivery.json +1 -0
- stackvitals/web/app/demo/web-app/deps.json +1 -0
- stackvitals/web/app/demo/web-app/flow.json +1 -0
- stackvitals/web/app/demo/web-app/health.json +1 -0
- stackvitals/web/app/demo/web-app/insights.json +1 -0
- stackvitals/web/app/demo/web-app/pulse.json +1 -0
- stackvitals/web/app/demo/web-app/security.json +1 -0
- stackvitals/web/app/demo/web-app/summary/ci_jobs.jsonl +5 -0
- stackvitals/web/app/demo/web-app/summary/devlake_project_pr_metrics.jsonl +14 -0
- stackvitals/web/app/demo/web-app/summary/devlake_pull_requests.jsonl +14 -0
- stackvitals/web/app/demo/web-app/summary/manifest.json +1 -0
- stackvitals/web/app/demo/web-app/summary/prs.jsonl +18 -0
- stackvitals/web/app/demo/web-app/summary/tests.jsonl +2 -0
- stackvitals/web/app/demo/web-app/supply.json +1 -0
- stackvitals/web/app/demo/web-app/vulns.json +1 -0
- stackvitals/web/app/fonts/plex-mono-400.woff2 +0 -0
- stackvitals/web/app/fonts/plex-sans-400.woff2 +0 -0
- stackvitals/web/app/fonts/plex-sans-600.woff2 +0 -0
- stackvitals/web/app/fonts/plex-sans-condensed-700.woff2 +0 -0
- stackvitals/web/app/help/accuracy.json +1 -0
- stackvitals/web/app/help/connectors.json +1 -0
- stackvitals/web/app/help/getting-started.json +1 -0
- stackvitals/web/app/help/index.json +1 -0
- stackvitals/web/app/help/modules.json +1 -0
- stackvitals/web/app/help/privacy-and-security.json +1 -0
- stackvitals/web/app/help/reference.json +1 -0
- stackvitals/web/app/main.css +1 -0
- stackvitals/web/app/main.js +1 -0
- stackvitals/web/app/pages/about.css +1 -0
- stackvitals/web/app/pages/about.js +1 -0
- stackvitals/web/app/pages/activity.css +1 -0
- stackvitals/web/app/pages/activity.js +1 -0
- stackvitals/web/app/pages/agents.css +1 -0
- stackvitals/web/app/pages/agents.js +2 -0
- stackvitals/web/app/pages/ci.css +1 -0
- stackvitals/web/app/pages/ci.js +1 -0
- stackvitals/web/app/pages/community.css +1 -0
- stackvitals/web/app/pages/community.js +1 -0
- stackvitals/web/app/pages/connections.css +1 -0
- stackvitals/web/app/pages/connections.js +6 -0
- stackvitals/web/app/pages/delivery.css +1 -0
- stackvitals/web/app/pages/delivery.js +45 -0
- stackvitals/web/app/pages/deps.css +1 -0
- stackvitals/web/app/pages/deps.js +7 -0
- stackvitals/web/app/pages/explore.css +1 -0
- stackvitals/web/app/pages/explore.js +7 -0
- stackvitals/web/app/pages/health.css +1 -0
- stackvitals/web/app/pages/health.js +1 -0
- stackvitals/web/app/pages/help.css +1 -0
- stackvitals/web/app/pages/help.js +6 -0
- stackvitals/web/app/pages/insights.css +1 -0
- stackvitals/web/app/pages/insights.js +1 -0
- stackvitals/web/app/pages/investment.css +1 -0
- stackvitals/web/app/pages/investment.js +3 -0
- stackvitals/web/app/pages/overview.css +1 -0
- stackvitals/web/app/pages/overview.js +1 -0
- stackvitals/web/app/pages/portal.css +1 -0
- stackvitals/web/app/pages/portal.js +51 -0
- stackvitals/web/app/pages/prs.css +1 -0
- stackvitals/web/app/pages/prs.js +4 -0
- stackvitals/web/app/pages/settings.css +1 -0
- stackvitals/web/app/pages/settings.js +1 -0
- stackvitals/web/app/pages/setup.css +1 -0
- stackvitals/web/app/pages/setup.js +2 -0
- stackvitals/web/app/pages/standing.css +1 -0
- stackvitals/web/app/pages/standing.js +1 -0
- stackvitals/web/app/pages/welcome-sheet.js +1 -0
- stackvitals/web/app/pages/welcome.js +1 -0
- stackvitals/web/app/settings-workflow.json +1 -0
- stackvitals/web/index.html +34 -0
- stackvitals/web/site/index.html +108 -0
- stackvitals/web/site/integrations.html +15 -0
- stackvitals/web/site/setup.html +15 -0
- stackvitals/web/site/site.css +68 -0
- stackvitals-0.1.0.dist-info/METADATA +134 -0
- stackvitals-0.1.0.dist-info/RECORD +465 -0
- stackvitals-0.1.0.dist-info/WHEEL +4 -0
- stackvitals-0.1.0.dist-info/entry_points.txt +3 -0
- stackvitals-0.1.0.dist-info/licenses/LICENSE +202 -0
- stackvitals-0.1.0.dist-info/licenses/NOTICE +16 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"connectors":{"jira":{"name":"Jira","as_of":"NOW-2h","key_expires":"NOW+120d","scope":"project in (PAY)","expiring":false,"error":null,"rows":{"issue":412,"sprint":9},"complete":true,"check":{"ok":true,"as":null,"detail":"Signed in and read an issue from project PAY updated in the last 30 days.","checked_at":"NOW-3d","fix":null}},"pagerduty":{"name":"PagerDuty","as_of":"NOW-2h","key_expires":"NOW+9d","scope":null,"expiring":true,"error":null,"rows":{"issue":23},"complete":true},"webhook":{"name":"Chat webhooks","check":{"ok":false,"as":null,"detail":"The webhook answered 404: the webhook was deleted or its address is wrong.","checked_at":"NOW-1d","fix":"Create a new incoming webhook and put it in the STACKVITALS_WEBHOOK secret (or the team's line in STACKVITALS_TEAM_WEBHOOKS)."}}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"window_days":30,"generated":"NOW-12m","runs":1803,"rerun_share":0.2,"infra_events":1,"queue":{"median_s":8,"p95_s":41},"minutes":{"linux":4210,"windows":0,"macos":0,"other":0},"pushes":{"pushes":412,"median_s":852,"p90_s":1349,"first_try_share":0.78,"first_try_range":[0.75,0.81],"median_range_s":[781,937],"not_first_try":[["7c41e20","main",[4810000]],["7c70fd9","main",[4810037]],["7ca0192","main",[4810074]],["7ccf34b","feature/x-3",[4810111]],["7cfe504","main",[4810148]],["7d2d6bd","main",[4810185]],["7d5c876","main",[4810222]],["7d8ba2f","feature/x-7",[4810259]],["7dbabe8","main",[4810296]],["7de9da1","main",[4810333]],["7e18f5a","main",[4810370]],["7e48113","feature/x-11",[4810407]],["7e772cc","main",[4810444]],["7ea6485","main",[4810481]],["7ed563e","main",[4810518]]],"not_first_try_total":91},"weekly":[{"week":"NOW-80d","job_runs":380,"flakes":11,"flake_share":3,"push_median_s":726,"first_try_share":0.86},{"week":"NOW-73d","job_runs":402,"flakes":16,"flake_share":4,"push_median_s":744,"first_try_share":0.85},{"week":"NOW-66d","job_runs":395,"flakes":12,"flake_share":3,"push_median_s":720,"first_try_share":0.87},{"week":"NOW-59d","job_runs":410,"flakes":21,"flake_share":5,"push_median_s":774,"first_try_share":0.84},{"week":"NOW-52d","job_runs":420,"flakes":21,"flake_share":5,"push_median_s":786,"first_try_share":0.83},{"week":"NOW-45d","job_runs":415,"flakes":17,"flake_share":4,"push_median_s":768,"first_try_share":0.85},{"week":"NOW-38d","job_runs":430,"flakes":26,"flake_share":6,"push_median_s":804,"first_try_share":0.82},{"week":"NOW-31d","job_runs":441,"flakes":31,"flake_share":7,"push_median_s":834,"first_try_share":0.8},{"week":"NOW-24d","job_runs":436,"flakes":31,"flake_share":7,"push_median_s":810,"first_try_share":0.81},{"week":"NOW-17d","job_runs":450,"flakes":36,"flake_share":8,"push_median_s":840,"first_try_share":0.79},{"week":"NOW-10d","job_runs":462,"flakes":42,"flake_share":9,"push_median_s":876,"first_try_share":0.77},{"week":"NOW-3d","job_runs":455,"flakes":36,"flake_share":8,"push_median_s":852,"first_try_share":0.78}],"changes":[{"metric":"ci.first_try_green","label":"pushes green on the first try","now":0.78,"base":0.8,"unit":"share","note":null,"changed":false,"direction":"down","detectable":0.05},{"metric":"ci.flaky_runs","label":"flaky job runs","now":36,"base":31,"unit":"count","note":null,"changed":false,"direction":null,"detectable":2.1}],"tests":[{"id":"TestSettlement/concurrent_refunds","suite":"test-results","workflow":".github/workflows/ci.yml","message":"context deadline exceeded","owners":["@acme/core"],"runs":96,"failures":14,"flake_events":14,"flake_rate":0.1458,"rate_low":0.1058,"rate_high":0.1958,"state":"flaky","since":"NOW-36d","last_flake":"NOW-1d","monitors":["pass_on_retry"],"labels":["timing"],"retry_minutes":1050,"prs_affected":[1800,1807,1814,1821,1828,1835],"evidence":[{"run":11800000,"att":2,"kind":"retry"},{"run":11800911,"att":2,"kind":"flip"},{"run":11801822,"att":2,"kind":"retry"},{"run":11802733,"att":2,"kind":"flip"}],"decision":null,"flake":"timing","began":{"first":"NOW-36d","runs_before":61,"runs_after":35,"flakes":14,"p":0.0012,"clear":true,"landed":["5e1a9c3d41c2e09b7","5e30784d41c2e09b7"]},"variants":{"ubuntu-latest":14}},{"id":"TestWebhookRetry/timeout","suite":"test-results","workflow":".github/workflows/ci.yml","message":"expected 3 retries, got 2","owners":["@acme/core"],"runs":96,"failures":6,"flake_events":6,"flake_rate":0.0625,"rate_low":0.0225,"rate_high":0.1125,"state":"flaky","since":"NOW-22d","last_flake":"NOW-1d","monitors":["pass_on_retry"],"labels":["timing"],"retry_minutes":474,"prs_affected":[1800,1807,1814,1821,1828,1835],"evidence":[{"run":11800000,"att":2,"kind":"retry"},{"run":11800911,"att":2,"kind":"flip"},{"run":11801822,"att":2,"kind":"retry"},{"run":11802733,"att":2,"kind":"flip"}],"decision":null,"flake":"async wait","began":{"first":"NOW-22d","runs_before":4,"runs_after":92,"flakes":6,"p":0.41,"clear":false,"landed":[]},"variants":{"ubuntu-latest":6}},{"id":"TestLedger/rounding_eur","suite":"test-results","workflow":".github/workflows/ci.yml","message":"want 10.05, got 10.04","owners":["@acme/core"],"runs":96,"failures":96,"flake_events":0,"flake_rate":0,"rate_low":0,"rate_high":0.05,"state":"broken","since":"NOW-3d","last_flake":null,"monitors":["broken"],"labels":[],"retry_minutes":0,"prs_affected":[],"evidence":[],"decision":{"verb":"mute","kind":"test","id":"TestLedger/rounding_eur","by":"maya","until":"NOW+5d","reason":"fix lands with the next release","at":"NOW-9d"}},{"id":"payments-api/smoke::boots","suite":"test-results","workflow":".github/workflows/ci.yml","runs":96,"failures":0,"flake_events":0,"flake_rate":0,"rate_low":0,"rate_high":0.03,"state":"ok"}],"jobs":[{"workflow":".github/workflows/integration.yml","job":"postgres-15","top_step":"Run tests","median_s":588,"p95_s":823,"trend":[["NOW-10d",529],["NOW-9d",576],["NOW-8d",623],["NOW-7d",553],["NOW-6d",600],["NOW-5d",529],["NOW-4d",576],["NOW-3d",623],["NOW-2d",553],["NOW-1d",600]],"runs":120,"failures":9,"flake_events":9,"flake_rate":0.075,"rate_low":0.035,"rate_high":0.125,"state":"flaky","since":"NOW-55d","last_flake":"NOW-1d","monitors":["pass_on_retry"],"labels":["timing"],"retry_minutes":672,"prs_affected":[1800,1807,1814,1821,1828,1835],"evidence":[{"run":11800000,"att":2,"kind":"retry"},{"run":11800911,"att":2,"kind":"flip"},{"run":11801822,"att":2,"kind":"retry"},{"run":11802733,"att":2,"kind":"flip"}],"decision":null,"flake":"network","began":{"first":"NOW-55d","runs_before":38,"runs_after":82,"flakes":9,"p":0.0012,"clear":true,"landed":["5e20db1d41c2e09b7","5e36b72d41c2e09b7"]},"flake_steps":["Run tests"],"variants":{}},{"workflow":".github/workflows/e2e.yml","job":"checkout-smoke","top_step":"Run tests","median_s":426,"p95_s":596,"trend":[["NOW-10d",383],["NOW-9d",417],["NOW-8d",452],["NOW-7d",400],["NOW-6d",435],["NOW-5d",383],["NOW-4d",417],["NOW-3d",452],["NOW-2d",400],["NOW-1d",435]],"runs":88,"failures":4,"flake_events":4,"flake_rate":0.0455,"rate_low":0.0055,"rate_high":0.0955,"state":"suspect","since":"NOW-15d","last_flake":"NOW-1d","monitors":["pass_on_retry"],"labels":[],"retry_minutes":264,"prs_affected":[1800,1807,1814,1821],"evidence":[{"run":11800000,"att":2,"kind":"retry"},{"run":11800911,"att":2,"kind":"flip"},{"run":11801822,"att":2,"kind":"retry"},{"run":11802733,"att":2,"kind":"flip"}],"decision":null,"flake":"infrastructure","began":{"first":"NOW-15d","runs_before":38,"runs_after":50,"flakes":4,"p":0.0012,"clear":true,"landed":["5e23fa8d41c2e09b7","5e39d69d41c2e09b7"]},"flake_steps":["Run tests","Start services"],"variants":{}},{"workflow":".github/workflows/build.yml","job":"docker","runs":120,"failures":0,"flake_events":0,"flake_rate":0,"rate_low":0,"rate_high":0.03,"state":"ok","median_s":252,"p95_s":336,"retry_minutes":0,"trend":[["NOW-10d",232],["NOW-9d",257],["NOW-8d",249],["NOW-7d",240],["NOW-6d",232],["NOW-5d",257],["NOW-4d",249],["NOW-3d",240],["NOW-2d",232],["NOW-1d",257]]},{"workflow":".github/workflows/unit.yml","job":"go-test","runs":120,"failures":0,"flake_events":0,"flake_rate":0,"rate_low":0,"rate_high":0.03,"state":"ok","median_s":216,"p95_s":288,"retry_minutes":0,"trend":[["NOW-10d",199],["NOW-9d",220],["NOW-8d",213],["NOW-7d",206],["NOW-6d",199],["NOW-5d",220],["NOW-4d",213],["NOW-3d",206],["NOW-2d",199],["NOW-1d",220]]},{"workflow":".github/workflows/lint.yml","job":"golangci","runs":120,"failures":0,"flake_events":0,"flake_rate":0,"rate_low":0,"rate_high":0.03,"state":"ok","median_s":84,"p95_s":112,"retry_minutes":0,"trend":[["NOW-10d",77],["NOW-9d",86],["NOW-8d",83],["NOW-7d",80],["NOW-6d",77],["NOW-5d",86],["NOW-4d",83],["NOW-3d",80],["NOW-2d",77],["NOW-1d",86]]}],"failure_groups":[{"id":"a1","type":"TimeoutError","where":"TestSettlement/concurrent_refunds","message":"context deadline exceeded","failures":14,"tests":2,"runs":14,"first":"NOW-36d","last":"NOW-1d","prompt":"Investigate a recurring CI failure in acme/payments-api: TestSettlement/concurrent_refunds fails with a timeout, then passes on a re-run.","top_tests":["TestSettlement/concurrent_refunds","TestWebhookRetry/timeout"]}],"slow_tests":[{"id":"TestSettlement/concurrent_refunds","median_ms":2400,"p95_ms":6100,"samples":96,"slower":{"pct":18},"trend":[["NOW-8d",2000],["NOW-7d",2060],["NOW-6d",2120],["NOW-5d",2180],["NOW-4d",2240],["NOW-3d",2300],["NOW-2d",2360],["NOW-1d",2420]]},{"id":"TestWebhookRetry/timeout","median_ms":1700,"p95_ms":4900,"samples":96,"slower":null,"trend":[["NOW-8d",2000],["NOW-7d",2060],["NOW-6d",2120],["NOW-5d",2180],["NOW-4d",2240],["NOW-3d",2300],["NOW-2d",2360],["NOW-1d",2420]]},{"id":"TestLedger/rounding_eur","median_ms":1000,"p95_ms":3700,"samples":96,"slower":null,"trend":[["NOW-8d",2000],["NOW-7d",2060],["NOW-6d",2120],["NOW-5d",2180],["NOW-4d",2240],["NOW-3d",2300],["NOW-2d",2360],["NOW-1d",2420]]}],"new_tests":[{"id":"payments-api/refunds::partial","suite":"test-results","first":"NOW-5d","runs":14,"failures":0,"flake_events":0,"state":"ok"}],"skipped_tests":[{"id":"payments-api/legacy::export_csv","suite":"test-results","suites":1,"since":"NOW-40d","new":false,"days":40}],"coverage":{"latest":{"pct":0.74,"covered":7410,"lines":10014,"at":"NOW-3h"},"change":0.012,"trend":[["NOW-30d",0.728],["NOW-29d",0.7314],["NOW-28d",0.7298],["NOW-27d",0.7332],["NOW-26d",0.7316],["NOW-25d",0.73],["NOW-24d",0.7334],["NOW-23d",0.7318],["NOW-22d",0.7352],["NOW-21d",0.7336],["NOW-20d",0.732],["NOW-19d",0.7354],["NOW-18d",0.7338],["NOW-17d",0.7372],["NOW-16d",0.7356],["NOW-15d",0.734],["NOW-14d",0.7374],["NOW-13d",0.7358],["NOW-12d",0.7392],["NOW-11d",0.7376],["NOW-10d",0.736],["NOW-9d",0.7394],["NOW-8d",0.7378],["NOW-7d",0.7412],["NOW-6d",0.7396],["NOW-5d",0.738],["NOW-4d",0.7414],["NOW-3d",0.7398],["NOW-2d",0.7432],["NOW-1d",0.7416]],"prs":[{"pr":1851,"pct":0.92,"covered":46,"lines":50,"missed":{"internal/refund/idem.go":[41,42,77,78]},"at":"NOW-6h"},{"pr":1846,"pct":0,"covered":0,"lines":0,"missed":{},"at":"NOW-2d"}]},"has_test_reports":true,"benchmark":null,"test_outages":0,"pr_edit_workflows":[],"cost":{"days":30,"private":true,"minutes":4210,"usd":33.68,"private_usd":33.68,"rerun_minutes":253,"rerun_usd":2.02,"self_hosted_minutes":640,"by_runner":{"linux":4210,"self-hosted":640,"linux larger":310},"workflows":[{"workflow":"CI","minutes":3452,"usd":27.62},{"workflow":"StackVitals","minutes":168,"usd":1.35},{"workflow":"Release","minutes":589,"usd":4.72}],"jobs":[{"workflow":"CI","job":"postgres-15","minutes":1176,"usd":9.41},{"workflow":"CI","job":"checkout-smoke","minutes":625,"usd":5},{"workflow":"CI","job":"docker","minutes":504,"usd":4.03},{"workflow":"CI","job":"go-test","minutes":432,"usd":3.46},{"workflow":"CI","job":"golangci","minutes":168,"usd":1.34}],"prices_read":"2026-10-29","tests":[{"id":"TestSettlement/concurrent_refunds","suite":"test-results","minutes":133,"usd":1.06,"flakes":14,"prs":6},{"id":"TestWebhookRetry/timeout","suite":"test-results","minutes":57,"usd":0.46,"flakes":6,"prs":6}]},"impact":{"prs":86,"failures":14,"caught":13,"recall":0.9286,"skipped_share":0.57}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"state":{"test:TestLedger/rounding_eur":{"verb":"mute","kind":"test","id":"TestLedger/rounding_eur","by":"maya","until":"NOW+5d","reason":"fix lands with the next release","at":"NOW-9d"},"finding:outsider_wait":{"verb":"snooze","kind":"finding","id":"outsider_wait","by":"tomasz","until":"NOW+9d","reason":"release week","at":"NOW-5d"}},"log":[{"verb":"mute","kind":"test","id":"TestLedger/rounding_eur","by":"maya","at":"NOW-9d","until":"NOW+5d","reason":"fix lands with the next release","source":"comment"},{"verb":"snooze","kind":"finding","id":"outsider_wait","by":"tomasz","at":"NOW-5d","until":"NOW+9d","reason":"release week","source":"app"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"generated":"NOW-12m","window_days":90,"since":"NOW-90d","prs":105,"agreements":{"rules":{"review_within_hours":24,"max_pr_lines":400},"labels":{"review_within_hours":"First review within 24 h","max_pr_lines":"PRs under 400 lines"},"window_days":14,"merged":16,"counts":{"review_within_hours":3,"max_pr_lines":2},"exceptions":[{"pr":1851,"rule":"review_within_hours","value":96,"limit":24,"open":true,"at":"NOW-12m"},{"pr":1829,"rule":"review_within_hours","value":264,"limit":24,"open":true,"at":"NOW-12m"},{"pr":1774,"rule":"review_within_hours","value":31.5,"limit":24,"open":false,"at":"NOW-6d"},{"pr":1844,"rule":"max_pr_lines","value":812,"limit":400,"open":false,"at":"NOW-4d"},{"pr":1840,"rule":"max_pr_lines","value":455,"limit":400,"open":false,"at":"NOW-10d"}],"weekly":{"review_within_hours":[["NOW-80d",0],["NOW-73d",1],["NOW-66d",1],["NOW-59d",2],["NOW-52d",1],["NOW-45d",0],["NOW-38d",1],["NOW-31d",1],["NOW-24d",0],["NOW-17d",1],["NOW-10d",1],["NOW-3d",0]],"max_pr_lines":[["NOW-80d",0],["NOW-73d",1],["NOW-66d",0],["NOW-59d",1],["NOW-52d",1],["NOW-45d",0],["NOW-38d",1],["NOW-31d",1],["NOW-24d",0],["NOW-17d",1],["NOW-10d",0],["NOW-3d",0]]}},"deploy_source":"deployments api","deploy_confidence":"high","incident_source":"GitHub issues, reverts and hotfixes, and Jira","deploy_check":{"source":"deployments api","deployments":130,"considered":[{"source":"deployments api","found":130,"used":true},{"source":"releases","found":6,"used":false},{"source":"deploy workflows","found":134,"used":false}],"order_reason":null,"workflows":[{"name":"CI","path":".github/workflows/ci.yml","counted":0,"skipped":0,"kind":null,"why":"its name doesn't match deploy_workflow","used":false},{"name":"StackVitals","path":".github/workflows/stackvitals.yml","counted":0,"skipped":0,"kind":null,"why":"its name doesn't match deploy_workflow","used":false}],"settings":{"source":"auto","deploy_workflow":"(?i)deploy|release|publish","production":["production","prod","live"]},"releases":{"published":6,"prereleases_skipped":1}},"deployments":[{"id":"dep-0","name":"production","sha":"9a3c1f0","finished":"NOW-11d"},{"id":"dep-1","name":"production","sha":"9a574c3","finished":"NOW-10d"},{"id":"dep-2","name":"production","sha":"9a72796","finished":"NOW-9d"},{"id":"dep-3","name":"production","sha":"9a8da69","finished":"NOW-8d"},{"id":"dep-4","name":"production","sha":"9aa8d3c","finished":"NOW-7d"},{"id":"dep-5","name":"production","sha":"9ac400f","finished":"NOW-6d"},{"id":"dep-6","name":"production","sha":"9adf2e2","finished":"NOW-5d"},{"id":"dep-7","name":"production","sha":"9afa5b5","finished":"NOW-4d"},{"id":"dep-8","name":"production","sha":"9b15888","finished":"NOW-3d"},{"id":"dep-9","name":"production","sha":"9b30b5b","finished":"NOW-2d"}],"phases":{"coding":{"n":105,"enough":true,"p50_h":8.2,"p75_h":20.5,"low_h":17.4,"high_h":24.6,"linearb_band":"good"},"pickup":{"n":90,"enough":true,"p50_h":2.3,"p75_h":5.1,"low_h":4.3,"high_h":6.1,"linearb_band":"good"},"review":{"n":87,"enough":true,"p50_h":9.2,"p75_h":18.4,"low_h":15.6,"high_h":22.1,"linearb_band":"good"},"approve":{"n":87,"enough":true,"p50_h":5.5,"p75_h":12.9,"low_h":11,"high_h":15.5,"linearb_band":"good"},"merge":{"n":101,"enough":true,"p50_h":1.1,"p75_h":2.2,"low_h":1.9,"high_h":2.6,"linearb_band":"good"},"deploy":{"n":99,"enough":true,"p50_h":2.8,"p75_h":5.5,"low_h":4.7,"high_h":6.6,"linearb_band":"good"},"cycle":{"n":99,"enough":true,"p50_h":23.3,"p75_h":51.7,"low_h":43.9,"high_h":62,"linearb_band":"good"},"cycle_to_merge":{"n":105,"enough":true,"p50_h":12.3,"p75_h":25.7,"low_h":21.8,"high_h":30.8,"linearb_band":"good"}},"outliers":{"over_60_days":1,"over_p98":2},"dora":{"report":"2023","deployments":130,"deployment_days":63,"deployment_days_per_week":4.8,"deployment_days_per_month":21,"frequency_tier":"high","monthly":[{"month":"MON-5","deployments":34},{"month":"MON-4","deployments":38},{"month":"MON-3","deployments":41},{"month":"MON-2","deployments":39},{"month":"MON-1","deployments":44},{"month":"MON-0","deployments":47}],"lead_time_hours":30.5,"lead_time_n":99,"lead_time_tier":"high","lead_time_range_hours":[25.9,36.6],"lead_time_tier_span":null,"change_failure_rate":0.09,"failed_deployments":12,"cfr_tier":"high","cfr_range":[0.06,0.13],"cfr_tier_span":["high","medium"],"cfr_fix_chain":null,"linkage":{"reverts":9,"fix_chain_found":8,"disagree":1,"never_shipped":0},"recovery_hours":2.6,"recovery_n":12,"recovery_tier":"high","recovery_range_hours":[1.8,3.9],"recovery_tier_span":null,"evidence":{"deployments":[["9a3c1f0","NOW-90d"],["9a574c3","NOW-90d"],["9a72796","NOW-89d"],["9a8da69","NOW-88d"],["9aa8d3c","NOW-88d"],["9ac400f","NOW-87d"],["9adf2e2","NOW-86d"],["9afa5b5","NOW-86d"],["9b15888","NOW-85d"],["9b30b5b","NOW-84d"],["9b4be2e","NOW-84d"],["9b67101","NOW-83d"],["9b823d4","NOW-82d"],["9b9d6a7","NOW-81d"],["9bb897a","NOW-81d"],["9bd3c4d","NOW-80d"],["9beef20","NOW-79d"],["9c0a1f3","NOW-79d"],["9c254c6","NOW-78d"],["9c40799","NOW-77d"],["9c5ba6c","NOW-77d"],["9c76d3f","NOW-76d"],["9c92012","NOW-75d"],["9cad2e5","NOW-75d"],["9cc85b8","NOW-74d"],["9ce388b","NOW-73d"],["9cfeb5e","NOW-72d"],["9d19e31","NOW-72d"],["9d35104","NOW-71d"],["9d503d7","NOW-70d"],["9d6b6aa","NOW-70d"],["9d8697d","NOW-69d"],["9da1c50","NOW-68d"],["9dbcf23","NOW-68d"],["9dd81f6","NOW-67d"],["9df34c9","NOW-66d"],["9e0e79c","NOW-66d"],["9e29a6f","NOW-65d"],["9e44d42","NOW-64d"],["9e60015","NOW-63d"],["9e7b2e8","NOW-63d"],["9e965bb","NOW-62d"],["9eb188e","NOW-61d"],["9eccb61","NOW-61d"],["9ee7e34","NOW-60d"],["9f03107","NOW-59d"],["9f1e3da","NOW-59d"],["9f396ad","NOW-58d"],["9f54980","NOW-57d"],["9f6fc53","NOW-57d"],["9f8af26","NOW-56d"],["9fa61f9","NOW-55d"],["9fc14cc","NOW-54d"],["9fdc79f","NOW-54d"],["9ff7a72","NOW-53d"],["a012d45","NOW-52d"],["a02e018","NOW-52d"],["a0492eb","NOW-51d"],["a0645be","NOW-50d"],["a07f891","NOW-50d"],["a09ab64","NOW-49d"],["a0b5e37","NOW-48d"],["a0d110a","NOW-48d"],["a0ec3dd","NOW-47d"],["a1076b0","NOW-46d"],["a122983","NOW-45d"],["a13dc56","NOW-45d"],["a158f29","NOW-44d"],["a1741fc","NOW-43d"],["a18f4cf","NOW-43d"],["a1aa7a2","NOW-42d"],["a1c5a75","NOW-41d"],["a1e0d48","NOW-41d"],["a1fc01b","NOW-40d"],["a2172ee","NOW-39d"],["a2325c1","NOW-39d"],["a24d894","NOW-38d"],["a268b67","NOW-37d"],["a283e3a","NOW-36d"],["a29f10d","NOW-36d"],["a2ba3e0","NOW-35d"],["a2d56b3","NOW-34d"],["a2f0986","NOW-34d"],["a30bc59","NOW-33d"],["a326f2c","NOW-32d"],["a3421ff","NOW-32d"],["a35d4d2","NOW-31d"],["a3787a5","NOW-30d"],["a393a78","NOW-30d"],["a3aed4b","NOW-29d"],["a3ca01e","NOW-28d"],["a3e52f1","NOW-27d"],["a4005c4","NOW-27d"],["a41b897","NOW-26d"],["a436b6a","NOW-25d"],["a451e3d","NOW-25d"],["a46d110","NOW-24d"],["a4883e3","NOW-23d"],["a4a36b6","NOW-23d"],["a4be989","NOW-22d"],["a4d9c5c","NOW-21d"],["a4f4f2f","NOW-21d"],["a510202","NOW-20d"],["a52b4d5","NOW-19d"],["a5467a8","NOW-18d"],["a561a7b","NOW-18d"],["a57cd4e","NOW-17d"],["a598021","NOW-16d"],["a5b32f4","NOW-16d"],["a5ce5c7","NOW-15d"],["a5e989a","NOW-14d"],["a604b6d","NOW-14d"],["a61fe40","NOW-13d"],["a63b113","NOW-12d"],["a6563e6","NOW-12d"],["a6716b9","NOW-11d"],["a68c98c","NOW-10d"],["a6a7c5f","NOW-9d"],["a6c2f32","NOW-9d"],["a6de205","NOW-8d"],["a6f94d8","NOW-7d"],["a7147ab","NOW-7d"],["a72fa7e","NOW-6d"],["a74ad51","NOW-5d"],["a766024","NOW-5d"],["a7812f7","NOW-4d"],["a79c5ca","NOW-3d"],["a7b789d","NOW-3d"],["a7d2b70","NOW-2d"],["a7ede43","NOW-1d"]],"lead_time":[[1831,"9a3c1f0",4026],[1828,"9a574c3",3752],[1825,"9a72796",3477],[1822,"9a8da69",3203],[1819,"9aa8d3c",2928],[1816,"9ac400f",2654],[1813,"9adf2e2",2379],[1810,"9afa5b5",2105],[1807,"9b15888",1830],[1804,"9b30b5b",1556],[1801,"9a3c1f0",1281],[1798,"9a574c3",1007]],"lead_time_total":99,"failed":[["9a3c1f0","issue",2000],["9a8da69","issue",2013],["9adf2e2","revert",2026],["9b30b5b","issue",2039],["9a72796","issue",2052],["9ac400f","revert",2065],["9b15888","issue",2078],["9a574c3","issue",2091],["9aa8d3c","revert",2104],["9afa5b5","issue",2117],["9a3c1f0","issue",2130],["9a8da69","revert",2143]],"recovery":[["9a3c1f0","issue",2000,78],["9a8da69","issue",2013,186],["9adf2e2","revert",2026,138],["9b30b5b","issue",2039,96],["9a72796","issue",2052,204],["9ac400f","revert",2065,156],["9b15888","issue",2078,108],["9a574c3","issue",2091,216],["9aa8d3c","revert",2104,174],["9afa5b5","issue",2117,126],["9a3c1f0","issue",2130,78],["9a8da69","revert",2143,186]]},"rework_rate":0.077,"rework_deployments":10,"deployments_n":130,"rework_range":[0.046,0.123],"deployment_days_per_six_months":126,"lead_time_working_hours":12.8},"changes":[{"metric":"delivery.pickup","label":"pickup","now":5.1,"base":5.9,"unit":"h","note":null,"changed":false,"direction":"down","detectable":1.4,"n_now":9,"n_base":41},{"metric":"delivery.deployments","label":"deployments","now":11,"base":10,"unit":"count","note":null,"changed":false,"direction":null,"detectable":1.6,"n_now":null,"n_base":null},{"metric":"delivery.change_failure","label":"deployments that failed","now":0.09,"base":0.09,"unit":"share","note":null,"changed":false,"direction":null,"detectable":0.06,"n_now":9,"n_base":41}],"incidents":[{"number":2000,"source":"issue","created":"NOW-2d","hours_to_restore":1.3},{"number":2013,"source":"issue","created":"NOW-85d","hours_to_restore":3.1},{"number":2026,"source":"pull","created":"NOW-80d","hours_to_restore":2.3},{"number":2039,"source":"issue","created":"NOW-75d","hours_to_restore":1.6},{"number":2052,"source":"issue","created":"NOW-70d","hours_to_restore":3.4},{"number":2065,"source":"pull","created":"NOW-65d","hours_to_restore":2.6},{"number":2078,"source":"issue","created":"NOW-60d","hours_to_restore":1.8},{"number":2091,"source":"issue","created":"NOW-55d","hours_to_restore":3.6},{"number":2104,"source":"pull","created":"NOW-50d","hours_to_restore":2.9},{"number":2117,"source":"issue","created":"NOW-45d","hours_to_restore":2.1},{"number":2130,"source":"issue","created":"NOW-40d","hours_to_restore":1.3},{"number":2143,"source":"pull","created":"NOW-35d","hours_to_restore":3.1}],"stuck":{"hanging_review":[{"pr":1851,"since":"NOW-4d"},{"pr":1829,"since":"NOW-11d"}],"long_lived":[{"pr":1790,"since":"NOW-41d","why":"draft-like, no push for weeks"},{"pr":1777,"since":"NOW-36d","why":"changes requested, no reply"}],"high_interaction":[],"red_and_idle":[{"pr":1846,"since":"NOW-6d","why":"checks failing on a known flake"}]},"by_team":{"payments-core":{"n":53,"pickup":{"enough":true,"p75_h":4.6},"cycle_to_merge":{"enough":true,"p75_h":24.4},"dora":{"deployment_days_per_week":4.3,"lead_time_hours":30.5,"change_failure_rate":0.09,"recovery_hours":2.6}},"ledger":{"n":53,"pickup":{"enough":true,"p75_h":6.1},"cycle_to_merge":{"enough":true,"p75_h":29.6},"dora":{"deployment_days_per_week":2.9,"lead_time_hours":36.6,"change_failure_rate":0.126,"recovery_hours":3.4}}},"by_owner":{},"by_service":null,"tracker":{"sources":["jira"],"issues":412,"merged_prs":105,"linked_prs":74,"incidents":7,"lead_time":{"REQUIREMENT":{"n":64,"lead_p50_h":190,"lead_p75_h":410,"cycle_p50_h":52,"cycle_p75_h":120},"BUG":{"n":71,"lead_p50_h":60,"lead_p75_h":160,"cycle_p50_h":14,"cycle_p75_h":40},"TASK":{"n":38,"lead_p50_h":96,"lead_p75_h":220,"cycle_p50_h":20,"cycle_p75_h":61}},"planning":[{"name":"PAY Sprint 30","state":"CLOSED","scope":24,"done":19,"carried_over":3,"added_after_start":2,"points_scope":40,"points_done":32},{"name":"PAY Sprint 31","state":"CLOSED","scope":29,"done":22,"carried_over":4,"added_after_start":3,"points_scope":41,"points_done":33},{"name":"PAY Sprint 32","state":"CLOSED","scope":27,"done":20,"carried_over":5,"added_after_start":2,"points_scope":42,"points_done":34},{"name":"PAY Sprint 33","state":"CLOSED","scope":25,"done":23,"carried_over":3,"added_after_start":3,"points_scope":43,"points_done":35},{"name":"PAY Sprint 34","state":"CLOSED","scope":30,"done":21,"carried_over":4,"added_after_start":2,"points_scope":44,"points_done":36},{"name":"PAY Sprint 35","state":"CLOSED","scope":28,"done":19,"carried_over":5,"added_after_start":3,"points_scope":45,"points_done":37},{"name":"PAY Sprint 36","state":"CLOSED","scope":26,"done":22,"carried_over":3,"added_after_start":2,"points_scope":46,"points_done":38},{"name":"PAY Sprint 37","state":"CLOSED","scope":24,"done":20,"carried_over":4,"added_after_start":3,"points_scope":47,"points_done":39},{"name":"PAY Sprint 38","state":"ACTIVE","scope":29,"done":23,"carried_over":5,"added_after_start":2,"points_scope":48,"points_done":40}],"by_team":{"teams":{"payments-core":{"done":48},"ledger":{"done":33}},"unmatched":6,"by_email":9,"suggested":[]}},"investment":{"since":"MON-5","months":[{"month":"MON-5","n":27,"counts":{"feature":11,"fix":6,"maintenance":4,"security":1,"docs":2,"other":3}},{"month":"MON-4","n":30,"counts":{"feature":12,"fix":7,"maintenance":5,"security":2,"docs":2,"other":2}},{"month":"MON-3","n":26,"counts":{"feature":10,"fix":6,"maintenance":4,"security":1,"docs":2,"other":3}},{"month":"MON-2","n":33,"counts":{"feature":13,"fix":8,"maintenance":5,"security":2,"docs":2,"other":3}},{"month":"MON-1","n":35,"counts":{"feature":13,"fix":8,"maintenance":6,"security":2,"docs":2,"other":4}},{"month":"MON-0","n":37,"counts":{"feature":14,"fix":9,"maintenance":6,"security":2,"docs":2,"other":4}}],"n":188,"counts":{"feature":73,"fix":44,"maintenance":30,"security":10,"docs":12,"other":19},"shares":{"feature":0.388,"fix":0.234,"maintenance":0.16,"security":0.053,"docs":0.064,"other":0.101},"decided_by":{"label":71,"issue":41,"title":47,"only":15,"other":19},"bots":38},"epics":{"since":"MON-5","linked":113,"no_epic":23,"feature_share":0.46,"epics":[{"epic":"PAY-100","title":"Refund rework","prs":35,"share":0.31},{"epic":"PAY-117","title":"Card network v2","prs":25,"share":0.22},{"epic":"PAY-134","title":"Ledger audit","prs":17,"share":0.15}]},"ai":{"agent_prs":{"n":8,"merged":6,"merged_share":0.75},"assisted_prs":{"n":58,"share":0.31,"tools":{"copilot":35,"claude":23},"pickup_p75_h":5.6,"others_pickup_p75_h":5.1,"size_p75":240,"others_size_p75":190},"ai_reviewed_prs":{"n":38},"by_agent":{},"review_load":{"weeks":[{"week_end":"NOW-35d","opened":{"agent":4,"person":14},"merged":{"agent":3,"person":13}},{"week_end":"NOW-28d","opened":{"agent":6,"person":15},"merged":{"agent":4,"person":14}},{"week_end":"NOW-21d","opened":{"agent":8,"person":16},"merged":{"agent":5,"person":13}},{"week_end":"NOW-14d","opened":{"agent":10,"person":14},"merged":{"agent":6,"person":14}},{"week_end":"NOW-7d","opened":{"agent":12,"person":15},"merged":{"agent":7,"person":13}},{"week_end":"NOW-0d","opened":{"agent":14,"person":16},"merged":{"agent":8,"person":14}}],"waiting":{"agent":9,"person":4},"reviewers":{"n":7,"max_open":6,"agent_share":0.58}},"expected_review":[{"pr":1851,"kind":"agent","similar":14,"p50_h":14.7,"p75_h":29.4},{"pr":1829,"kind":"person","similar":15,"p50_h":17.5,"p75_h":33.1},{"pr":1846,"kind":"person","similar":16,"p50_h":20.2,"p75_h":36.8},{"pr":1833,"kind":"agent","similar":17,"p50_h":23,"p75_h":40.5}],"outcomes":{"window":{"agent":{"n":6,"pickup_p75_h":7.1,"review_p75_h":18.4,"size_p75":120,"ci_n":5,"ci_failed_share":0.22,"flaky_share":0.05,"reverted_share":0.02,"failed_deploy_share":0.09,"merge_rate":0.9,"merge_rate_n":10},"assisted":{"n":58,"pickup_p75_h":5.6,"review_p75_h":18.4,"size_p75":240,"ci_n":52,"ci_failed_share":0.18,"flaky_share":0.06,"reverted_share":0.02,"failed_deploy_share":0.09,"merge_rate":0.9,"merge_rate_n":62},"others":{"n":124,"pickup_p75_h":5.1,"review_p75_h":18.4,"size_p75":190,"ci_n":112,"ci_failed_share":0.15,"flaky_share":0.05,"reverted_share":0.01,"failed_deploy_share":0.09,"merge_rate":0.9,"merge_rate_n":128}},"matched":{"assisted":{"ci_failed":{"matched":46,"of":58,"matched_share":0.8,"gap":0.03,"low":-0.03,"high":0.09,"detectable":0.08,"verdict":"no measurable difference"},"reverted":{"matched":46,"of":58,"matched_share":0.8,"gap":0,"low":-0.06,"high":0.06,"detectable":0.08,"verdict":"no measurable difference"},"merged":{"matched":46,"of":58,"matched_share":0.8,"gap":-0.01,"low":-0.07,"high":0.05,"detectable":0.08,"verdict":"no measurable difference"}},"agent":{"ci_failed":{"matched":5,"of":6,"matched_share":0.8,"gap":0.07,"low":0.01,"high":0.13,"detectable":0.08,"verdict":"higher"},"merged_by_others":{"matched":5,"of":6,"matched_share":0.8,"gap":0.12,"low":0.06,"high":0.18,"detectable":0.08,"verdict":"higher"}}},"coverage":{"people_prs":182,"marked":58,"marked_share":0.31,"authors":14,"authors_marking":6},"monthly":[{"month":"MON-5","agent":{"n":1},"assisted":{"n":7},"others":{"n":20}},{"month":"MON-4","agent":{"n":1},"assisted":{"n":8},"others":{"n":22}},{"month":"MON-3","agent":{"n":1},"assisted":{"n":7},"others":{"n":19}},{"month":"MON-2","agent":{"n":1},"assisted":{"n":10},"others":{"n":23}},{"month":"MON-1","agent":{"n":1},"assisted":{"n":11},"others":{"n":24}},{"month":"MON-0","agent":{"n":1},"assisted":{"n":12},"others":{"n":25}}]},"copilot":null,"baseline":null},"merge_queue":null,"excluded":0,"peers":null,"dora_rows":{"deployments":[["NOW-364d",false,null],["NOW-361d",false,null],["NOW-358d",false,null],["NOW-355d",false,null],["NOW-352d",false,null],["NOW-349d",false,null],["NOW-346d",false,null],["NOW-343d",false,null],["NOW-340d",true,1.6],["NOW-337d",false,null],["NOW-334d",false,null],["NOW-331d",false,null],["NOW-328d",false,null],["NOW-325d",false,null],["NOW-322d",false,null],["NOW-319d",false,null],["NOW-316d",false,null],["NOW-313d",false,null],["NOW-310d",false,null],["NOW-307d",false,null],["NOW-304d",false,null],["NOW-301d",false,null],["NOW-298d",false,null],["NOW-295d",false,null],["NOW-292d",false,null],["NOW-289d",true,3.6],["NOW-286d",false,null],["NOW-283d",false,null],["NOW-280d",false,null],["NOW-277d",false,null],["NOW-274d",false,null],["NOW-271d",false,null],["NOW-268d",false,null],["NOW-265d",false,null],["NOW-262d",false,null],["NOW-259d",false,null],["NOW-256d",false,null],["NOW-253d",false,null],["NOW-250d",false,null],["NOW-247d",false,null],["NOW-244d",false,null],["NOW-241d",false,null],["NOW-238d",true,3.1],["NOW-235d",false,null],["NOW-232d",false,null],["NOW-229d",false,null],["NOW-226d",false,null],["NOW-223d",false,null],["NOW-220d",false,null],["NOW-217d",false,null],["NOW-214d",false,null],["NOW-211d",false,null],["NOW-208d",false,null],["NOW-205d",false,null],["NOW-202d",false,null],["NOW-199d",false,null],["NOW-196d",false,null],["NOW-193d",false,null],["NOW-190d",false,null],["NOW-187d",true,2.6],["NOW-184d",false,null],["NOW-181d",false,null],["NOW-178d",false,null],["NOW-175d",false,null],["NOW-172d",false,null],["NOW-169d",false,null],["NOW-166d",false,null],["NOW-163d",false,null],["NOW-160d",false,null],["NOW-157d",false,null],["NOW-154d",false,null],["NOW-151d",false,null],["NOW-148d",false,null],["NOW-145d",false,null],["NOW-142d",false,null],["NOW-139d",false,null],["NOW-136d",true,2.1],["NOW-133d",false,null],["NOW-130d",false,null],["NOW-127d",false,null],["NOW-124d",false,null],["NOW-121d",false,null],["NOW-118d",false,null],["NOW-115d",false,null],["NOW-112d",false,null],["NOW-109d",false,null],["NOW-106d",false,null],["NOW-103d",false,null],["NOW-100d",false,null],["NOW-97d",false,null],["NOW-94d",false,null],["NOW-91d",false,null],["NOW-88d",false,null],["NOW-85d",true,1.6],["NOW-82d",false,null],["NOW-79d",false,null],["NOW-76d",false,null],["NOW-73d",false,null],["NOW-70d",false,null],["NOW-67d",false,null],["NOW-64d",false,null],["NOW-61d",false,null],["NOW-58d",false,null],["NOW-55d",false,null],["NOW-52d",false,null],["NOW-49d",false,null],["NOW-46d",false,null],["NOW-43d",false,null],["NOW-40d",false,null],["NOW-37d",false,null],["NOW-34d",true,3.6],["NOW-31d",false,null],["NOW-28d",false,null],["NOW-25d",false,null],["NOW-22d",false,null],["NOW-19d",false,null],["NOW-16d",false,null],["NOW-13d",false,null],["NOW-10d",false,null],["NOW-7d",false,null],["NOW-4d",false,null],["NOW-1d",false,null]],"prs":[["NOW-364d",16],["NOW-364d",42.7],["NOW-361d",46.5],["NOW-361d",31.3],["NOW-358d",35.1],["NOW-358d",19.8],["NOW-355d",23.6],["NOW-355d",50.3],["NOW-352d",12.2],["NOW-352d",38.9],["NOW-349d",42.7],["NOW-349d",27.5],["NOW-346d",31.3],["NOW-346d",16],["NOW-343d",19.8],["NOW-343d",46.5],["NOW-340d",50.3],["NOW-340d",35.1],["NOW-337d",38.9],["NOW-337d",23.6],["NOW-334d",27.5],["NOW-334d",12.2],["NOW-331d",16],["NOW-331d",42.7],["NOW-328d",46.5],["NOW-328d",31.3],["NOW-325d",35.1],["NOW-325d",19.8],["NOW-322d",23.6],["NOW-322d",50.3],["NOW-319d",12.2],["NOW-319d",38.9],["NOW-316d",42.7],["NOW-316d",27.5],["NOW-313d",31.3],["NOW-313d",16],["NOW-310d",19.8],["NOW-310d",46.5],["NOW-307d",50.3],["NOW-307d",35.1],["NOW-304d",38.9],["NOW-304d",23.6],["NOW-301d",27.5],["NOW-301d",12.2],["NOW-298d",16],["NOW-298d",42.7],["NOW-295d",46.5],["NOW-295d",31.3],["NOW-292d",35.1],["NOW-292d",19.8],["NOW-289d",23.6],["NOW-289d",50.3],["NOW-286d",12.2],["NOW-286d",38.9],["NOW-283d",42.7],["NOW-283d",27.5],["NOW-280d",31.3],["NOW-280d",16],["NOW-277d",19.8],["NOW-277d",46.5],["NOW-274d",50.3],["NOW-274d",35.1],["NOW-271d",38.9],["NOW-271d",23.6],["NOW-268d",27.5],["NOW-268d",12.2],["NOW-265d",16],["NOW-265d",42.7],["NOW-262d",46.5],["NOW-262d",31.3],["NOW-259d",35.1],["NOW-259d",19.8],["NOW-256d",23.6],["NOW-256d",50.3],["NOW-253d",12.2],["NOW-253d",38.9],["NOW-250d",42.7],["NOW-250d",27.5],["NOW-247d",31.3],["NOW-247d",16],["NOW-244d",19.8],["NOW-244d",46.5],["NOW-241d",50.3],["NOW-241d",35.1],["NOW-238d",38.9],["NOW-238d",23.6],["NOW-235d",27.5],["NOW-235d",12.2],["NOW-232d",16],["NOW-232d",42.7],["NOW-229d",46.5],["NOW-229d",31.3],["NOW-226d",35.1],["NOW-226d",19.8],["NOW-223d",23.6],["NOW-223d",50.3],["NOW-220d",12.2],["NOW-220d",38.9],["NOW-217d",42.7],["NOW-217d",27.5],["NOW-214d",31.3],["NOW-214d",16],["NOW-211d",19.8],["NOW-211d",46.5],["NOW-208d",50.3],["NOW-208d",35.1],["NOW-205d",38.9],["NOW-205d",23.6],["NOW-202d",27.5],["NOW-202d",12.2],["NOW-199d",16],["NOW-199d",42.7],["NOW-196d",46.5],["NOW-196d",31.3],["NOW-193d",35.1],["NOW-193d",19.8],["NOW-190d",23.6],["NOW-190d",50.3],["NOW-187d",12.2],["NOW-187d",38.9],["NOW-184d",42.7],["NOW-184d",27.5],["NOW-181d",31.3],["NOW-181d",16],["NOW-178d",19.8],["NOW-178d",46.5],["NOW-175d",50.3],["NOW-175d",35.1],["NOW-172d",38.9],["NOW-172d",23.6],["NOW-169d",27.5],["NOW-169d",12.2],["NOW-166d",16],["NOW-166d",42.7],["NOW-163d",46.5],["NOW-163d",31.3],["NOW-160d",35.1],["NOW-160d",19.8],["NOW-157d",23.6],["NOW-157d",50.3],["NOW-154d",12.2],["NOW-154d",38.9],["NOW-151d",42.7],["NOW-151d",27.5],["NOW-148d",31.3],["NOW-148d",16],["NOW-145d",19.8],["NOW-145d",46.5],["NOW-142d",50.3],["NOW-142d",35.1],["NOW-139d",38.9],["NOW-139d",23.6],["NOW-136d",27.5],["NOW-136d",12.2],["NOW-133d",16],["NOW-133d",42.7],["NOW-130d",46.5],["NOW-130d",31.3],["NOW-127d",35.1],["NOW-127d",19.8],["NOW-124d",23.6],["NOW-124d",50.3],["NOW-121d",12.2],["NOW-121d",38.9],["NOW-118d",42.7],["NOW-118d",27.5],["NOW-115d",31.3],["NOW-115d",16],["NOW-112d",19.8],["NOW-112d",46.5],["NOW-109d",50.3],["NOW-109d",35.1],["NOW-106d",38.9],["NOW-106d",23.6],["NOW-103d",27.5],["NOW-103d",12.2],["NOW-100d",16],["NOW-100d",42.7],["NOW-97d",46.5],["NOW-97d",31.3],["NOW-94d",35.1],["NOW-94d",19.8],["NOW-91d",23.6],["NOW-91d",50.3],["NOW-88d",12.2],["NOW-88d",38.9],["NOW-85d",42.7],["NOW-85d",27.5],["NOW-82d",31.3],["NOW-82d",16],["NOW-79d",19.8],["NOW-79d",46.5],["NOW-76d",50.3],["NOW-76d",35.1],["NOW-73d",38.9],["NOW-73d",23.6],["NOW-70d",27.5],["NOW-70d",12.2],["NOW-67d",16],["NOW-67d",42.7],["NOW-64d",46.5],["NOW-64d",31.3],["NOW-61d",35.1],["NOW-61d",19.8],["NOW-58d",23.6],["NOW-58d",50.3],["NOW-55d",12.2],["NOW-55d",38.9],["NOW-52d",42.7],["NOW-52d",27.5],["NOW-49d",31.3],["NOW-49d",16],["NOW-46d",19.8],["NOW-46d",46.5],["NOW-43d",50.3],["NOW-43d",35.1],["NOW-40d",38.9],["NOW-40d",23.6],["NOW-37d",27.5],["NOW-37d",12.2],["NOW-34d",16],["NOW-34d",42.7],["NOW-31d",46.5],["NOW-31d",31.3],["NOW-28d",35.1],["NOW-28d",19.8],["NOW-25d",23.6],["NOW-25d",50.3],["NOW-22d",12.2],["NOW-22d",38.9],["NOW-19d",42.7],["NOW-19d",27.5],["NOW-16d",31.3],["NOW-16d",16],["NOW-13d",19.8],["NOW-13d",46.5],["NOW-10d",50.3],["NOW-10d",35.1],["NOW-7d",38.9],["NOW-7d",23.6],["NOW-4d",27.5],["NOW-4d",12.2],["NOW-1d",16],["NOW-1d",42.7]]},"dora_weeks":[{"week":"NOW-87d","deployments":7,"lead_time_hours":24.4,"change_failure_rate":0,"recovery_hours":null},{"week":"NOW-80d","deployments":12,"lead_time_hours":30.9,"change_failure_rate":0.144,"recovery_hours":3.1},{"week":"NOW-73d","deployments":10,"lead_time_hours":37.5,"change_failure_rate":0.09,"recovery_hours":null},{"week":"NOW-66d","deployments":8,"lead_time_hours":28.8,"change_failure_rate":0,"recovery_hours":null},{"week":"NOW-59d","deployments":13,"lead_time_hours":35.3,"change_failure_rate":0.09,"recovery_hours":null},{"week":"NOW-52d","deployments":11,"lead_time_hours":26.6,"change_failure_rate":0.144,"recovery_hours":3.1},{"week":"NOW-45d","deployments":9,"lead_time_hours":33.1,"change_failure_rate":0,"recovery_hours":null},{"week":"NOW-38d","deployments":7,"lead_time_hours":24.4,"change_failure_rate":0.09,"recovery_hours":null},{"week":"NOW-31d","deployments":12,"lead_time_hours":30.9,"change_failure_rate":0.09,"recovery_hours":null},{"week":"NOW-24d","deployments":10,"lead_time_hours":37.5,"change_failure_rate":0.144,"recovery_hours":3.1},{"week":"NOW-17d","deployments":8,"lead_time_hours":28.8,"change_failure_rate":0.09,"recovery_hours":null},{"week":"NOW-10d","deployments":13,"lead_time_hours":35.3,"change_failure_rate":0.09,"recovery_hours":null},{"week":"NOW-3d","deployments":11,"lead_time_hours":26.6,"change_failure_rate":0,"recovery_hours":null}],"deploy_attempts":{"source":"deployments api","attempts":145,"succeeded":130,"failed":12,"cancelled":3,"success_rate":0.9155,"median_minutes":6.5},"deployments_unreadable":false,"deploy_names":[{"name":"production","n":130}],"deployment_list":[{"id":"dep-0","name":"production","sha":"9e7b2e8","finished":"NOW-1d","prs":[1811],"authors":1,"lead_hours":18.3,"incidents":[]},{"id":"dep-1","name":"production","sha":"9e60015","finished":"NOW-3d","prs":[1808,1807],"authors":2,"lead_hours":25.9,"incidents":[]},{"id":"dep-2","name":"production","sha":"9e44d42","finished":"NOW-5d","prs":[1805,1804,1803],"authors":1,"lead_hours":33.6,"incidents":[2026]},{"id":"dep-3","name":"production","sha":"9e29a6f","finished":"NOW-7d","prs":[1802],"authors":2,"lead_hours":41.2,"incidents":[]},{"id":"dep-4","name":"production","sha":"9e0e79c","finished":"NOW-9d","prs":[1799,1798],"authors":1,"lead_hours":18.3,"incidents":[]},{"id":"dep-5","name":"production","sha":"9df34c9","finished":"NOW-11d","prs":[1796,1795,1794],"authors":2,"lead_hours":25.9,"incidents":[]},{"id":"dep-6","name":"production","sha":"9dd81f6","finished":"NOW-13d","prs":[1793],"authors":1,"lead_hours":33.6,"incidents":[]},{"id":"dep-7","name":"production","sha":"9dbcf23","finished":"NOW-15d","prs":[1790,1789],"authors":2,"lead_hours":41.2,"incidents":[]},{"id":"dep-8","name":"production","sha":"9da1c50","finished":"NOW-17d","prs":[1787,1786,1785],"authors":1,"lead_hours":18.3,"incidents":[2104]},{"id":"dep-9","name":"production","sha":"9d8697d","finished":"NOW-19d","prs":[1784],"authors":2,"lead_hours":25.9,"incidents":[]},{"id":"dep-10","name":"production","sha":"9d6b6aa","finished":"NOW-21d","prs":[1781,1780],"authors":1,"lead_hours":33.6,"incidents":[]},{"id":"dep-11","name":"production","sha":"9d503d7","finished":"NOW-23d","prs":[1778,1777,1776],"authors":2,"lead_hours":41.2,"incidents":[]},{"id":"dep-12","name":"production","sha":"9d35104","finished":"NOW-25d","prs":[1775],"authors":1,"lead_hours":18.3,"incidents":[]},{"id":"dep-13","name":"production","sha":"9d19e31","finished":"NOW-27d","prs":[1772,1771],"authors":2,"lead_hours":25.9,"incidents":[]},{"id":"dep-14","name":"production","sha":"9cfeb5e","finished":"NOW-29d","prs":[1769,1768,1767],"authors":1,"lead_hours":33.6,"incidents":[2026]},{"id":"dep-15","name":"production","sha":"9ce388b","finished":"NOW-31d","prs":[1766],"authors":2,"lead_hours":41.2,"incidents":[]},{"id":"dep-16","name":"production","sha":"9cc85b8","finished":"NOW-33d","prs":[1763,1762],"authors":1,"lead_hours":18.3,"incidents":[]},{"id":"dep-17","name":"production","sha":"9cad2e5","finished":"NOW-35d","prs":[1760,1759,1758],"authors":2,"lead_hours":25.9,"incidents":[]}],"releases":[{"tag":"v2.14.0","at":"NOW-2d","prs":6,"fixes":1,"fix_share":0.1667,"reverted":[],"incidents_after":0,"settled":false},{"tag":"v2.13.0","at":"NOW-11d","prs":11,"fixes":2,"fix_share":0.1818,"reverted":[],"incidents_after":0,"settled":false},{"tag":"v2.12.0","at":"NOW-20d","prs":7,"fixes":3,"fix_share":0.4286,"reverted":[1780],"incidents_after":1,"settled":true},{"tag":"v2.11.0","at":"NOW-29d","prs":12,"fixes":1,"fix_share":0.0833,"reverted":[],"incidents_after":0,"settled":true},{"tag":"v2.10.0","at":"NOW-38d","prs":8,"fixes":2,"fix_share":0.25,"reverted":[],"incidents_after":0,"settled":true},{"tag":"v2.9.0","at":"NOW-47d","prs":13,"fixes":3,"fix_share":0.2308,"reverted":[],"incidents_after":0,"settled":true},{"tag":"v2.8.0","at":"NOW-56d","prs":9,"fixes":1,"fix_share":0.1111,"reverted":[],"incidents_after":0,"settled":true},{"tag":"v2.7.0","at":"NOW-65d","prs":14,"fixes":2,"fix_share":0.1429,"reverted":[],"incidents_after":0,"settled":true}],"bugs":{"weeks":[{"week":"NOW-80d","opened":3,"closed":2,"open":14},{"week":"NOW-73d","opened":6,"closed":7,"open":15},{"week":"NOW-66d","opened":4,"closed":6,"open":16},{"week":"NOW-59d","opened":7,"closed":5,"open":17},{"week":"NOW-52d","opened":5,"closed":4,"open":18},{"week":"NOW-45d","opened":3,"closed":3,"open":19},{"week":"NOW-38d","opened":6,"closed":2,"open":14},{"week":"NOW-31d","opened":4,"closed":7,"open":15},{"week":"NOW-24d","opened":7,"closed":6,"open":16},{"week":"NOW-17d","opened":5,"closed":5,"open":17},{"week":"NOW-10d","opened":3,"closed":4,"open":18},{"week":"NOW-3d","opened":6,"closed":3,"open":19}],"open":17,"median_open_days":23,"sources":["github","jira"],"oldest":[{"src":"github","id":1200,"days":210},{"src":"github","id":1237,"days":177},{"src":"github","id":1274,"days":144},{"src":"github","id":1311,"days":111},{"src":"github","id":1348,"days":78}]},"change_risk":{"backtest":{"train":182,"test":78,"test_troubled":11,"auc":0.76,"top_fifth_trouble":0.38,"overall_trouble":0.141},"troubled":31,"note":null,"open":[{"pr":1851,"risk":0.42,"level":"high","base":0.141,"reasons":["touches internal/ledger/, where 31% of PRs needed a fix","the author's first change there","no test changes"]},{"pr":1829,"risk":0.36,"level":"high","base":0.141,"reasons":["touches internal/ledger/, where 31% of PRs needed a fix","the author's first change there","no test changes"]},{"pr":1846,"risk":0.3,"level":"medium","base":0.141,"reasons":["large change (over 400 lines)"]},{"pr":1833,"risk":0.24,"level":"medium","base":0.141,"reasons":["large change (over 400 lines)"]},{"pr":1855,"risk":0.18,"level":"low","base":0.141,"reasons":[]},{"pr":1849,"risk":0.12,"level":"low","base":0.141,"reasons":[]}]},"what_changed":[{"incident":{"source":"issue","number":2000,"created":"NOW-2d","resolved":null,"deployment":"dep-0"},"window_hours":72,"candidates":[{"kind":"deployment","ref":"9e7b2e8","at":"NOW-2d","why":"the deployment this incident is tied to","deployment":"dep-0"},{"kind":"pull request","ref":"#1811","title":"Batch ledger writes","at":"NOW-2d","why":"a revert later undid it"},{"kind":"dependency","ref":"#1809","title":"Bump golang.org/x/net","at":"NOW-2d","why":"shipped in that deployment"}]},{"incident":{"source":"issue","number":2013,"created":"NOW-85d","resolved":null,"deployment":"dep-3"},"window_hours":72,"candidates":[{"kind":"deployment","ref":"9e29a6f","at":"NOW-85d","why":"the deployment this incident is tied to","deployment":"dep-3"},{"kind":"pull request","ref":"#1802","title":"Batch ledger writes","at":"NOW-85d","why":"a revert later undid it"},{"kind":"dependency","ref":"#1800","title":"Bump golang.org/x/net","at":"NOW-85d","why":"shipped in that deployment"}]}],"code_survival":{"30":{"people":{"prs":64,"share":0.91},"agents":{"prs":18,"share":0.83}},"90":{"people":{"prs":41,"share":0.84},"agents":{"prs":9,"share":0.71}}},"code_quality":null,"sizes":{"n":105,"p50":96,"p75":214,"under_100":55,"100_155":17,"156_228":9,"over_228":24},"merge_frequency":1.8,"review_depth":3.4,"merged_without_review":{"n":3,"share":0.0286},"merged_flags":{"lightning":[{"pr":1807,"review_minutes":2},{"pr":1794,"review_minutes":4}],"without_review":[{"pr":1803},{"pr":1789},{"pr":1782}]},"devlake_pr_cycle":[{"month":"MON-2","avg_hours":33.55,"n":30},{"month":"MON-1","avg_hours":30.5,"n":34},{"month":"MON-0","avg_hours":27.45,"n":38}],"capex":{"file":"capex.csv","rows":376,"months":[{"month":"MON-5","prs":27,"agent_prs":2,"author_weeks":{"feature":9,"fix":5,"maintenance":3,"security":1,"docs":2,"other":2},"feature_share":0.4074},{"month":"MON-4","prs":30,"agent_prs":3,"author_weeks":{"feature":10,"fix":6,"maintenance":4,"security":2,"docs":2,"other":2},"feature_share":0.4},{"month":"MON-3","prs":26,"agent_prs":4,"author_weeks":{"feature":8,"fix":5,"maintenance":3,"security":1,"docs":2,"other":2},"feature_share":0.3846},{"month":"MON-2","prs":33,"agent_prs":2,"author_weeks":{"feature":10,"fix":6,"maintenance":4,"security":2,"docs":2,"other":2},"feature_share":0.3939},{"month":"MON-1","prs":35,"agent_prs":3,"author_weeks":{"feature":10,"fix":6,"maintenance":5,"security":2,"docs":2,"other":3},"feature_share":0.3714},{"month":"MON-0","prs":37,"agent_prs":4,"author_weeks":{"feature":11,"fix":7,"maintenance":5,"security":2,"docs":2,"other":3},"feature_share":0.3784}]}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"generated":"NOW-12m","open":[{"pr":1846,"package":"github.com/jackc/pgx/v5","ecosystem":"Go","from":"5.6.0","to":"5.7.1","bump":"minor","bot":"dependabot","security":false,"age_hours":144},{"pr":1849,"package":"golang.org/x/net","ecosystem":"Go","from":"0.30.0","to":"0.33.0","bump":"minor","bot":"dependabot","security":true,"age_hours":130},{"pr":1858,"package":"github.com/stretchr/testify","ecosystem":"Go","from":"1.9.0","to":"1.10.0","bump":"minor","bot":"dependabot","security":false,"age_hours":52},{"pr":1861,"package":"google.golang.org/grpc","ecosystem":"Go","from":"1.67.1","to":"1.68.0","bump":"minor","bot":"dependabot","security":false,"age_hours":30},{"pr":1863,"package":"github.com/aws/aws-sdk-go-v2/service/s3","ecosystem":"Go","from":"1.66.0","to":"1.66.3","bump":"patch","bot":"dependabot","security":false,"age_hours":20},{"pr":1864,"package":"golang.org/x/crypto","ecosystem":"Go","from":"0.28.0","to":"0.31.0","bump":"minor","bot":"dependabot","security":true,"age_hours":11}],"security_overdue":[{"pr":1849,"package":"golang.org/x/net","ecosystem":"Go","from":"0.30.0","to":"0.33.0","bump":"minor","bot":"dependabot","security":true,"age_hours":130}],"merged_90d":38,"merge_median_hours":30,"bots":["dependabot"],"last_opened":"NOW-1d","quiet_days":0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"generated":"NOW-12m","window_days":90,"open":37,"drafts":5,"merged":105,"closed_unmerged":9,"stages":{"pickup":{"median_s":8280,"p90_s":21528,"n":90},"review":{"median_s":33120,"p90_s":86112,"n":87},"merge":{"median_s":3960,"p90_s":10296,"n":101},"cycle":{"median_s":44280,"p90_s":115128,"n":105}},"merged_without_review":3,"groups":{"insider":{"merged":97,"closed_unmerged":7,"merge_rate":0.92,"merged_without_review":3,"pickup":{"median_s":8280,"p90_s":21528,"n":90},"review":{"median_s":33120,"p90_s":86112,"n":87},"merge":{"median_s":3960,"p90_s":10296,"n":101},"cycle":{"median_s":44280,"p90_s":115128,"n":105}},"outsider":{"merged":8,"closed_unmerged":2,"merge_rate":0.8,"merged_without_review":0,"pickup":{"median_s":19800,"p90_s":51480,"n":8},"review":{"median_s":46440,"p90_s":120744,"n":8},"merge":{"median_s":4680,"p90_s":12168,"n":8},"cycle":{"median_s":83160,"p90_s":216216,"n":8}}},"queue":[{"n":1851,"title":"Add idempotency keys to refund endpoint","author":"maya","outsider":false,"actor":"reviewer","who":["tomasz"],"why":"review asked, not started","since":"NOW-4d","step":"review","waiting_s":345600,"usual_s":8280,"stale":false,"slow":true,"gaps":[{"what":"tests","why":"87% of merged PRs in internal/ledger include test files"}]},{"n":1829,"title":"Document EUR rounding rules","author":"lena-k","outsider":false,"actor":"reviewer","who":["maya"],"why":"review asked, not started","since":"NOW-11d","step":"review","waiting_s":950400,"usual_s":8280,"stale":false,"slow":true,"gaps":[]},{"n":1846,"title":"Bump pgx to v5.7","author":"dependabot","outsider":false,"actor":"author","who":["dependabot"],"why":"checks failing on a known flake","since":"NOW-6d","step":"checks","waiting_s":518400,"usual_s":null,"stale":false,"slow":true,"gaps":[{"what":"size","why":"912 lines; 90% of merged PRs in the whole repo have at most 640"}]},{"n":1833,"title":"Split settlement worker into two queues","author":"dev-ravi","outsider":false,"actor":"author","who":["dev-ravi"],"why":"changes requested, no reply","since":"NOW-9d","step":"changes","waiting_s":777600,"usual_s":null,"stale":false,"slow":true,"gaps":[]},{"n":1855,"title":"Fix typo in webhook docs","author":"sam-oss","outsider":true,"actor":"reviewer","who":["lena-k"],"why":"first contribution, waiting for a first review","since":"NOW-2d","step":"review","waiting_s":172800,"usual_s":8280,"stale":false,"slow":false,"gaps":[]},{"n":1849,"title":"Bump golang.org/x/net from 0.30.0 to 0.33.0","author":"dependabot","outsider":false,"actor":"reviewer","who":["tomasz"],"why":"security update, no reviewer yet","since":"NOW-5d","step":"review","waiting_s":432000,"usual_s":8280,"stale":false,"slow":true,"gaps":[]},{"n":1790,"title":"Prototype: settlement replay tool","author":"tomasz","outsider":false,"actor":"author","who":["tomasz"],"why":"draft-like, no push for weeks","since":"NOW-41d","step":"author","waiting_s":3542400,"usual_s":null,"stale":true,"slow":true,"gaps":[]},{"n":1777,"title":"Retry policy for card network timeouts","author":"dev-ravi","outsider":false,"actor":"author","who":["dev-ravi"],"why":"changes requested, no reply","since":"NOW-36d","step":"changes","waiting_s":3110400,"usual_s":null,"stale":true,"slow":true,"gaps":[]}],"stale":2,"load":[{"reviewer":"tomasz","open_requests":2,"oldest_since":"NOW-2d"},{"reviewer":"maya","open_requests":1,"oldest_since":"NOW-5d"},{"reviewer":"lena-k","open_requests":1,"oldest_since":"NOW-8d"}],"monthly":[{"month":"MON-5","opened":31,"merged":27,"pickup_median_s":10350,"cycle_median_s":53292},{"month":"MON-4","opened":34,"merged":30,"pickup_median_s":9936,"cycle_median_s":51515},{"month":"MON-3","opened":29,"merged":26,"pickup_median_s":9522,"cycle_median_s":49739},{"month":"MON-2","opened":36,"merged":33,"pickup_median_s":9108,"cycle_median_s":47962},{"month":"MON-1","opened":38,"merged":35,"pickup_median_s":8694,"cycle_median_s":46186},{"month":"MON-0","opened":40,"merged":37,"pickup_median_s":8280,"cycle_median_s":44410}],"bots":{"open":6,"closed":38},"measures":{"flow.pickup_time":{"metric":"flow.pickup_time","version":1,"value":8280,"n":90,"low":7038,"high":9936,"unit":"s","as_of":"NOW-12m","window_days":90,"note":null},"flow.cycle_time":{"metric":"flow.cycle_time","version":1,"value":44280,"n":105,"low":37638,"high":53136,"unit":"s","as_of":"NOW-12m","window_days":90,"note":null},"flow.open_prs":{"metric":"flow.open_prs","version":1,"value":37,"n":37,"low":null,"high":null,"unit":"count","as_of":"NOW-12m","window_days":null,"note":null}},"habits":{"scope":"whole repo","merged_prs":132,"include":{"tests":0.64,"docs":0.18,"changelog":0.41},"size":{"median_lines":86,"p75_lines":210,"p90_lines":520},"asks":[{"ask":"tests","share":0.21,"prs":22},{"ask":"a smaller pull request","share":0.08,"prs":8}],"folders":[{"area":"internal/ledger","merged_prs":61,"include":{"tests":0.87,"changelog":0.62,"docs":0.08},"size":{"median_lines":64,"p75_lines":150,"p90_lines":380},"reviewed_prs":37,"asks":[{"ask":"tests","share":0.2432,"prs":9}]},{"area":"internal/webhook","merged_prs":44,"include":{"tests":0.73,"changelog":0.12,"docs":0.15},"size":{"median_lines":86,"p75_lines":190,"p90_lines":470},"reviewed_prs":26,"asks":[{"ask":"docs","share":0.2308,"prs":6}]},{"area":"cmd/server","merged_prs":23,"include":{"tests":0.59,"changelog":0.52,"docs":0.22},"size":{"median_lines":108,"p75_lines":230,"p90_lines":560},"reviewed_prs":14,"asks":[{"ask":"tests","share":0.2143,"prs":3}]},{"area":"internal/cards","merged_prs":19,"include":{"tests":0.45,"changelog":0.47,"docs":0.29},"size":{"median_lines":130,"p75_lines":270,"p90_lines":650},"reviewed_prs":11,"asks":[{"ask":"docs","share":0.2727,"prs":3}]}]},"excluded":0,"knowledge":{"areas":[{"area":"internal/ledger","prs":61,"owner":"mira-k","share":0.82,"single_owner":true,"owner_quiet_days":41},{"area":"internal/webhook","prs":44,"owner":"dev-oss","share":0.48,"single_owner":false,"owner_quiet_days":2},{"area":"cmd/server","prs":23,"owner":"mira-k","share":0.55,"single_owner":false,"owner_quiet_days":41},{"area":"internal/cards","prs":19,"owner":"tomas-r","share":0.9,"single_owner":true,"owner_quiet_days":3},{"area":"docs","prs":8,"owner":"dev-oss","share":0.5,"single_owner":false,"owner_quiet_days":2}],"hotspots":[{"area":"internal/ledger","prs_90d":27,"prs":61},{"area":"internal/webhook","prs_90d":20,"prs":44},{"area":"cmd/server","prs_90d":10,"prs":23},{"area":"internal/cards","prs_90d":9,"prs":19}]},"delivery":{"source":"releases","releases":24,"per_week":1.87,"lead_time_median_s":97200,"change_fail":{"failed":3,"of":24,"rate":0.125,"proxy":true},"recovery_median_s":64800},"baselines":{"pickup":18360,"merge":7920,"author":39744}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"as_of":"NOW-12m","sources":{"CI Health":{"kind":"module","last_try":"NOW-12m","last_ok":"NOW-12m","failing_since":null,"error":null,"complete":true,"read":{"runs":48,"requests":61}},"Delivery":{"kind":"module","last_try":"NOW-12m","last_ok":"NOW-12m","failing_since":null,"error":null,"complete":true,"read":{}},"Insights":{"kind":"module","last_try":"NOW-12m","last_ok":"NOW-12m","failing_since":null,"error":null,"complete":true,"read":{}},"Jira":{"kind":"connector","last_try":"NOW-2h","last_ok":"NOW-2h","failing_since":null,"error":null,"complete":true,"read":{"issue":412,"sprint":9}},"PagerDuty":{"kind":"connector","last_try":"NOW-2h","last_ok":"NOW-2h","failing_since":null,"error":null,"complete":true,"read":{"issue":23}},"Team Flow":{"kind":"module","last_try":"NOW-12m","last_ok":"NOW-12m","failing_since":null,"error":null,"complete":true,"read":{"prs":37,"points":12}}},"history":{"ci/days":{"oldest":"NOW-179d","newest":"NOW-0d","files":172,"bytes":7052000,"keeps_days":180},"flow/closed":{"oldest":"NOW-399d","newest":"NOW-0d","files":351,"bytes":14391000,"keeps_days":400}},"dropped":{"at":"NOW-2d","retention":{"ci/days":1},"size_cap":{}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"generated":"NOW-12m","findings":[{"kind":"red_ci","title":"Flaky checks kept 23 PRs red for 41 h","action":"Fix or quarantine TestSettlement/concurrent_refunds first; it began right after #1842 merged.","hours":41,"n":23,"open_since":"2026-09-18","structural":true,"key":"red_ci","decision":null},{"kind":"review_wait","action":"Ask maya or tomasz to pick up #1851 and #1829.","hours":29,"open_since":"2026-10-12","n":2,"title":"2 review requests not started after 3 days","key":"review_wait","decision":null},{"kind":"outsider_wait","title":"Outside contributors wait 2.4x longer for a first review","action":"Add a triage rotation for outside PRs.","hours":12,"n":7,"open_since":"2026-09-02","key":"outsider_wait","decision":{"verb":"snooze","by":"tomasz","until":"NOW+9d","reason":"release week","at":"NOW-5d","kind":"finding","id":"outsider_wait"}}],"opportunity":{"hours":70,"findings":2,"inside_another":0},"track_record":{"since":"2026-07-01","top_findings":5,"shrank_by_half":3,"cleared":2},"red_ci":{"definition":"Time a ready pull request spent with a failing check on its newest commit, until a new commit, a passing re-run or the merge.","prs":105,"without_checks":2,"red_prs":31,"red_hours_total":86.1,"rerun_hours_total":41,"rerun_waits":23,"open_red":[{"pr":1846,"since":"NOW-6d","hours":144}],"cycle_hours":{"red":{"median":36,"n":31},"clear":{"median":18,"n":74}},"measures":{"insight.red_ci_share":{"metric":"insight.red_ci_share","version":1,"value":0.29523809523809524,"n":105,"low":0.23523809523809525,"high":0.36523809523809525,"unit":"share","as_of":"NOW-12m","window_days":90,"note":null}},"rerun_jobs":[{"workflow":"CI","job":"test (1.23)","hours":24.6,"prs":21,"runs":[]},{"workflow":"CI","job":"lint","hours":6.1,"prs":2,"runs":[]}],"rerun_tests":[{"test":"TestSettlement/concurrent_refunds","hours":16.4,"prs":4,"pr_list":[1790,1799,1808,1817],"runs":[]},{"test":"TestWebhookRetry/timeout","hours":11.5,"prs":3,"pr_list":[1790,1799,1808],"runs":[]},{"test":"TestLedger/rounding_eur","hours":6.6,"prs":2,"pr_list":[1790,1799],"runs":[]}],"top":[{"pr":1790,"hours":41.1,"waits":[{"ended_by":"rerun"},{"ended_by":"push"}]},{"pr":1799,"hours":33.4,"waits":[{"ended_by":"rerun"}]},{"pr":1808,"hours":25.7,"waits":[{"ended_by":"rerun"}]}]},"chains":[{"test":"TestSettlement/concurrent_refunds","hours":17.5,"prs":6,"pr_list":[1800,1807,1814,1821,1828,1835],"state":"flaky","flake_events":14,"runs":96,"owners":["@acme/core"],"owners_from":"CODEOWNERS line 4","decision":null},{"test":"TestWebhookRetry/timeout","hours":7.9,"prs":6,"pr_list":[1800,1807,1814,1821,1828,1835],"state":"flaky","flake_events":6,"runs":96,"owners":["@acme/core"],"owners_from":"CODEOWNERS line 4","decision":null}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"weeks":[{"week":"2026-09-07","flow":{"yes":4,"no":2,"mixed":1},"friction":{"yes":3,"no":3,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":0}},{"week":"2026-09-14","flow":{"yes":5,"no":2,"mixed":1},"friction":{"yes":4,"no":2,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":1}},{"week":"2026-09-21","flow":{"yes":6,"no":2,"mixed":1},"friction":{"yes":3,"no":3,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":0}},{"week":"2026-09-28","flow":{"yes":4,"no":2,"mixed":1},"friction":{"yes":4,"no":2,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":1}},{"week":"2026-10-05","flow":{"yes":5,"no":2,"mixed":1},"friction":{"yes":3,"no":3,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":0}},{"week":"2026-10-12","flow":{"yes":6,"no":2,"mixed":1},"friction":{"yes":4,"no":2,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":1}},{"week":"2026-10-19","flow":{"yes":4,"no":2,"mixed":1},"friction":{"yes":3,"no":3,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":0}},{"week":"2026-10-26","flow":{"yes":5,"no":2,"mixed":1},"friction":{"yes":4,"no":2,"mixed":1},"satisfaction":{"yes":5,"no":1,"mixed":1}}],"beside":{"flow":"pickup","friction":"first_try","satisfaction":"deployments"},"min_answers":5}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"generated":"NOW-2d","score":9.1,"probes":[{"probe":"hasDangerousWorkflowUntrustedCheckout","risk":"critical","effort":"S","result":"pass","why":"A pull_request_target or workflow_run workflow checks out the pull request's code with secrets in reach.","fix":"Use pull_request for untrusted code, or check it out only after a maintainer's label or approval gate.","findings":[],"guarded":[{"probe":"hasDangerousWorkflowUntrustedCheckout","path":".github/workflows/label.yml","guarded":"runs only after the safe-to-test label"}]},{"probe":"hasDangerousWorkflowScriptInjection","risk":"critical","effort":"S","result":"pass","why":"Text an outsider writes (a title, a body, a branch name) is pasted into a run: script.","fix":"Pass it through env: (FOO: ${{ github.event.issue.title }}) and use \"$FOO\" in the script.","findings":[],"guarded":[]},{"probe":"topLevelPermissions","risk":"high","effort":"S","result":"pass","why":"A workflow's token gets write access it may not need.","fix":"Add `permissions: contents: read` at the top and grant writes only on the jobs that need them.","findings":[],"guarded":[]},{"probe":"pinsDependencies","risk":"medium","effort":"M","result":"fail","why":"An action used by tag, or a script piped from the internet, can change under you (as tj-actions/changed-files did).","fix":"Pin each action to its full commit (uses: owner/action@<40-character sha> # v4) and download scripts before running them.","findings":[{"path":".github/workflows/release.yml","job":"publish","detail":"goreleaser/goreleaser-action@v6 is used by tag"}],"guarded":[]},{"probe":"branchProtectionLevel","risk":"high","effort":"S","result":"pass","why":"The default branch can be force-pushed or merged into without review or checks.","fix":"Add a ruleset on the default branch: block force pushes and deletion, require a review and the CI checks.","findings":[],"guarded":[]},{"probe":"securityPolicyPresent","risk":"medium","effort":"S","result":"pass","why":"No SECURITY.md tells people how to report a vulnerability privately.","fix":"Add SECURITY.md with a contact and a disclosure timeline, and turn on private vulnerability reporting.","findings":[],"guarded":[]},{"probe":"releasesAreSigned","risk":"high","effort":"M","result":"pass","why":"Recent releases carry no signature or provenance file to check them against.","fix":"Sign release assets with Sigstore (actions/attest-build-provenance) or publish .intoto.jsonl provenance.","findings":[],"guarded":[]},{"probe":"hasSBOM","risk":"medium","effort":"S","result":"pass","why":"No SBOM in the repo or the release assets.","fix":"Attach an SPDX or CycloneDX SBOM to each release (anchore/sbom-action).","findings":[],"guarded":[]},{"probe":"sastToolConfigured","risk":"medium","effort":"S","result":"pass","why":"No code scanning (CodeQL, Semgrep, SonarCloud) runs on pull requests.","fix":"Turn on CodeQL's default setup in the repo's Security settings, or add a Semgrep workflow.","findings":[],"guarded":[]},{"probe":"hasBinaryArtifacts","risk":"high","effort":"S","result":"pass","why":"Compiled files are committed, so nobody can review what they do.","fix":"Build them in CI instead and remove them from the repo.","findings":[],"guarded":[]},{"probe":"fuzzed","risk":"medium","effort":"M","result":"pass","why":"No fuzzing setup was found.","fix":"Add ClusterFuzzLite, Go native fuzz tests, or join OSS-Fuzz.","findings":[],"guarded":[]},{"probe":"hasOpenSSFBadge","risk":"low","effort":"M","result":"fail","why":"No OpenSSF Best Practices badge.","fix":"Fill in the questionnaire at bestpractices.dev.","findings":[],"guarded":[]},{"probe":"packagedWithAutomatedWorkflow","risk":"medium","effort":"S","result":"pass","why":"Releases aren't published by a workflow, so their build can't be traced.","fix":"Publish from a workflow (with trusted publishing on PyPI and npm).","findings":[],"guarded":[]}],"facts":{"workflows":{"sast":[".github/workflows/codeql.yml"],"publish":[".github/workflows/release.yml"],"files":4},"tree":{"binaries":[],"sbom_files":[],"fuzzing":["internal/ledger/ledger_fuzz_test.go"]},"branch":{"tiers":[{"tier":1,"rule":"no force pushes or deletion","state":"met"},{"tier":2,"rule":"reviews required","state":"met"},{"tier":3,"rule":"status checks required","state":"met"},{"tier":4,"rule":"two reviewers and code owners","state":"missing"},{"tier":5,"rule":"stale reviews dismissed, admins included","state":"unknown"}],"readable":true,"level":3},"policy":{"file":"acme/payments-api:SECURITY.md","contact":true,"disclosure":true,"private_reporting":true},"releases":{"releases":5,"signed":["v2.14.0","v2.13.2","v2.13.1"],"sbom":["v2.14.0"]},"oss_fuzz":false,"badge":null},"history":[["NOW-77d",7.8],["NOW-70d",7.9],["NOW-63d",8],["NOW-56d",8.1],["NOW-49d",8.3],["NOW-42d",8.4],["NOW-35d",8.5],["NOW-28d",8.6],["NOW-21d",8.7],["NOW-14d",8.9],["NOW-7d",9],["NOW-0d",9.1]],"weakened":false}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
{"workflow":".github/workflows/integration.yml","job":"postgres-15","state":"flaky","flake_events":9,"failures":9,"runs":120,"flake_rate":0.075,"prs_affected":6,"retry_minutes":672}
|
|
2
|
+
{"workflow":".github/workflows/e2e.yml","job":"checkout-smoke","state":"suspect","flake_events":4,"failures":4,"runs":88,"flake_rate":0.0455,"prs_affected":4,"retry_minutes":264}
|
|
3
|
+
{"workflow":".github/workflows/build.yml","job":"docker","state":"ok","flake_events":0,"failures":0,"runs":120,"flake_rate":0,"prs_affected":0,"retry_minutes":0}
|
|
4
|
+
{"workflow":".github/workflows/unit.yml","job":"go-test","state":"ok","flake_events":0,"failures":0,"runs":120,"flake_rate":0,"prs_affected":0,"retry_minutes":0}
|
|
5
|
+
{"workflow":".github/workflows/lint.yml","job":"golangci","state":"ok","flake_events":0,"failures":0,"runs":120,"flake_rate":0,"prs_affected":0,"retry_minutes":0}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{"id":1849,"pr_pickup_time":55,"pr_review_time":331,"pr_coding_time":369,"pr_deploy_time":132,"pr_cycle_time":1611,"pr_merged_date":"2026-10-18T12:00:00Z"}
|
|
2
|
+
{"id":1846,"pr_pickup_time":216,"pr_review_time":552,"pr_coding_time":677,"pr_deploy_time":242,"pr_cycle_time":1772,"pr_merged_date":"2026-10-12T12:00:00Z"}
|
|
3
|
+
{"id":1843,"pr_pickup_time":147,"pr_review_time":773,"pr_coding_time":984,"pr_deploy_time":352,"pr_cycle_time":1703,"pr_merged_date":"2026-10-06T12:00:00Z"}
|
|
4
|
+
{"id":1840,"pr_pickup_time":78,"pr_review_time":994,"pr_coding_time":1292,"pr_deploy_time":132,"pr_cycle_time":1634,"pr_merged_date":"2026-09-30T12:00:00Z"}
|
|
5
|
+
{"id":1837,"pr_pickup_time":239,"pr_review_time":1214,"pr_coding_time":369,"pr_deploy_time":242,"pr_cycle_time":1795,"pr_merged_date":"2026-09-24T12:00:00Z"}
|
|
6
|
+
{"id":1834,"pr_pickup_time":170,"pr_review_time":331,"pr_coding_time":677,"pr_deploy_time":352,"pr_cycle_time":1726,"pr_merged_date":"2026-09-18T12:00:00Z"}
|
|
7
|
+
{"id":1831,"pr_pickup_time":101,"pr_review_time":552,"pr_coding_time":984,"pr_deploy_time":132,"pr_cycle_time":1657,"pr_merged_date":"2026-09-12T12:00:00Z"}
|
|
8
|
+
{"id":1828,"pr_pickup_time":262,"pr_review_time":773,"pr_coding_time":1292,"pr_deploy_time":242,"pr_cycle_time":1818,"pr_merged_date":"2026-09-06T12:00:00Z"}
|
|
9
|
+
{"id":1825,"pr_pickup_time":193,"pr_review_time":994,"pr_coding_time":369,"pr_deploy_time":352,"pr_cycle_time":1749,"pr_merged_date":"2026-08-31T12:00:00Z"}
|
|
10
|
+
{"id":1822,"pr_pickup_time":124,"pr_review_time":1214,"pr_coding_time":677,"pr_deploy_time":132,"pr_cycle_time":1680,"pr_merged_date":"2026-08-25T12:00:00Z"}
|
|
11
|
+
{"id":1819,"pr_pickup_time":55,"pr_review_time":331,"pr_coding_time":984,"pr_deploy_time":242,"pr_cycle_time":1611,"pr_merged_date":"2026-08-19T12:00:00Z"}
|
|
12
|
+
{"id":1816,"pr_pickup_time":216,"pr_review_time":552,"pr_coding_time":1292,"pr_deploy_time":352,"pr_cycle_time":1772,"pr_merged_date":"2026-08-13T12:00:00Z"}
|
|
13
|
+
{"id":1813,"pr_pickup_time":147,"pr_review_time":773,"pr_coding_time":369,"pr_deploy_time":132,"pr_cycle_time":1703,"pr_merged_date":"2026-08-07T12:00:00Z"}
|
|
14
|
+
{"id":1810,"pr_pickup_time":78,"pr_review_time":994,"pr_coding_time":677,"pr_deploy_time":242,"pr_cycle_time":1634,"pr_merged_date":"2026-08-01T12:00:00Z"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{"id":1849,"pull_request_key":1849,"title":"Refactor config loading","author_name":"someone","merged_date":"2026-10-18T12:00:00Z"}
|
|
2
|
+
{"id":1846,"pull_request_key":1846,"title":"Add metrics for retries","author_name":"someone","merged_date":"2026-10-12T12:00:00Z"}
|
|
3
|
+
{"id":1843,"pull_request_key":1843,"title":"Fix flaky timeout","author_name":"someone","merged_date":"2026-10-06T12:00:00Z"}
|
|
4
|
+
{"id":1840,"pull_request_key":1840,"title":"Update docs","author_name":"someone","merged_date":"2026-09-30T12:00:00Z"}
|
|
5
|
+
{"id":1837,"pull_request_key":1837,"title":"Speed up cold start","author_name":"someone","merged_date":"2026-09-24T12:00:00Z"}
|
|
6
|
+
{"id":1834,"pull_request_key":1834,"title":"Tidy error messages","author_name":"someone","merged_date":"2026-09-18T12:00:00Z"}
|
|
7
|
+
{"id":1831,"pull_request_key":1831,"title":"Split large handler","author_name":"someone","merged_date":"2026-09-12T12:00:00Z"}
|
|
8
|
+
{"id":1828,"pull_request_key":1828,"title":"Refactor config loading","author_name":"someone","merged_date":"2026-09-06T12:00:00Z"}
|
|
9
|
+
{"id":1825,"pull_request_key":1825,"title":"Add metrics for retries","author_name":"someone","merged_date":"2026-08-31T12:00:00Z"}
|
|
10
|
+
{"id":1822,"pull_request_key":1822,"title":"Fix flaky timeout","author_name":"someone","merged_date":"2026-08-25T12:00:00Z"}
|
|
11
|
+
{"id":1819,"pull_request_key":1819,"title":"Update docs","author_name":"someone","merged_date":"2026-08-19T12:00:00Z"}
|
|
12
|
+
{"id":1816,"pull_request_key":1816,"title":"Speed up cold start","author_name":"someone","merged_date":"2026-08-13T12:00:00Z"}
|
|
13
|
+
{"id":1813,"pull_request_key":1813,"title":"Tidy error messages","author_name":"someone","merged_date":"2026-08-07T12:00:00Z"}
|
|
14
|
+
{"id":1810,"pull_request_key":1810,"title":"Split large handler","author_name":"someone","merged_date":"2026-08-01T12:00:00Z"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generated":"NOW-12m","files":{"prs.jsonl":{"rows":22,"generated":"NOW-12m"},"ci_jobs.jsonl":{"rows":5,"generated":"NOW-12m"},"tests.jsonl":{"rows":3,"generated":"NOW-12m"},"devlake_pull_requests.jsonl":{"rows":14,"generated":"NOW-12m"},"devlake_project_pr_metrics.jsonl":{"rows":14,"generated":"NOW-12m"}}}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{"number":1849,"title":"Refactor config loading","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-10-16T12:00:00Z","merged_at":"2026-10-18T12:00:00Z","pickup_s":3312,"additions":40,"deletions":10}
|
|
2
|
+
{"number":1846,"title":"Add metrics for retries","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-10-10T12:00:00Z","merged_at":"2026-10-12T12:00:00Z","pickup_s":12972,"additions":77,"deletions":23}
|
|
3
|
+
{"number":1843,"title":"Fix flaky timeout","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-10-04T12:00:00Z","merged_at":"2026-10-06T12:00:00Z","pickup_s":8832,"additions":114,"deletions":36}
|
|
4
|
+
{"number":1840,"title":"Update docs","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-09-28T12:00:00Z","merged_at":"2026-09-30T12:00:00Z","pickup_s":4692,"additions":151,"deletions":49}
|
|
5
|
+
{"number":1837,"title":"Speed up cold start","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-09-22T12:00:00Z","merged_at":"2026-09-24T12:00:00Z","pickup_s":14352,"additions":188,"deletions":62}
|
|
6
|
+
{"number":1834,"title":"Tidy error messages","author_kind":"person","role":"outsider","status":"MERGED","created_at":"2026-09-16T12:00:00Z","merged_at":"2026-09-18T12:00:00Z","pickup_s":10212,"additions":225,"deletions":75}
|
|
7
|
+
{"number":1831,"title":"Split large handler","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-09-10T12:00:00Z","merged_at":"2026-09-12T12:00:00Z","pickup_s":6072,"additions":262,"deletions":88}
|
|
8
|
+
{"number":1828,"title":"Refactor config loading","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-09-04T12:00:00Z","merged_at":"2026-09-06T12:00:00Z","pickup_s":15732,"additions":299,"deletions":11}
|
|
9
|
+
{"number":1825,"title":"Add metrics for retries","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-08-29T12:00:00Z","merged_at":"2026-08-31T12:00:00Z","pickup_s":11592,"additions":336,"deletions":24}
|
|
10
|
+
{"number":1822,"title":"Fix flaky timeout","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-08-23T12:00:00Z","merged_at":"2026-08-25T12:00:00Z","pickup_s":7452,"additions":73,"deletions":37}
|
|
11
|
+
{"number":1819,"title":"Update docs","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-08-17T12:00:00Z","merged_at":"2026-08-19T12:00:00Z","pickup_s":3312,"additions":110,"deletions":50}
|
|
12
|
+
{"number":1816,"title":"Speed up cold start","author_kind":"person","role":"outsider","status":"MERGED","created_at":"2026-08-11T12:00:00Z","merged_at":"2026-08-13T12:00:00Z","pickup_s":12972,"additions":147,"deletions":63}
|
|
13
|
+
{"number":1813,"title":"Tidy error messages","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-08-05T12:00:00Z","merged_at":"2026-08-07T12:00:00Z","pickup_s":8832,"additions":184,"deletions":76}
|
|
14
|
+
{"number":1810,"title":"Split large handler","author_kind":"person","role":"insider","status":"MERGED","created_at":"2026-07-30T12:00:00Z","merged_at":"2026-08-01T12:00:00Z","pickup_s":4692,"additions":221,"deletions":89}
|
|
15
|
+
{"number":1851,"title":"Add idempotency keys to refund endpoint","author_kind":"person","role":"insider","status":"OPEN","created_at":"2026-10-16T12:00:00Z","merged_at":null,"pickup_s":null,"additions":311,"deletions":36}
|
|
16
|
+
{"number":1829,"title":"Document EUR rounding rules","author_kind":"person","role":"insider","status":"OPEN","created_at":"2026-10-09T12:00:00Z","merged_at":null,"pickup_s":null,"additions":289,"deletions":14}
|
|
17
|
+
{"number":1846,"title":"Bump pgx to v5.7","author_kind":"bot","role":"insider","status":"OPEN","created_at":"2026-10-14T12:00:00Z","merged_at":null,"pickup_s":null,"additions":306,"deletions":31}
|
|
18
|
+
{"number":1833,"title":"Split settlement worker into two queues","author_kind":"person","role":"insider","status":"OPEN","created_at":"2026-10-11T12:00:00Z","merged_at":null,"pickup_s":null,"additions":293,"deletions":18}
|
|
19
|
+
{"number":1855,"title":"Fix typo in webhook docs","author_kind":"person","role":"outsider","status":"OPEN","created_at":"2026-10-18T12:00:00Z","merged_at":null,"pickup_s":null,"additions":315,"deletions":40}
|
|
20
|
+
{"number":1849,"title":"Bump golang.org/x/net from 0.30.0 to 0.33.0","author_kind":"bot","role":"insider","status":"OPEN","created_at":"2026-10-15T12:00:00Z","merged_at":null,"pickup_s":null,"additions":309,"deletions":34}
|
|
21
|
+
{"number":1790,"title":"Prototype: settlement replay tool","author_kind":"person","role":"insider","status":"OPEN","created_at":"2026-09-09T12:00:00Z","merged_at":null,"pickup_s":null,"additions":250,"deletions":45}
|
|
22
|
+
{"number":1777,"title":"Retry policy for card network timeouts","author_kind":"person","role":"insider","status":"OPEN","created_at":"2026-09-14T12:00:00Z","merged_at":null,"pickup_s":null,"additions":237,"deletions":32}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
{"test_id":"TestSettlement/concurrent_refunds","state":"flaky","failures":14,"flake_events":14,"runs":96,"message":"context deadline exceeded"}
|
|
2
|
+
{"test_id":"TestWebhookRetry/timeout","state":"flaky","failures":6,"flake_events":6,"runs":96,"message":"expected 3 retries, got 2"}
|
|
3
|
+
{"test_id":"TestLedger/rounding_eur","state":"broken","failures":96,"flake_events":0,"runs":96,"message":"want 10.05, got 10.04"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"generated":"NOW-12m","packages":84,"systems":{"GO":78,"ACTIONS":6},"policy":{"deny":["AGPL-3.0-only"],"min_scorecard":5},"outside_lookups":true,"licences":{"denied":[],"accepted":[],"unknown":2,"by_licence":{"BSD-3-Clause":31,"Apache-2.0":24,"MIT":19,"MPL-2.0":2}},"drift":[],"scorecards":{"checked":41,"projects":48,"drops":[{"project":"github.com/jackc/pgx","before":7.1,"after":5.4,"since":"NOW-20d","packages":["golang.org/x/net"]}],"low":[{"project":"github.com/legacy/left-pad-ng","score":3.2,"packages":["left-pad-ng"]}],"below_policy":[]},"runtimes":[{"runtime":"go","version":"1.22","file":"go.mod","use":"runs","eol":"2025-02-11","latest":"1.22.12","status":"end of life","latest_date":"2025-02-04"},{"runtime":"go","version":"1.23","file":".github/workflows/ci.yml","use":"tests","eol":null,"latest":"1.23.4","status":"supported","latest_date":"2024-12-03"}],"reachability":{"scanner":"govulncheck 1.1.3","findings":[{"id":"GO-2024-3333","aliases":["GHSA-w32m-9786-jp63","CVE-2024-45338","GO-2024-3333"],"reach":"called","module":"golang.org/x/net","version":"0.30.0","fixed":"0.33.0","path":["internal/webhook.Parse","golang.org/x/net/html.Parse"]},{"id":"GO-2024-3321","aliases":["GHSA-v778-237x-gjrc","CVE-2024-45337","GO-2024-3321"],"reach":"imported","module":"golang.org/x/crypto","version":"0.28.0","fixed":"0.31.0","path":[]},{"id":"GO-2024-2611","aliases":["GHSA-xr7q-jx4m-x55m","CVE-2024-24786","GO-2024-2611"],"reach":"required","module":"google.golang.org/protobuf","version":"1.32.0","fixed":"1.33.0","path":[]}],"counts":{"called":1,"imported":1,"required":1}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"generated":"NOW-12m","ref":"main","scanner":"OSV-Scanner 2.7.0","offline":false,"files":["go.sum"],"skipped":[],"open":[{"id":"GHSA-w32m-9786-jp63","aliases":["CVE-2024-45338","GO-2024-3333"],"file":"go.sum","ecosystem":"Go","package":"golang.org/x/net","version":"0.30.0","severity":"high","malware":false,"fixed":"0.33.0","first_seen":"NOW-9d"},{"id":"GHSA-v778-237x-gjrc","aliases":["CVE-2024-45337","GO-2024-3321"],"file":"go.sum","ecosystem":"Go","package":"golang.org/x/crypto","version":"0.28.0","severity":"critical","malware":false,"fixed":"0.31.0","first_seen":"NOW-4d"},{"id":"GHSA-xr7q-jx4m-x55m","aliases":["CVE-2024-24786","GO-2024-2611"],"file":"go.sum","ecosystem":"Go","package":"google.golang.org/protobuf","version":"1.32.0","severity":"moderate","malware":false,"fixed":"1.33.0","first_seen":"NOW-31d"}],"closed":[{"id":"GHSA-r9px-m959-cxf4"},{"id":"GHSA-c2qf-rxjj-qqgw"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"org":"acme","mode":"private","built_at":"NOW-6h","complete":true,"repos":[{"name":"acme/payments-api","private":true,"archived":false,"fork":false,"language":"Go","runtime":["go 1.22"],"owners":{"status":"valid","file":".github/CODEOWNERS","reasons":[],"owners":["@acme/payments-core","@acme/ledger"]},"score":{"level":"silver","rows":[[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],[7,0,0],[8,1,1],[9,0,0]],"not_available":1},"modules":{"ci_first_try":"78%","ci_first_try_share":0.78},"since":{"level":"NOW-40d"},"descriptor":{"present":true,"entities":[{"kind":"Component","name":"payments-api","title":"Payments API","description":"Card payments, refunds and settlement","system":"payments","type":"service","lifecycle":"production","owner":"group:payments-core","owner_check":["pass"],"depends_on":["resource:default/ledger-db"],"provides_apis":["api:default/payments-v2"],"consumes_apis":["api:default/card-network"],"tags":["go","pci"]}],"problems":[]},"doc_pages":["architecture.md","runbook.md","refunds.md"],"checked":"NOW-6h","protected":true,"docs":{"readme":true,"license":true,"contributing":true,"code_of_conduct":false,"org_defaults":[]},"reviews":null,"ci":null,"openssf":null,"properties":{"tier":"critical","team":"payments-core"},"files":{"SECURITY.md":{"present":false}}},{"name":"acme/web-app","private":true,"archived":false,"fork":false,"language":"TypeScript","runtime":["node 20"],"owners":{"status":"valid","file":"CODEOWNERS","reasons":[],"owners":["@acme/storefront","@acme/checkout"]},"score":{"level":"gold","rows":[[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],[7,0,0],[8,0,0],[9,0,0]],"not_available":1},"modules":{"ci_first_try":"91%","ci_first_try_share":0.91},"since":{"level":"NOW-40d"},"descriptor":{"present":true,"entities":[{"kind":"Component","name":"web-app","title":"Storefront","description":"The customer-facing web shop","system":"shop","type":"website","lifecycle":"production","owner":"group:storefront","owner_check":["pass"],"depends_on":["component:default/payments-api"],"consumes_apis":["api:default/payments-v2","api:default/search"],"tags":["typescript","frontend"]}],"problems":[]},"doc_pages":["getting-started.md","deploys.md"],"checked":"NOW-6h","protected":true,"docs":{"readme":true,"license":true,"contributing":true,"code_of_conduct":true,"org_defaults":["code_of_conduct"]},"properties":{"tier":"high","team":"storefront"},"files":{"SECURITY.md":{"present":true,"contains:security@acme.dev":true}}},{"name":"acme/mobile","private":false,"archived":false,"fork":false,"language":"Kotlin","runtime":[],"owners":{"status":"weak","file":"CODEOWNERS","reasons":["no catch-all line (* or /): files outside the listed paths have no owner"],"owners":["@acme/android"]},"score":{"level":"bronze","rows":[[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,1,1],[6,0,0],[7,1,1],[8,0,0],[9,0,0]],"not_available":0},"modules":{"ci_first_try":"83%","ci_first_try_share":0.83},"since":{"level":"NOW-40d"},"descriptor":{"present":true,"entities":[{"kind":"Component","name":"mobile","title":"Android app","system":"shop","type":"mobile-app","lifecycle":"production","owner":"group:android","owner_check":["fail"],"consumes_apis":["api:default/payments-v2"],"tags":["android"]}],"problems":["spec.owner group:android is not in CODEOWNERS"]},"doc_pages":["release.md"],"checked":"NOW-6h","protected":null,"docs":{"readme":true,"license":true,"contributing":false,"code_of_conduct":true,"org_defaults":[]},"openssf":{"date":"NOW-5d","checks":{"Branch-Protection":-1,"Code-Review":8,"Maintained":10,"Pinned-Dependencies":3,"Token-Permissions":0,"Vulnerabilities":7,"Security-Policy":10}},"files":{"SECURITY.md":{"present":true,"contains:security@acme.dev":false}}},{"name":"acme/ledger","private":true,"archived":false,"fork":false,"language":"Go","runtime":["go 1.23"],"owners":{"status":"valid","file":".github/CODEOWNERS","reasons":[],"owners":["@acme/ledger"]},"score":{"level":"bronze","rows":[[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,1,1],[7,0,0],[8,1,1],[9,0,0]],"not_available":1},"modules":null,"since":{"level":"NOW-40d"},"descriptor":{"present":false},"doc_pages":["schema.md"],"checked":"NOW-6h","protected":true,"docs":{"readme":true,"license":true,"contributing":null,"code_of_conduct":null,"org_defaults":[]},"ci":{"first_try_share":0.83,"pushes":41,"median_s":412},"reviews":{"first_review_median_s":15120,"prs":23}},{"name":"acme/infra-terraform","private":true,"archived":false,"fork":false,"language":"HCL","runtime":[],"owners":{"status":"weak","file":"CODEOWNERS","reasons":["2 errors in CODEOWNERS (GitHub's own check)"],"owners":["@acme/platform"]},"score":{"level":null,"rows":[[0,0,0],[1,0,0],[2,1,1],[3,1,1],[4,0,0],[5,0,0],[6,0,0],[7,0,0],[8,0,0],[9,0,0]],"not_available":1},"modules":null,"since":{"level":"NOW-40d"},"descriptor":{"present":false},"doc_pages":[],"checked":"NOW-6h","protected":false,"rules":[],"docs":{"readme":false,"license":true,"contributing":null,"code_of_conduct":null,"org_defaults":[]},"ci":{"first_try_share":0.64,"pushes":25,"median_s":188}},{"name":"acme/design-system","private":false,"archived":false,"fork":false,"language":"TypeScript","runtime":[],"owners":{"status":"valid"},"score":{"level":"gold","rows":[[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],[7,0,0],[8,0,0],[9,3,0]],"not_available":0},"modules":null,"since":{"level":"NOW-40d"},"descriptor":{"present":false},"doc_pages":["tokens.md","components"],"checked":"NOW-6h","protected":true,"rules":["pull_request","required_status_checks"],"docs":{"readme":true,"license":true,"contributing":true,"code_of_conduct":true,"org_defaults":[]},"openssf":{"date":"NOW-3d","checks":{"Branch-Protection":8,"Code-Review":10,"Maintained":10,"Pinned-Dependencies":9,"Token-Permissions":10,"Vulnerabilities":10,"Security-Policy":10}}},{"name":"acme/data-pipelines","private":true,"archived":false,"fork":false,"language":"Python","runtime":["python 3.9"],"owners":{"status":"none","file":null,"reasons":["no CODEOWNERS file"],"owners":[],"suggested":["mira-k","devops-sam"],"suggested_from":"recent reviews"},"score":{"level":null,"rows":[[0,1,1],[1,0,0],[2,0,0],[3,1,1],[4,0,0],[5,0,0],[6,0,0],[7,0,0],[8,0,0],[9,0,0]],"not_available":1},"modules":null,"since":{"level":"NOW-40d"},"descriptor":{"present":false},"doc_pages":[],"checked":"NOW-6h","protected":false,"docs":{"readme":true,"license":false,"contributing":null,"code_of_conduct":null,"org_defaults":[]},"ci":{"first_try_share":0.71,"pushes":14,"median_s":960}},{"name":"acme/old-admin","private":true,"archived":false,"fork":false,"language":"PHP","runtime":[],"owners":{"status":"none","file":null,"reasons":["no CODEOWNERS file"],"owners":[],"suggested":["j-oakes"],"suggested_from":"recent commits"},"score":{"level":null,"rows":[[0,1,1],[1,1,1],[2,1,1],[3,0,0],[4,0,0],[5,0,0],[6,0,0],[7,0,0],[8,0,0],[9,0,0]],"not_available":1},"modules":null,"since":{"level":"NOW-40d"},"descriptor":{"present":false},"doc_pages":[],"checked":"NOW-6h","protected":null,"docs":{"readme":false,"license":false,"contributing":null,"code_of_conduct":null,"org_defaults":[]},"error":"ReadTimeout"}],"packed":true,"rule_index":[["codeowners","bronze"],["reviews-required","bronze"],["readme-and-license","bronze"],["owners-valid","silver"],["ci-first-try","silver"],["first-review","silver"],["contributing","silver"],["first-review-fast","gold"],["security-policy","gold"],["token-permissions","gold"]],"result_codes":["pass","fail","exempt","preview","not available"],"evidence_index":["passes","missing or failing"],"campaigns":[{"title":"Every repo has CODEOWNERS by December","passing":6,"targets":8,"until":"NOW+38d","burn_down":[["NOW-10d",5],["NOW-9d",5],["NOW-8d",5],["NOW-7d",4],["NOW-6d",4],["NOW-5d",4],["NOW-4d",3],["NOW-3d",3],["NOW-2d",3],["NOW-1d",2]],"failing":["acme/data-pipelines","acme/old-admin"],"days_left":38}],"golden":[{"id":"go-service","title":"New Go service","kind":"repo","private":true,"description":"A Go service with CI, CODEOWNERS, a catalog file and StackVitals set up."},{"id":"security-baseline","title":"Security baseline files","kind":"pr","description":"Adds SECURITY.md, Dependabot settings and pinned workflow permissions."}],"golden_ready":true,"org_view":{"running":3,"repos":8,"medians":{"ci_first_try":0.83,"pickup_p75_h":5.1,"review_p75_h":18.4,"change_failure_rate":0.09},"totals":{"ci_flaky":7,"ci_broken":1,"open_prs":78,"stale_prs":4,"deployments":440,"vulns_open":7,"vulns_serious":3},"counts":{"ci_first_try":3},"leaders":{"ci_flaky":[{"repo":"acme/payments-api","value":3},{"repo":"acme/web-app","value":2},{"repo":"acme/mobile","value":2}],"stale_prs":[{"repo":"acme/payments-api","value":2},{"repo":"acme/mobile","value":2}],"pickup_p75_h":[{"repo":"acme/mobile","value":11.4},{"repo":"acme/payments-api","value":5.1},{"repo":"acme/web-app","value":2.2}],"newcomers_waiting":[{"repo":"acme/mobile","value":4},{"repo":"acme/payments-api","value":2}],"vulns_serious":[{"repo":"acme/payments-api","value":2},{"repo":"acme/web-app","value":1}]}},"extended":true}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":".github/stackvitals.toml","settings":[{"key":"ci.monitors.pass_on_retry.min_events","kind":"int","default":2,"help":"Fail-then-pass events with no code change before a test or job is flaky.","module":"ci"},{"key":"ci.monitors.pass_on_retry.quiet_days","kind":"int","default":14,"help":"Days without a flake before the pass-on-retry monitor lets go.","module":"ci","unit":"days"},{"key":"ci.monitors.pass_on_retry.quiet_runs","kind":"int","default":10,"help":"Clean runs in a row before a flaky test counts as fixed.","module":"ci","unit":"runs"},{"key":"ci.monitors.failure_rate.enabled","kind":"bool","default":true,"help":"Watch each test's failure share on the default branch.","module":"ci"},{"key":"ci.monitors.failure_rate.window_runs","kind":"int","default":50,"help":"Latest default-branch runs the failure rate looks at.","module":"ci","unit":"runs"},{"key":"ci.monitors.failure_rate.min_runs","kind":"int","default":20,"help":"Runs needed before the failure-rate monitor can fire.","module":"ci","unit":"runs"},{"key":"ci.monitors.failure_rate.activate","kind":"share","default":0.15,"help":"Failure share that turns the monitor on.","module":"ci"},{"key":"ci.monitors.failure_rate.resolve","kind":"share","default":0.05,"help":"The monitor stays on while the failure share is above this.","module":"ci"},{"key":"ci.monitors.broken.streak","kind":"int","default":3,"help":"Default-branch runs in a row that all failed: the test keeps failing (broken).","module":"ci","unit":"runs"},{"key":"ci.monitors.broken.window_runs","kind":"int","default":5,"help":"Latest runs the broken monitor looks at.","module":"ci","unit":"runs"},{"key":"ci.monitors.broken.activate","kind":"share","default":0.8,"help":"Failure share in that window that marks a test broken.","module":"ci"},{"key":"ci.monitors.broken.resolve","kind":"share","default":0.5,"help":"A broken test stays broken while its failure share is at least this.","module":"ci"},{"key":"ci.monitors.slow.p50_ms","kind":"int","default":5000,"help":"Label a test slow when its median passing time is above this.","module":"ci","unit":"ms"},{"key":"ci.monitors.timeout_inflation.ratio","kind":"number","default":2,"help":"Label a test when its median failure time is at least this many times its P95 pass time.","module":"ci","unit":"x"},{"key":"ci.monitors.timeout_inflation.min_failures","kind":"int","default":3,"help":"Failures needed before that label shows.","module":"ci"},{"key":"ci.mute","kind":"dates","default":{},"help":"Test ids or glob patterns muted until a date: still measured, but no alert and no new issue.","module":"ci"},{"key":"ci.quarantine.always","kind":"list","default":[],"help":"Test ids always on the quarantine list, flaky or not.","module":"ci"},{"key":"ci.quarantine.never","kind":"list","default":[],"help":"Test ids never quarantined, even when flaky.","module":"ci"},{"key":"ci.quarantine.max_days","kind":"int","default":0,"help":"Days a flaky test may stay in quarantine on its own before it fails builds again and is listed as overdue for a fix; 0 never ends it. Tests someone quarantined by hand stay.","module":"ci"},{"key":"ci.coverage.min_patch","kind":"share","default":0,"help":"The verdict check fails when fewer of a pull request's added lines ran than this (from the coverage report CI uploads); 0 is off.","module":"ci"},{"key":"ci.triage.provider","kind":"choice","default":"off","help":"A model reads the log of up to 3 failures the history can't decide and says whether they look like the change, beside the verdict (never in it); needs the triage-key input. Setups for each provider: docs/triage.md (gemini has a free tier).","module":"ci","choices":["off","gemini","openai","anthropic","mistral","groq"]},{"key":"ci.triage.model","kind":"text","default":"","help":"The model to ask (empty: the provider's suggested small model).","module":"ci"},{"key":"ci.triage.url","kind":"text","default":"","help":"Another OpenAI-compatible endpoint (https) instead of the provider's own.","module":"ci"},{"key":"ci.triage.allow_private","kind":"bool","default":false,"help":"Send a private repo's failing logs too (off: free tiers may keep what they're sent).","module":"ci"},{"key":"delivery.deploy_workflow","kind":"regex","default":"(?i)(deploy|release|publish|push-image)","help":"Workflow names that count as deployments when the repo has no production deployments.","module":"delivery"},{"key":"delivery.production","kind":"list","default":["production","prod","live"],"help":"GitHub deployment environments that count as production (matched on the first word).","module":"delivery"},{"key":"delivery.incident_labels","kind":"list","default":["incident","outage","sev1","sev-1","sev2","sev-2","p0"],"help":"Issue labels that mark an incident.","module":"delivery"},{"key":"delivery.hotfix_labels","kind":"list","default":["hotfix"],"help":"Pull request labels that mark a hotfix (counted as an incident).","module":"delivery"},{"key":"delivery.source","kind":"choice","default":"auto","help":"Where deployments come from; auto tries deployments, deploy workflows, then releases; merges counts every merged pull request as one (only when chosen: it is a poor guess for most repos).","module":"delivery","choices":["auto","deployments","workflows","releases","merges"]},{"key":"delivery.fix_patterns","kind":"list","default":[],"help":"Regular expressions on a merged pull request's title or branch that mark it as a fix, with one group naming the pull request it fixes, like ^fix.*#([0-9]+) or ^hotfix/([0-9]+)-; the incident blames the deployment that shipped that pull request.","module":"delivery"},{"key":"delivery.incident_sources","kind":"list","default":[],"help":"Where incidents come from: any of issues, reverts, hotfixes, fixes, pager, tracker, recorded; empty keeps the automatic choice (a pager tool's alone when connected, else all of GitHub's).","module":"delivery"},{"key":"delivery.production_branches","kind":"list","default":[],"help":"Branches besides the default one that ship to production (globs, like production or release/*): deploy workflows on them count, and so do pull requests merged into them.","module":"delivery"},{"key":"delivery.ignore_reverts_of","kind":"list","default":[],"help":"Reverts that are not incidents: of pull requests touching only these paths (globs, like docs/**) or by these authors (like dependabot[bot]).","module":"delivery"},{"key":"delivery.dora_report","kind":"choice","default":"2023","help":"The DORA report whose tiers DevLake's dashboard uses.","module":"delivery","choices":["2023","2021"]},{"key":"investment.labels","kind":"teams","default":{},"help":"Your own labels for each kind of work (feature, fix, maintenance, security, docs), like maintenance = [\"area: platform\"] under [investment.labels]; checked before the common ones, for where the work went.","module":"delivery"},{"key":"rules","kind":"rules","default":[],"help":"PR rules as code: each [[rules]] has a name, a when (author, paths, lines_over, risk, labels, first_time) and a then (label, reviewers, comment); dry_run = true only reports. Each action happens once per pull request; the Pull Requests page shows what each rule matched before and now.","module":"flow"},{"key":"calendar.weekends","kind":"list","default":[],"help":"Days the team doesn't work, like saturday and sunday; left out of review phases and cycle time (DORA's DevLake-matching numbers stay in calendar time, with a working-time lead time beside them).","module":"delivery"},{"key":"calendar.holidays","kind":"list","default":[],"help":"Dates the team doesn't work, like 2026-12-25; left out the same way.","module":"delivery"},{"key":"services","kind":"services","default":{},"help":"Services inside this repo (a monorepo): under [services.<name>], paths is a list of CODEOWNERS-style patterns (like [\"services/api/\", \"libs/shared/**\"]) and deploy an optional pattern matched against each deployment's environment or workflow name. Delivery then shows review phases per service, and DORA per service for those with a deploy pattern; a pull request touching two services counts in both.","module":"delivery"},{"key":"identity.bots","kind":"list","default":[],"help":"Logins that are bots even if GitHub says otherwise.","module":"people"},{"key":"identity.people","kind":"list","default":[],"help":"Logins that are people even if they look like bots.","module":"people"},{"key":"identity.aliases","kind":"map","default":{},"help":"Old login to current login, so one person's history stays together. A key can also be a tool's id (`jira:<account id>`, `linear:<user id>`, `slack:<member id>`, `discord:<user id>`) or an email, so one person counts once across tools.","module":"people"},{"key":"identity.teams","kind":"teams","default":{},"help":"Team name to its members' logins, for numbers by team.","module":"people"},{"key":"identity.knowledge_names","kind":"bool","default":false,"help":"On a public repo, name the person behind each area in the knowledge map (folders one person knows, authors gone quiet). Off by default: public pages show the areas only. Private repos always show names.","module":"people"},{"key":"alerts.pickup_p75_hours","kind":"hours","default":4,"help":"Alert when 3 in 4 PRs wait longer than this for a first comment or review (last 28 days); 0 turns it off.","module":"alerts","unit":"h"},{"key":"alerts.review_p75_hours","kind":"hours","default":14,"help":"Alert when 3 in 4 reviews take longer than this; 0 turns it off.","module":"alerts","unit":"h"},{"key":"alerts.cycle_p75_hours","kind":"hours","default":72,"help":"Alert when 3 in 4 PRs take longer than this from first commit to merge; 0 turns it off.","module":"alerts","unit":"h"},{"key":"alerts.change_failure_rate","kind":"share","default":0.15,"help":"Alert when more than this share of deployments led to an incident; 0 turns it off.","module":"alerts"},{"key":"alerts.channels","kind":"choices","default":["webhook"],"help":"Where alerts go: the webhook from the workflow, and/or one issue in this repo.","module":"alerts","choices":["webhook","issue"]},{"key":"automation.pr_comments","kind":"switch","default":null,"help":"One comment on failed PR runs saying which failures are known flakes.","module":"automation"},{"key":"automation.rerun_flaky","kind":"switch","default":null,"help":"Re-run failed jobs once when every failure is a known flake (needs actions: write).","module":"automation"},{"key":"automation.quarantine","kind":"switch","default":null,"help":"Keep the quarantine list for the stackvitals ci quarantine command.","module":"automation"},{"key":"automation.issues","kind":"switch","default":null,"help":"One issue per flaky test or job, closed once fixed (needs issues: write).","module":"automation"},{"key":"automation.mention_owners","kind":"switch","default":null,"help":"@-mention code owners in those issues (off: owners are named without a notification).","module":"automation"},{"key":"automation.assign_owners","kind":"switch","default":null,"help":"Assign a new flaky-test issue to its first code owner who is a person.","module":"automation"},{"key":"automation.preflight_comments","kind":"switch","default":null,"help":"One note on new outside PRs that miss what merged PRs here usually include.","module":"automation"},{"key":"automation.deps_comments","kind":"switch","default":null,"help":"One comment on same-repo PRs listing changed packages and their verdicts.","module":"automation"},{"key":"automation.review_requests","kind":"switch","default":false,"help":"Off until turned on: request the top suggested reviewer (who knows the folders, who reviewed the author's PRs, eased by load) on ready PRs nobody was asked to review; once per PR. Needs pull-requests: write.","module":"automation"},{"key":"automation.fix_requests","kind":"switch","default":false,"help":"Off until turned on: one issue per failure that breaks the default branch every run, closed with proof once fixed. Needs issues: write.","module":"automation"},{"key":"automation.fix_by_copilot","kind":"switch","default":false,"help":"With fix_requests: assign each new one to Copilot's coding agent.","module":"automation"},{"key":"automation.size_labels","kind":"switch","default":false,"help":"Off until turned on: a size/XS to size/XL label on each open PR by lines changed (under 10, 100, 500, 1000).","module":"automation"},{"key":"automation.docs_label","kind":"switch","default":false,"help":"Off until turned on: label PRs that only change docs (Markdown, docs/, README) as low risk: docs only; never approves.","module":"automation"},{"key":"automation.label_stuck","kind":"switch","default":null,"help":"Label PRs whose asked-for review has not started after 3 days, and unlabel them later.","module":"automation"},{"key":"automation.verdict_check","kind":"switch","default":null,"help":"A \"StackVitals verdict\" check on pull requests: one required check that waits for every workflow on the newest commit and passes once CI is green (and patch coverage holds); known flakes are re-run, never let through (with rerun_flaky, automatically). Needs checks: write. On a private repo also set the repository variable STACKVITALS_EVERY_CI_RUN to true, so passing CI runs start a job.","module":"automation"},{"key":"automation.verdict_strict","kind":"switch","default":null,"help":"With the verdict check: when a failure the comment called likely from this change goes green on a re-run of the same code, the check stays red until someone with triage access comments /stackvitals accept rerun on the pull request. Off by default (a green re-run passes).","module":"automation"},{"key":"agreements.review_within_hours","kind":"hours","default":0,"help":"Agreement: every PR gets a first comment or review within this many hours; 0 is off.","module":"agreements","unit":"h"},{"key":"agreements.merge_within_days","kind":"number","default":0,"help":"Agreement: PRs merge within this many days of being ready; 0 is off.","module":"agreements","unit":"days"},{"key":"agreements.max_pr_lines","kind":"int","default":0,"help":"Agreement: PRs stay under this many changed lines; 0 is off.","module":"agreements","unit":"lines"},{"key":"agreements.linked_issue","kind":"bool","default":false,"help":"Agreement: every PR links the issue it solves.","module":"agreements"},{"key":"agreements.review_before_merge","kind":"bool","default":false,"help":"Agreement: nothing merges without a review.","module":"agreements"},{"key":"digest.enabled","kind":"bool","default":true,"help":"Post a weekly digest: what changed, what to fix first, decisions ending soon.","module":"digest"},{"key":"digest.pulse","kind":"bool","default":true,"help":"With the issue digest, three pulse questions (flow, friction, satisfaction) answered by reaction; next week's digest shows only the counts (GitHub shows reactions to anyone who can see the issue; on a public repo only the team's own people count).","module":"digest"},{"key":"digest.day","kind":"choice","default":"monday","help":"The day the digest goes out (the first scheduled run after the hour).","module":"digest","choices":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]},{"key":"digest.hour","kind":"int","default":6,"help":"The hour, in UTC, from which the digest may go out on that day.","module":"digest","unit":"UTC"},{"key":"digest.channels","kind":"choices","default":["issue"],"help":"Where the digest goes: one pinned issue in this repo, and/or the webhook.","module":"digest","choices":["webhook","issue"]},{"key":"deps.policy.min_scorecard","kind":"number","default":null,"help":"Projects behind the dependencies scoring under this OpenSSF Scorecard (0 to 10) are listed on the supply page, unless a decision accepted the package. Empty is off.","module":"deps"},{"key":"deps.policy.max_severity","kind":"text","default":null,"help":"The pull request check flags a changed package with an open advisory rated above this (low, moderate, high or critical). Empty is off.","module":"deps"},{"key":"deps.outside_lookups","kind":"bool","default":true,"help":"Look dependencies' public package names up at deps.dev, OpenSSF Scorecard, OSV, npm/PyPI release data, endoflife.date and the registries' download counts (docs/privacy.md); off scans with downloaded OSV databases, skips release checks, runtimes and GuardDog, and keeps every dependency name in the repo.","module":"deps"},{"key":"deps.guarddog","kind":"bool","default":false,"help":"Off by default: the pull request check also runs DataDog's GuardDog on each npm or PyPI package version it adds or upgrades (at most 10), which downloads the package and looks for malicious code (install hooks, obfuscation, data sent out); a finding is a reason to look first. Needs outside_lookups on; Linux runners only.","module":"deps"},{"key":"deps.licenses.deny","kind":"list","default":[],"help":"SPDX licence ids the repo's dependencies must not use (* allowed, like GPL-3.0*); a package offering an allowed choice is fine. Empty is off.","module":"deps"},{"key":"benchmarks.share","kind":"bool","default":false,"help":"Off by default: each CI run's summary offers a link that files this repo's rounded CI figures (pushes, time to green, first-try share; no names, no code) as an issue on StackVitals' public repo, so private repos get peer groups once 10+ of a kind have shared. Nothing is sent unless a person opens the link and files it.","module":"ci"},{"key":"benchmarks.name","kind":"bool","default":false,"help":"With benchmarks.share on: include this repo's name in the shared figures. Off shares them without it.","module":"ci"},{"key":"community.capacity","kind":"text","default":"","help":"Who maintains the project and how much time they have, in your words (like \"two volunteers, evenings and weekends\"); shown on the Community page so the numbers are read against it.","module":"community"},{"key":"community.norms","kind":"text","default":"","help":"How the project works with people, in your words (like \"issues are triaged on Mondays; ideas go to Discussions first\"); shown on the Community page.","module":"community"},{"key":"connectors.jira.url","kind":"text","default":"","help":"Your Jira Cloud site, like https://acme.atlassian.net. The API token goes in the JIRA_API_TOKEN secret, never here.","module":"integrations"},{"key":"connectors.jira.email","kind":"text","default":"","help":"The Jira account's email, when it is not in the JIRA_EMAIL secret.","module":"integrations"},{"key":"connectors.jira.scope_jql","kind":"text","default":"","help":"JQL for the issues to read, like project in (WEB, API); empty reads every issue the account can see.","module":"integrations"},{"key":"connectors.jira.incident_jql","kind":"text","default":"","help":"JQL for the issues that are incidents, like issuetype = Incident; they count in DORA's change failure rate and recovery.","module":"integrations"},{"key":"connectors.jira.key_expires","kind":"date","default":"","help":"When the Jira API token expires (a year at most); a warning shows 14 days before.","module":"integrations"},{"key":"connectors.jira.write_back","kind":"bool","default":false,"help":"Comment on the Jira issue a merged pull request names (the account must be able to comment); off by default.","module":"integrations"},{"key":"connectors.jira.done_transition","kind":"text","default":"","help":"With write-back on, the transition to move that issue through, like Done; empty only comments.","module":"integrations"},{"key":"connectors.jira.flaky_tickets","kind":"bool","default":false,"help":"Open a Jira issue for each test that turns flaky, in ticket_project, and comment and move it to done_transition (or Done) once fixed; the key must be able to write.","module":"integrations"},{"key":"connectors.jira.ticket_project","kind":"text","default":"","help":"The Jira project key flaky-test issues go in, like WEB.","module":"integrations"},{"key":"connectors.jira.team_field","kind":"text","default":"","help":"A Jira field that names each issue's team (its name, like Team, or its id, like customfield_10001): done issues are counted per team. Private repos only.","module":"integrations"},{"key":"connectors.jira.severity_field","kind":"text","default":"","help":"A Jira field that gives each incident's severity (name or id), shown with the incident.","module":"integrations"},{"key":"connectors.linear.teams","kind":"list","default":[],"help":"Linear team keys to read, like ENG; empty reads every team the key can see.","module":"integrations"},{"key":"connectors.linear.incident_labels","kind":"list","default":["incident"],"help":"Linear labels that mark an incident.","module":"integrations"},{"key":"connectors.linear.key_expires","kind":"date","default":"","help":"When the Linear key expires, if it does; a warning shows 14 days before.","module":"integrations"},{"key":"connectors.linear.write_back","kind":"bool","default":false,"help":"Comment on the Linear issue a merged pull request names (the key needs write access); off by default.","module":"integrations"},{"key":"connectors.linear.done_state","kind":"text","default":"","help":"With write-back on, the team's workflow state to move that issue to, like Done; empty only comments.","module":"integrations"},{"key":"connectors.linear.flaky_tickets","kind":"bool","default":false,"help":"Open a Linear issue for each test that turns flaky, in ticket_team, and comment and move it to done_state (or Done) once fixed; the key must be able to write.","module":"integrations"},{"key":"connectors.linear.ticket_team","kind":"text","default":"","help":"The Linear team key flaky-test issues go in, like ENG.","module":"integrations"},{"key":"connectors.discourse.url","kind":"text","default":"","help":"The project's Discourse forum, like https://discuss.example.org; its public topics are read with no key (times and flags only, never text or usernames).","module":"integrations"},{"key":"connectors.discourse.team","kind":"list","default":[],"help":"Forum usernames whose replies count as the project's (forum staff always do).","module":"integrations"},{"key":"connectors.discourse.groups","kind":"list","default":[],"help":"Forum groups whose members' replies count as the project's.","module":"integrations"},{"key":"connectors.slack.channels","kind":"list","default":[],"help":"Slack support channel ids to read (the bot from the slack-token input must be in each); only times and flags are kept.","module":"integrations"},{"key":"connectors.slack.team","kind":"list","default":[],"help":"Slack user ids whose replies count as the project's.","module":"integrations"},{"key":"connectors.slack.key_expires","kind":"date","default":"","help":"When the Slack bot token expires, if it does; a warning shows 14 days before.","module":"integrations"},{"key":"connectors.discord.channels","kind":"list","default":[],"help":"Discord channel ids to read (the bot from the discord-token input needs View Channel and Read Message History); only times and flags are kept.","module":"integrations"},{"key":"connectors.discord.team","kind":"list","default":[],"help":"Discord user ids whose replies count as the project's.","module":"integrations"},{"key":"connectors.discord.key_expires","kind":"date","default":"","help":"When the Discord bot token expires, if it does; a warning shows 14 days before.","module":"integrations"},{"key":"connectors.pagerduty.services","kind":"list","default":[],"help":"PagerDuty service ids whose incidents count; empty counts every service the key can see.","module":"integrations"},{"key":"connectors.pagerduty.urgencies","kind":"choices","default":["high"],"help":"Which PagerDuty urgencies count as production incidents.","module":"integrations","choices":["high","low"]},{"key":"connectors.pagerduty.key_expires","kind":"date","default":"","help":"When the PagerDuty key expires, if it does; a warning shows 14 days before.","module":"integrations"},{"key":"connectors.incident_io.incident_types","kind":"list","default":[],"help":"incident.io incident types that count, like Platform; empty counts every type (test and tutorial incidents never count).","module":"integrations"},{"key":"connectors.incident_io.key_expires","kind":"date","default":"","help":"When the incident.io key expires, if it does; a warning shows 14 days before.","module":"integrations"},{"key":"connectors.copilot.org","kind":"text","default":"","help":"The organization whose Copilot usage reports to keep; empty means this repo's owner.","module":"integrations"},{"key":"connectors.copilot.key_expires","kind":"date","default":"","help":"When the Copilot reports token expires, if it does; a warning shows 14 days before.","module":"integrations"},{"key":"connectors.sonar.url","kind":"text","default":"https://sonarcloud.io","help":"SonarCloud (https://sonarcloud.io) or your SonarQube server.","module":"integrations"},{"key":"connectors.sonar.project","kind":"text","default":"","help":"The Sonar project key, like myorg_myrepo; its quality gate and measures are read each day. A private project or SonarQube server needs the SONAR_TOKEN secret.","module":"integrations"},{"key":"connectors.sonar.key_expires","kind":"date","default":"","help":"When the Sonar token expires, if one is used; a warning shows 14 days before.","module":"integrations"},{"key":"connectors.ai_spend.key_expires","kind":"date","default":"","help":"When the soonest of the AI spend admin keys (Anthropic, OpenAI, Cursor) expires, if it does; a warning shows 14 days before.","module":"integrations"}],"values":{"ci":{"monitors":{"pass_on_retry":{"min_events":2,"quiet_days":14,"quiet_runs":10},"failure_rate":{"enabled":true,"window_runs":50,"min_runs":20,"activate":0.15,"resolve":0.05},"broken":{"streak":3,"window_runs":5,"activate":0.8,"resolve":0.5},"slow":{"p50_ms":5000},"timeout_inflation":{"ratio":2,"min_failures":3}},"mute":{"TestLedger/rounding_eur":"2026-12-31"},"quarantine":{"always":[],"never":[]},"coverage":{"min_patch":0},"triage":{"provider":"off","model":"","url":"","allow_private":false}},"delivery":{"deploy_workflow":"(?i)(deploy|release|publish|push-image)","production":["production","prod","live"],"incident_labels":["incident","outage","sev1","sev-1","sev2","sev-2","p0"],"hotfix_labels":["hotfix"],"source":"auto","dora_report":"2023"},"identity":{"bots":[],"people":[],"aliases":{},"teams":{"payments":["maya","tomasz","lena"],"platform":["ivo","sam"]},"knowledge_names":false},"alerts":{"pickup_p75_hours":6,"review_p75_hours":14,"cycle_p75_hours":72,"change_failure_rate":0.15,"channels":["webhook","issue"]},"automation":{"pr_comments":null,"rerun_flaky":null,"quarantine":null,"issues":true,"mention_owners":null,"assign_owners":null,"preflight_comments":null,"deps_comments":null,"label_stuck":null,"verdict_check":null,"verdict_strict":null,"review_requests":false,"size_labels":false,"docs_label":false},"digest":{"enabled":true,"day":"monday","hour":6,"channels":["issue"],"pulse":true},"agreements":{"review_within_hours":0,"merge_within_days":0,"max_pr_lines":0,"linked_issue":false,"review_before_merge":false},"connectors":{"jira":{"url":"","email":"","scope_jql":"","incident_jql":"","key_expires":"","write_back":false,"done_transition":""},"linear":{"teams":[],"incident_labels":["incident"],"key_expires":"","write_back":false,"done_state":""},"pagerduty":{"services":[],"urgencies":["high"],"key_expires":""},"incident_io":{"incident_types":[],"key_expires":""},"copilot":{"org":"","key_expires":""},"discourse":{"url":"","team":[],"groups":[]},"slack":{"channels":[],"team":[],"key_expires":""},"discord":{"channels":[],"team":[],"key_expires":""}},"deps":{"licenses":{"deny":[]},"policy":{"min_scorecard":null,"max_severity":null},"outside_lookups":true,"guarddog":false},"investment":{"labels":{}},"community":{"capacity":"","norms":""},"benchmarks":{"share":false,"name":false}},"notes":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"window_days":28,"heads_up":0.8,"min_n":10,"limits":{"pickup_p75_hours":5,"review_p75_hours":20,"cycle_p75_hours":72,"change_failure_rate":0.15},"names":{"pickup_p75_hours":"pickup time P75 (hours)","review_p75_hours":"review time P75 (hours)","cycle_p75_hours":"cycle time to merge P75 (hours)","change_failure_rate":"change failure rate"},"series":{"pickup_p75_hours":[["NOW-84d",3.12,14],["NOW-83d",3.48,14],["NOW-82d",3.27,14],["NOW-81d",3.63,14],["NOW-80d",3.43,14],["NOW-79d",3.22,14],["NOW-78d",3.58,14],["NOW-77d",3.08,14],["NOW-76d",2.89,14],["NOW-75d",3.22,14],["NOW-74d",3.03,14],["NOW-73d",2.84,14],["NOW-72d",3.17,14],["NOW-71d",2.98,14],["NOW-70d",3.52,14],["NOW-69d",3.33,14],["NOW-68d",3.13,14],["NOW-67d",3.47,14],["NOW-66d",3.28,14],["NOW-65d",3.08,14],["NOW-64d",3.43,14],["NOW-63d",2.93,14],["NOW-62d",2.75,14],["NOW-61d",3.07,14],["NOW-60d",2.89,14],["NOW-59d",3.2,14],["NOW-58d",3.02,14],["NOW-57d",2.84,14],["NOW-56d",3.05,14],["NOW-55d",2.88,14],["NOW-54d",2.7,14],["NOW-53d",3.01,14],["NOW-52d",2.83,14],["NOW-51d",2.66,14],["NOW-50d",2.97,14],["NOW-49d",2.89,14],["NOW-48d",3.2,14],["NOW-47d",3.02,14],["NOW-46d",2.84,14],["NOW-45d",3.16,14],["NOW-44d",2.98,14],["NOW-43d",2.8,14],["NOW-42d",2.8,14],["NOW-41d",2.64,14],["NOW-40d",2.48,14],["NOW-39d",2.76,14],["NOW-38d",2.6,14],["NOW-37d",2.88,14],["NOW-36d",2.72,14],["NOW-35d",2.46,14],["NOW-34d",2.74,14],["NOW-33d",2.58,14],["NOW-32d",2.42,14],["NOW-31d",2.7,14],["NOW-30d",2.54,14],["NOW-29d",2.38,14],["NOW-28d",2.56,14],["NOW-27d",2.41,14],["NOW-26d",2.67,14],["NOW-25d",2.52,14],["NOW-24d",2.37,14],["NOW-23d",2.63,14],["NOW-22d",2.48,14],["NOW-21d",2.24,14],["NOW-20d",2.49,14],["NOW-19d",2.35,14],["NOW-18d",2.2,14],["NOW-17d",2.45,14],["NOW-16d",2.31,14],["NOW-15d",2.56,14],["NOW-14d",2.32,14],["NOW-13d",2.18,14],["NOW-12d",2.42,14],["NOW-11d",2.28,14],["NOW-10d",2.14,14],["NOW-9d",2.39,14],["NOW-8d",2.25,14],["NOW-7d",2.02,14],["NOW-6d",2.25,14],["NOW-5d",2.12,14],["NOW-4d",2.35,14],["NOW-3d",2.22,14],["NOW-2d",2.08,14],["NOW-1d",2.2,14]],"review_p75_hours":[["NOW-84d",10.77,13],["NOW-83d",12.01,13],["NOW-82d",11.3,13],["NOW-81d",12.55,13],["NOW-80d",11.83,13],["NOW-79d",11.12,13],["NOW-78d",12.37,13],["NOW-77d",10.63,13],["NOW-76d",9.98,13],["NOW-75d",11.11,13],["NOW-74d",10.47,13],["NOW-73d",9.82,13],["NOW-72d",10.95,13],["NOW-71d",10.3,13],["NOW-70d",12.18,13],["NOW-69d",11.49,13],["NOW-68d",10.8,13],["NOW-67d",12,13],["NOW-66d",11.31,13],["NOW-65d",10.62,13],["NOW-64d",11.83,13],["NOW-63d",10.13,13],["NOW-62d",9.5,13],["NOW-61d",10.6,13],["NOW-60d",9.97,13],["NOW-59d",11.07,13],["NOW-58d",10.44,13],["NOW-57d",9.81,13],["NOW-56d",10.55,13],["NOW-55d",9.94,13],["NOW-54d",9.34,13],["NOW-53d",10.4,13],["NOW-52d",9.79,13],["NOW-51d",9.18,13],["NOW-50d",10.25,13],["NOW-49d",9.97,13],["NOW-48d",11.07,13],["NOW-47d",10.44,13],["NOW-46d",9.81,13],["NOW-45d",10.91,13],["NOW-44d",10.29,13],["NOW-43d",9.66,13],["NOW-42d",9.68,13],["NOW-41d",9.12,13],["NOW-40d",8.55,13],["NOW-39d",9.54,13],["NOW-38d",8.97,13],["NOW-37d",9.96,13],["NOW-36d",9.4,13],["NOW-35d",8.51,13],["NOW-34d",9.46,13],["NOW-33d",8.91,13],["NOW-32d",8.37,13],["NOW-31d",9.32,13],["NOW-30d",8.78,13],["NOW-29d",8.23,13],["NOW-28d",8.83,13],["NOW-27d",8.31,13],["NOW-26d",9.23,13],["NOW-25d",8.7,13],["NOW-24d",8.18,13],["NOW-23d",9.09,13],["NOW-22d",8.57,13],["NOW-21d",7.73,13],["NOW-20d",8.6,13],["NOW-19d",8.1,13],["NOW-18d",7.6,13],["NOW-17d",8.48,13],["NOW-16d",7.98,13],["NOW-15d",8.86,13],["NOW-14d",8.01,13],["NOW-13d",7.52,13],["NOW-12d",8.37,13],["NOW-11d",7.89,13],["NOW-10d",7.4,13],["NOW-9d",8.25,13],["NOW-8d",7.76,13],["NOW-7d",6.97,13],["NOW-6d",7.77,13],["NOW-5d",7.31,13],["NOW-4d",8.12,13],["NOW-3d",7.66,13],["NOW-2d",7.2,13],["NOW-1d",7.6,13]],"cycle_p75_hours":[["NOW-84d",15.02,13],["NOW-83d",16.75,13],["NOW-82d",15.76,13],["NOW-81d",17.5,13],["NOW-80d",16.51,13],["NOW-79d",15.51,13],["NOW-78d",17.25,13],["NOW-77d",14.82,13],["NOW-76d",13.92,13],["NOW-75d",15.5,13],["NOW-74d",14.6,13],["NOW-73d",13.69,13],["NOW-72d",15.28,13],["NOW-71d",14.37,13],["NOW-70d",16.98,13],["NOW-69d",16.02,13],["NOW-68d",15.06,13],["NOW-67d",16.74,13],["NOW-66d",15.78,13],["NOW-65d",14.82,13],["NOW-64d",16.5,13],["NOW-63d",14.13,13],["NOW-62d",13.25,13],["NOW-61d",14.78,13],["NOW-60d",13.91,13],["NOW-59d",15.44,13],["NOW-58d",14.56,13],["NOW-57d",13.69,13],["NOW-56d",14.71,13],["NOW-55d",13.87,13],["NOW-54d",13.02,13],["NOW-53d",14.5,13],["NOW-52d",13.66,13],["NOW-51d",12.81,13],["NOW-50d",14.29,13],["NOW-49d",13.91,13],["NOW-48d",15.44,13],["NOW-47d",14.56,13],["NOW-46d",13.69,13],["NOW-45d",15.22,13],["NOW-44d",14.35,13],["NOW-43d",13.47,13],["NOW-42d",13.5,13],["NOW-41d",12.71,13],["NOW-40d",11.93,13],["NOW-39d",13.3,13],["NOW-38d",12.52,13],["NOW-37d",13.9,13],["NOW-36d",13.11,13],["NOW-35d",11.86,13],["NOW-34d",13.19,13],["NOW-33d",12.43,13],["NOW-32d",11.67,13],["NOW-31d",13,13],["NOW-30d",12.24,13],["NOW-29d",11.48,13],["NOW-28d",12.32,13],["NOW-27d",11.59,13],["NOW-26d",12.87,13],["NOW-25d",12.14,13],["NOW-24d",11.41,13],["NOW-23d",12.68,13],["NOW-22d",11.95,13],["NOW-21d",10.78,13],["NOW-20d",12,13],["NOW-19d",11.3,13],["NOW-18d",10.6,13],["NOW-17d",11.83,13],["NOW-16d",11.13,13],["NOW-15d",12.35,13],["NOW-14d",11.17,13],["NOW-13d",10.49,13],["NOW-12d",11.67,13],["NOW-11d",11,13],["NOW-10d",10.33,13],["NOW-9d",11.5,13],["NOW-8d",10.83,13],["NOW-7d",9.72,13],["NOW-6d",10.84,13],["NOW-5d",10.2,13],["NOW-4d",11.32,13],["NOW-3d",10.68,13],["NOW-2d",10.04,13],["NOW-1d",10.6,13]],"change_failure_rate":[["NOW-84d",0.038,12],["NOW-83d",0.047,12],["NOW-82d",0.057,12],["NOW-81d",0.041,12],["NOW-80d",0.051,12],["NOW-79d",0.061,12],["NOW-78d",0.045,12],["NOW-77d",0.055,12],["NOW-76d",0.039,12],["NOW-75d",0.049,12],["NOW-74d",0.059,12],["NOW-73d",0.043,12],["NOW-72d",0.053,12],["NOW-71d",0.038,12],["NOW-70d",0.047,12],["NOW-69d",0.057,12],["NOW-68d",0.041,12],["NOW-67d",0.051,12],["NOW-66d",0.061,12],["NOW-65d",0.045,12],["NOW-64d",0.055,12],["NOW-63d",0.039,12],["NOW-62d",0.049,12],["NOW-61d",0.059,12],["NOW-60d",0.043,12],["NOW-59d",0.053,12],["NOW-58d",0.038,12],["NOW-57d",0.047,12],["NOW-56d",0.057,12],["NOW-55d",0.041,12],["NOW-54d",0.051,12],["NOW-53d",0.061,12],["NOW-52d",0.045,12],["NOW-51d",0.055,12],["NOW-50d",0.039,12],["NOW-49d",0.049,12],["NOW-48d",0.059,12],["NOW-47d",0.043,12],["NOW-46d",0.053,12],["NOW-45d",0.038,12],["NOW-44d",0.047,12],["NOW-43d",0.057,12],["NOW-42d",0.041,12],["NOW-41d",0.051,12],["NOW-40d",0.061,12],["NOW-39d",0.045,12],["NOW-38d",0.055,12],["NOW-37d",0.039,12],["NOW-36d",0.049,12],["NOW-35d",0.059,12],["NOW-34d",0.043,12],["NOW-33d",0.053,12],["NOW-32d",0.038,12],["NOW-31d",0.047,12],["NOW-30d",0.057,12],["NOW-29d",0.041,12],["NOW-28d",0.051,12],["NOW-27d",0.061,12],["NOW-26d",0.045,12],["NOW-25d",0.055,12],["NOW-24d",0.039,12],["NOW-23d",0.049,12],["NOW-22d",0.059,12],["NOW-21d",0.043,12],["NOW-20d",0.053,12],["NOW-19d",0.038,12],["NOW-18d",0.047,12],["NOW-17d",0.057,12],["NOW-16d",0.041,12],["NOW-15d",0.051,12],["NOW-14d",0.061,12],["NOW-13d",0.045,12],["NOW-12d",0.055,12],["NOW-11d",0.039,12],["NOW-10d",0.049,12],["NOW-9d",0.059,12],["NOW-8d",0.043,12],["NOW-7d",0.053,12],["NOW-6d",0.038,12],["NOW-5d",0.047,12],["NOW-4d",0.057,12],["NOW-3d",0.041,12],["NOW-2d",0.051,12],["NOW-1d",0.05,12]]}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schema":1,"repo":"acme/web-app","default_branch":"main","visibility":"private","modules":{"ci":{"updated":"NOW-58m","file":"data.json"},"flow":{"updated":"NOW-58m","file":"flow.json"},"delivery":{"updated":"NOW-58m","file":"delivery.json"},"insights":{"updated":"NOW-58m","file":"insights.json"},"community":{"updated":"NOW-58m","file":"community.json"},"portal":{"updated":"NOW-6h","file":"portal.json"},"alerts":{"updated":"NOW-58m","file":"alerts.json"},"deps":{"updated":"NOW-58m","file":"deps.json"},"supply":{"updated":"NOW-1d","file":"supply.json"},"vulns":{"updated":"NOW-1d","file":"vulns.json"},"security":{"updated":"NOW-2d","file":"security.json"}},"pages":[],"facts":{"ci_first_try":0.91,"ci_flaky":2,"ci_broken":0,"open_prs":22,"stale_prs":0,"pickup_p75_h":2.2,"review_p75_h":7.6,"cycle_p75_h":10.6,"deployments":267,"change_failure_rate":0.05,"newcomers_waiting":0,"findings":2,"first_review_median_s":3600,"community_score":82,"vulns_open":3,"vulns_serious":1,"decisions":2},"links":{"repo":"https://github.com/acme/web-app","workflow":"stackvitals.yml","actions":"https://github.com/acme/web-app/actions/workflows/stackvitals.yml","settings_file":"https://github.com/acme/web-app/blob/main/.github/stackvitals.toml","edit_settings":"https://github.com/acme/web-app/edit/main/.github/stackvitals.toml","new_issue":"https://github.com/acme/web-app/issues/new"}}
|