Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [
"circuit-breaker",
"distributed-systems",
"fault-tolerance",
"microservices",
"resilience"
],
"is_fork": false,
"size_kb": 6319,
"has_wiki": true,
"homepage": "http://bolshakov.github.io/stoplight/",
"languages": {
"Lua": 7886,
"HTML": 14519,
"Ruby": 451154,
"Shell": 473,
"Gherkin": 28800,
"Dockerfile": 921
},
"pushed_at": "2026-07-24T06:53:03Z",
"created_at": "2014-08-04T21:36:54Z",
"owner_type": "User",
"updated_at": "2026-07-25T12:31:10Z",
"description": ":traffic_light: Traffic control for code.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "develop",
"license_spdx_raw": "MIT",
"primary_language": "Ruby",
"significant_languages": [
"Ruby"
]
},
"owner": {
"blog": null,
"name": "Tëma Bolshakov",
"type": "User",
"login": "bolshakov",
"company": null,
"location": "Spain",
"followers": 49,
"avatar_url": "https://avatars.githubusercontent.com/u/991265?v=4",
"created_at": "2011-08-19T15:15:15Z",
"is_verified": null,
"public_repos": 138,
"account_age_days": 5454
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v5.8.2",
"kind": "patch",
"published_at": "2026-04-20T11:13:42Z"
},
{
"tag": "v5.8.0",
"kind": "minor",
"published_at": "2026-03-09T17:44:41Z"
},
{
"tag": "v5.7.0",
"kind": "minor",
"published_at": "2025-12-06T09:48:39Z"
},
{
"tag": "v5.6.0",
"kind": "minor",
"published_at": "2025-11-10T11:00:11Z"
},
{
"tag": "v5.5.0",
"kind": "minor",
"published_at": "2025-11-05T11:00:14Z"
},
{
"tag": "v5.4.0",
"kind": "minor",
"published_at": "2025-10-23T10:32:05Z"
},
{
"tag": "v5.3.8",
"kind": "patch",
"published_at": "2025-09-18T13:19:24Z"
},
{
"tag": "v5.3.5",
"kind": "patch",
"published_at": "2025-09-08T20:56:23Z"
},
{
"tag": "v5.3.1",
"kind": "patch",
"published_at": "2025-08-03T15:21:21Z"
},
{
"tag": "v5.3.0",
"kind": "minor",
"published_at": "2025-08-03T13:46:52Z"
},
{
"tag": "v5.2.0",
"kind": "minor",
"published_at": "2025-07-11T11:49:53Z"
},
{
"tag": "v5.1.0",
"kind": "minor",
"published_at": "2025-06-27T13:01:33Z"
},
{
"tag": "v5.0.3",
"kind": "patch",
"published_at": "2025-06-26T15:01:26Z"
},
{
"tag": "v5.0.2",
"kind": "patch",
"published_at": "2025-06-22T08:44:44Z"
},
{
"tag": "v5.0.1",
"kind": "patch",
"published_at": "2025-06-20T13:34:39Z"
},
{
"tag": "v4.1.1",
"kind": "patch",
"published_at": "2025-02-08T11:16:55Z"
},
{
"tag": "v3.0.2",
"kind": "patch",
"published_at": "2023-08-28T12:27:22Z"
},
{
"tag": "v4.1.0",
"kind": "minor",
"published_at": "2023-08-20T13:37:11Z"
},
{
"tag": "v4.0.0",
"kind": "major",
"published_at": "2023-08-18T22:25:09Z"
},
{
"tag": "v3.0.1",
"kind": "patch",
"published_at": "2022-12-03T15:15:04Z"
},
{
"tag": "v3.0.0",
"kind": "major",
"published_at": "2022-02-23T15:18:11Z"
},
{
"tag": "v2.2.0",
"kind": "minor",
"published_at": "2019-10-24T15:18:00Z"
},
{
"tag": "v2.1.3",
"kind": "patch",
"published_at": "2018-04-01T13:39:13Z"
},
{
"tag": "v2.1.2",
"kind": "patch",
"published_at": "2017-10-23T22:19:15Z"
},
{
"tag": "v2.1.1",
"kind": "patch",
"published_at": "2017-02-07T15:27:36Z"
},
{
"tag": "v2.1.0",
"kind": "minor",
"published_at": "2016-08-04T13:07:41Z"
},
{
"tag": "v2.0.0",
"kind": "major",
"published_at": "2016-04-26T20:48:10Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2016-03-01T17:31:00Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2016-01-28T17:21:14Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2015-09-11T16:33:57Z"
},
{
"tag": "v1.1.1",
"kind": "patch",
"published_at": "2015-07-16T14:48:32Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2015-07-04T14:20:28Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2015-07-15T22:18:58Z"
},
{
"tag": "v0.5.2",
"kind": "patch",
"published_at": "2015-07-15T22:19:07Z"
},
{
"tag": "v0.5.1",
"kind": "patch",
"published_at": "2015-07-15T22:19:26Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2015-07-15T22:19:37Z"
},
{
"tag": "v0.4.1",
"kind": "patch",
"published_at": "2015-07-15T22:19:47Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2015-07-15T22:19:57Z"
},
{
"tag": "v0.3.1",
"kind": "patch",
"published_at": "2015-07-15T22:20:06Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2015-07-15T22:20:22Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2015-07-15T22:20:32Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2015-07-15T22:20:45Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2015-07-15T22:20:56Z"
}
],
"recent_commits": [
{
"oid": "8c0e00cbb36fa6eabb58de812cf44a6c048da22c",
"body": "Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.320.0 to 1.321.0.\n- [Release notes](https://github.com/ruby/setup-ruby/releases)\n- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)\n- [Commits](https://github.com/ruby/setup-ruby/compare/a30dfa457ad68707b8b910ac\n[…]\n dependency-name: ruby/setup-ruby\n dependency-version: 1.321.0\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps): bump ruby/setup-ruby from 1.320.0 to 1.321.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-23T07:50:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "57ce03bb1b8163cb3012836f93f85867aba973eb",
"body": null,
"is_bot": false,
"headline": "Add eql? and hash to Domain::Failure for value equality (#840)",
"author_name": "Victor Okeugo",
"author_login": "johnsonsirv",
"committed_at": "2026-07-23T07:49:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "23953cb08524e81942abb180858f353945ac3deb",
"body": "…0aaeb8c",
"is_bot": false,
"headline": "Merge pull request #839 from bolshakov/dependabot/bundler/bundler-f0d…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-22T21:58:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47e9c998b491020cc602719de54076478125fd1d",
"body": "…ates\n\nBumps the bundler group with 2 updates in the / directory: [loofah](https://github.com/flavorjones/loofah) and [rails-html-sanitizer](https://github.com/rails/rails-html-sanitizer).\n\n\nUpdates `loofah` from 2.25.1 to 2.25.2\n- [Release notes](https://github.com/flavorjones/loofah/releases)\n- [C\n[…]\nency-group: bundler\n- dependency-name: rails-html-sanitizer\n dependency-version: 1.7.1\n dependency-type: indirect\n dependency-group: bundler\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump the bundler group across 1 directory with 2 upd…",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-22T20:16:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6e7b84dc7761ba8130133b3daa5e72de9e5bbc02",
"body": "GreenRunStrategy#execute and YellowRunStrategy#execute wrapped the\nstrategy's own post-success bookkeeping inside the same begin/rescue\nregion as the user's guarded code.call. A bookkeeping failure on a\nsuccessful call was therefore indistinguishable from a failure of the\ncaller's code: it was passe\n[…]\nthe guarded\nregion as well. The recovery lock is still released by the existing\nensure in with_recovery_lock.\n\nFixes #766.\n\nCo-authored-by: snowyukitty <270071858+snowyukitty@users.noreply.github.com>",
"is_bot": false,
"headline": "fix: scope the rescue to the guarded call in run strategies (#836)",
"author_name": "snowy_smile",
"author_login": "snowyukitty",
"committed_at": "2026-07-22T16:32:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f8b138d1e206d70ef04df2e6a4c84828ad50ef63",
"body": "…#837)",
"is_bot": false,
"headline": "Validate ErrorRate#check_compatibility against invalid min_requests (…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-22T16:25:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "15e925bd9d32cf70c0d3edb174e58ae4768fd58f",
"body": "Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.319.0 to 1.320.0.\n- [Release notes](https://github.com/ruby/setup-ruby/releases)\n- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)\n- [Commits](https://github.com/ruby/setup-ruby/compare/003a5c4d8d6321bd302e38f6\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump ruby/setup-ruby from 1.319.0 to 1.320.0 (#838)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-22T16:24:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "88995a02a08195171783a35c36a5a64d9669662e",
"body": null,
"is_bot": false,
"headline": "Validate ErrorRate#check_compatibility against invalid min_requests",
"author_name": "Victor Johnson",
"author_login": "johnsonsirv",
"committed_at": "2026-07-21T22:42:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50169e35b1f08e82d48efac837a6275fc23a5337",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0 to 7.0.1.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb9\n[…]\nirect:production\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 (#835)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-21T11:09:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ca3f4b14117a9dc1a9364be631005e462ecc99e6",
"body": "Signed-off-by: Sai Asish Y <say.apm35@gmail.com>",
"is_bot": false,
"headline": "Reject telemetry subscribe filters that match no event class (#834)",
"author_name": "Sai Asish Y",
"author_login": "SAY-5",
"committed_at": "2026-07-21T11:08:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bee9a8f29e6e1af88c27082e94690ea2004840b4",
"body": null,
"is_bot": true,
"headline": "chore(deps-dev): bump yard from 0.9.44 to 0.9.45 (#830)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T07:17:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8027612fa34b468ec168112753199750ba68f5f9",
"body": "…56.0",
"is_bot": false,
"headline": "Merge pull request #831 from bolshakov/dependabot/bundler/standard-1.…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-20T07:17:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5c1a661375f786839976b73fb31c65f0f0bdf6e",
"body": "….0.2",
"is_bot": false,
"headline": "Merge pull request #832 from bolshakov/dependabot/bundler/simplecov-1…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-20T07:17:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "250be70b81cffac8d1e7998de6db9a233a48af97",
"body": "…ruby-ext-1.3.8",
"is_bot": false,
"headline": "Merge pull request #833 from bolshakov/dependabot/bundler/concurrent-…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-20T07:16:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee79b276f60346dd9550de9c4aa517f4718fa30e",
"body": "…ruby-1.3.8",
"is_bot": false,
"headline": "Merge pull request #829 from bolshakov/dependabot/bundler/concurrent-…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-20T07:16:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9cf420ffdd38d95cd6475dc46e7326773bd19fdb",
"body": "Bumps [concurrent-ruby-ext](http://www.concurrent-ruby.com) from 1.3.7 to 1.3.8.\n\n---\nupdated-dependencies:\n- dependency-name: concurrent-ruby-ext\n dependency-version: 1.3.8\n dependency-type: direct:development\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump concurrent-ruby-ext from 1.3.7 to 1.3.8",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T06:53:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25ae050d97aed1ab5e2b4bf7473b552026ced7cb",
"body": "Bumps [simplecov](https://github.com/simplecov-ruby/simplecov) from 1.0.0 to 1.0.2.\n- [Release notes](https://github.com/simplecov-ruby/simplecov/releases)\n- [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/simplecov-ruby/simplecov/compar\n[…]\ncies:\n- dependency-name: simplecov\n dependency-version: 1.0.2\n dependency-type: direct:development\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump simplecov from 1.0.0 to 1.0.2",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T06:53:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "53cea25c6b983afa81bdc7eb1c10de21486a0abe",
"body": "Bumps [standard](https://github.com/standardrb/standard) from 1.55.0 to 1.56.0.\n- [Release notes](https://github.com/standardrb/standard/releases)\n- [Changelog](https://github.com/standardrb/standard/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/standardrb/standard/compare/v1.55.0...v1.56.0\n[…]\ncies:\n- dependency-name: standard\n dependency-version: 1.56.0\n dependency-type: direct:development\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump standard from 1.55.0 to 1.56.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T06:53:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "97f1bf4411aee337e483754b5d8e029523f469f3",
"body": "Bumps [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby) from 1.3.7 to 1.3.8.\n- [Release notes](https://github.com/ruby-concurrency/concurrent-ruby/releases)\n- [Changelog](https://github.com/ruby-concurrency/concurrent-ruby/blob/master/CHANGELOG.md)\n- [Commits](https://github.com\n[…]\n\n- dependency-name: concurrent-ruby\n dependency-version: 1.3.8\n dependency-type: direct:production\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps): bump concurrent-ruby from 1.3.7 to 1.3.8",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T06:52:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7ed81ccf4e2b0aec780df0b0c7817bbd3ae1ecbb",
"body": null,
"is_bot": false,
"headline": "fix-786: add eql? method in consecutive errors and error rate",
"author_name": "Mausam Pun",
"author_login": "mausamp",
"committed_at": "2026-07-19T08:51:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d7b837598316efc6fc3ddea048311f8889539d38",
"body": null,
"is_bot": false,
"headline": "Admin's light repository uses real config",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-19T07:57:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "790bc01a382827d23909265b444f603425e8d473",
"body": null,
"is_bot": false,
"headline": "Persist light config to registry (#826)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-17T15:16:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d53f80f55682a1e48993c98021c7839a0e9c862d",
"body": "* fix: bucket alignment at hour boundaries\n\n* Add bucket_start_for in window_metrics.rbs",
"is_bot": false,
"headline": "fix: bucket alignment at hour boundaries (#825)",
"author_name": "Anssi Kuokkanen",
"author_login": "ankuanku1",
"committed_at": "2026-07-17T15:15:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b30578180c321dabcbddba0305c8840d754c3d3",
"body": "…up lights (#739)\n\nCalling `Stoplight(\"name\", ...)` at every call site works well for a handful of lights. As\nan app grows, repeating the same settings everywhere makes them easy to drift out of sync,\nand there's no single place listing what lights exist.\n\n- Adds `Stoplight.register(name, ...)` to d\n[…]\n.register`/`Stoplight(name, ...)` re-validates\n the configuration digest on every call, while `Stoplight.light` is a plain lookup. It's \n ~9-10x more iterations/sec compared to `Stoplight()` calls..",
"is_bot": false,
"headline": "Add Stoplight.register / Stoplight.light for reusable, faster-looked-…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-17T10:26:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b4f8cbeb526677a8944ebbd304eb2f4bb9178ef0",
"body": "Digest-based config-consistency checks and the planned admin registry\nboth need a stable string identity for each matcher, which only named\nclasses/modules provide. Procs, anonymous classes, and instances used\nto pass through silently and could produce colliding or unstable\nidentities.\n\nDomain::Matc\n[…]\nutes on\nevery Stoplight()/system.light() call regardless of whether the light\nis already registered, so invalid matchers can't slip through on a\ncache hit.\n\nBreaking change documented in UPGRADING.md.",
"is_bot": false,
"headline": "Validate tracked_errors/skipped_errors matchers at definition time",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-16T21:35:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "546de17a5bbadf5e1217a182e6b928ff26db4bce",
"body": null,
"is_bot": false,
"headline": "feat: allow per-call error tracking overrides (#758)",
"author_name": "onice",
"author_login": "oiahoon",
"committed_at": "2026-07-16T17:28:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5818dbbe4cf7741c508e91947c6edfd2c9334757",
"body": "…ests (#810)",
"is_bot": false,
"headline": "fix: validate telemetry subscribe filter before mutating state, add t…",
"author_name": "Anssi Kuokkanen",
"author_login": "ankuanku1",
"committed_at": "2026-07-16T10:46:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cefcc39db58677310a4506884851443f5377b4cf",
"body": null,
"is_bot": false,
"headline": "LockContol usage improvements (#809)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-16T07:38:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52808b1d4ac5110fc1092734a46b9d272cbd75a6",
"body": "…hts (#808)",
"is_bot": false,
"headline": "Admin Doshboard uses Domain::LockControl instead of instantiating lig…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-16T07:25:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "796efcbd8c5649972dbb79f6675d456758d63bd4",
"body": "Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.318.0 to 1.319.0.\n- [Release notes](https://github.com/ruby/setup-ruby/releases)\n- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)\n- [Commits](https://github.com/ruby/setup-ruby/compare/8e41b362d2589a22a44c1cfa\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump ruby/setup-ruby from 1.318.0 to 1.319.0 (#807)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-16T07:08:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3a49b3051b44483f960cd95f0d23f480627e930d",
"body": "… (#806)",
"is_bot": false,
"headline": "Reorder ConsecutiveErrors#check_compatibility type check before range…",
"author_name": "Victor Okeugo",
"author_login": "johnsonsirv",
"committed_at": "2026-07-16T05:54:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f6e2514d7594a58caad7a928eaccf7bafeeb8ef",
"body": "…nge (#805)",
"is_bot": false,
"headline": "Reorder ConsecutiveSuccesses#check_compatibility type check before ra…",
"author_name": "Victor Okeugo",
"author_login": "johnsonsirv",
"committed_at": "2026-07-16T05:54:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51080f69e2deed555369284282ddc9b29d51b244",
"body": null,
"is_bot": false,
"headline": "Guard ErrorRate#check_compatibility against non-numeric threshold (#804)",
"author_name": "Victor Okeugo",
"author_login": "johnsonsirv",
"committed_at": "2026-07-16T05:52:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae869cc7078c06c2c6311f7113f0f7384ee53c8d",
"body": null,
"is_bot": false,
"headline": "Introduce Domain::LockControl (#803)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-15T22:06:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39aef60719c8d3cea998e74ecdadc098469b2567",
"body": null,
"is_bot": false,
"headline": "Remove unused config reader from GreenRunStrategy (#802)",
"author_name": "Victor Okeugo",
"author_login": "johnsonsirv",
"committed_at": "2026-07-15T21:58:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a289bcb32e963d9d5ca14a1020765a69995244d8",
"body": null,
"is_bot": false,
"headline": "Fix tracker RBS to drop nonexistent Base superclass (#801)",
"author_name": "Victor Okeugo",
"author_login": "johnsonsirv",
"committed_at": "2026-07-15T19:48:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f877f457c5e23abd6486b6930d773d1dc464255f",
"body": null,
"is_bot": false,
"headline": "Use Domain::LightInfo in Generic#notify instead of Domain::Config (#792)",
"author_name": "Ruslan Gafurov",
"author_login": "shkrt",
"committed_at": "2026-07-15T13:43:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6937a83a53d8dda64bba2038b33d1c261f8ea5df",
"body": null,
"is_bot": true,
"headline": "chore(deps): bump ruby/setup-ruby from 1.317.0 to 1.318.0 (#791)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-15T07:14:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6d3743eaf70410d677865f19387cc91be8c599b",
"body": null,
"is_bot": false,
"headline": "Fix Generic notifier doc example to drop nonexistent superclass (#790)",
"author_name": "Victor Okeugo",
"author_login": "johnsonsirv",
"committed_at": "2026-07-15T07:13:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d9fd67e9647684a866d1f77fb5602dc0256bf042",
"body": "* Add unit test for Stoplight::Infrastructure::Redis::Storage::SystemKeySpace\n* Require Digest dependency explicitly in SystemKeySpace",
"is_bot": false,
"headline": "Require Digest dependency explicitly in SystemKeySpace (#789)",
"author_name": "Ruslan Gafurov",
"author_login": "shkrt",
"committed_at": "2026-07-14T15:49:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6223430b1e5ae14ec9b08f75d472b9f6f494e6a",
"body": "Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.316.0 to 1.317.0.\n- [Release notes](https://github.com/ruby/setup-ruby/releases)\n- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)\n- [Commits](https://github.com/ruby/setup-ruby/compare/d45b1a4e94b71acab930e56e\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump ruby/setup-ruby from 1.316.0 to 1.317.0 (#765)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-14T11:21:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "87afe6971b4d103d2db6224bb1cb60ec3536355d",
"body": "* MetricsStore#record_success/failure returns Domain::MetricsSnapshot\n* Don't call metrics_snapshot after record_failure",
"is_bot": false,
"headline": "Make record_failure return the resulting metrics snapshot (#764)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-13T20:47:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e28ded5a0c6afe82fb61ca1b3f78709e0b23779",
"body": "… token (#763)",
"is_bot": false,
"headline": "Trigger ProQuo on pull_request_target so fork PRs get a write-capable…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-13T13:37:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b87c86cd00b1f1947455ffa36d4674f9442835fe",
"body": "* chore(deps-dev): bump simplecov from 0.22.0 to 1.0.0\n\nBumps [simplecov](https://github.com/simplecov-ruby/simplecov) from 0.22.0 to 1.0.0.\n- [Release notes](https://github.com/simplecov-ruby/simplecov/releases)\n- [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md)\n- [Co\n[…]\nom>\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Tёma Bolshakov <tema.bolshakov@workato.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump simplecov from 0.22.0 to 1.0.0 (#759)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-13T11:44:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b4a0b46eed5b7b99026de6fdba9e88696685f9d3",
"body": null,
"is_bot": false,
"headline": "fix: deduplicate recovery probe notifications (#749)",
"author_name": "Polly Labs",
"author_login": "pollychen-lab",
"committed_at": "2026-07-13T11:38:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1396a43a3ddbc4b1e6d80da1d8470ddc175f4aab",
"body": null,
"is_bot": false,
"headline": "Implement --@include derective for lua scripts (#760)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-13T11:34:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6acc9351af173f776178840c1a26898163c106e",
"body": null,
"is_bot": false,
"headline": "Coverails adds a lot of instability into CI runs, drop it (#762)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-13T11:26:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26abcc8604a2dbf8ff209ba96f5cb1f6bf0919ee",
"body": null,
"is_bot": false,
"headline": "Wire RunRecorder into Green/Yellow/Red run strategies (#741)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-12T12:40:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8076e87b3df833a61e554aad1072e56e8a8dfa7d",
"body": "Emitter#emit had no error boundary of its own: a failure to build or\npublish an event would propagate straight to the caller, indistinguishable\nfrom a genuine application error and outside the error_notifier channel the\nbus already uses for a raising subscriber handler. Route emit's own\nfailures thr\n[…]\ntor that builds and emits a RunCompleted event for one light\ncolor, so callers of Emitter don't each hand-assemble the same six-field\nevent shape. RunRecorder is not wired into the run strategies yet.",
"is_bot": false,
"headline": "Harden Emitter#emit and add Emitter#subscribed?/RunRecorder (#742)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-12T10:07:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "90535b391b8dae1af48b4d0ff1fcdfa8f3c64b30",
"body": "…g (#740)\n\nYellowRunStrategy called red_run_strategy.execute when it lost the\nrecovery-lock race, even though the light's actual color is still\nyellow at that point - RedRunStrategy has no way to know that and\nalways reports itself as red. Delegating one strategy to another\nbecause they happen to raise the same error was the wrong move;\ninline the (fallback-or-raise-RedLight) behavior directly instead",
"is_bot": false,
"headline": "Inline red-light behavior into YellowRunStrategy instead of delegatin…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T22:15:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7cb341b4484ece50651e1d9a62a50af7f43eb861",
"body": "It already receives config, which carries cool_off_time - passing\nboth meant the same value threaded through under two names.",
"is_bot": false,
"headline": "Drop redundant cool_off_time param from YellowRunStrategy",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T22:05:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0acb63f222c3d6a8143e6ed5e169c7ee67ac4a8d",
"body": "YellowRunStrategy called red_run_strategy.execute when it lost the\nrecovery-lock race, even though the light's actual color is still\nyellow at that point - RedRunStrategy has no way to know that and\nalways reports itself as red. Delegating one strategy to another\nbecause they happen to raise the same error was the wrong move;\ninline the (fallback-or-raise-RedLight) behavior directly instead,\nnow parameterized by cool_off_time rather than a borrowed collaborator.",
"is_bot": false,
"headline": "Inline red-light logic into YellowRunStrategy instead of delegating",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T21:10:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b2549847d070164ae1291e1606a20998211ddb3",
"body": "…call\n\nThe \"recovery lock is not acquired\" spec asserted that YellowRunStrategy\ndelegates to red_run_strategy.execute - an implementation detail. Assert\nthe observable behavior instead (raises RedLight or returns the fallback,\nnever yields), using a real RedRunStrategy collaborator.",
"is_bot": false,
"headline": "Test yellow run's red-light behavior instead of the red_run_strategy …",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T21:08:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b9dccb8b79db685a5d42cc4a144ebd79bbe5abb",
"body": "* Optimization: in UnboundedMetrics use ivars instead of attr accessor\n* Optimization: WindowMetrics method call vs ivar\n* Optimization: SlidingWindow dethod call vs ivar",
"is_bot": false,
"headline": "Optimization - memory stores (#737)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T10:59:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "993c1a0411099f8b8e5252925f3628405ba8c009",
"body": "…#735)",
"is_bot": false,
"headline": "Fix race condition in UnboundediWindow when accessing last_error_at (…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T08:57:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d02d07369591896768783711ebf303ee7a44406",
"body": "…ured",
"is_bot": false,
"headline": "Merge pull request #734 from bolshakov/feature/optimize-ensure-config…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T07:39:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4e182cf31b2b65620e2d8595fb4d051b720dea5",
"body": null,
"is_bot": false,
"headline": "Optimization: Stoplight.ensure_configured",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-11T07:16:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a21e249498d876814dc2195ed9284f18c05e9b3",
"body": null,
"is_bot": false,
"headline": "Speed up System#light with less block executions under lock (#733)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T22:26:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16c36ac8be64e2732944a09525f60ac52d8a88e4",
"body": "The clock port documents monotonic_time as returning milliseconds and the\nsibling telemetry field is named duration_ms, but the implementation returned\nProcess.clock_gettime's default :float_second - seconds, not milliseconds.\nPass :float_millisecond so the value matches the documented contract.",
"is_bot": false,
"headline": "Return monotonic time in milliseconds from SystemClock (#732)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T15:12:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6bda2f63f9b1041b8eb7fdd4475c99cc3ea2816",
"body": "System now builds a Domain::Telemetry publisher and threads it through\nLightFactory (which constructs a per-light Emitter) and System::Storage.\nClock gains monotonic_time, needed for measuring event durations.\n\nNothing consumes the emitter yet.",
"is_bot": false,
"headline": "Wire telemetry emitter into light and system factories (#726)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T14:43:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51fc8989da405b19cc71bd25831a7c8e37dc2bc4",
"body": null,
"is_bot": false,
"headline": "Get rid of light/system factory split (#731)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T14:15:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0b9841df76e8fbbbbacb948d8f858f139bb94ec",
"body": null,
"is_bot": false,
"headline": "Implement Telemetry Subscriber/Publisher (#724)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T10:31:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "365f3e22c2fe9006341d222181f78f9f11736435",
"body": null,
"is_bot": false,
"headline": "Define telemetry events (#723)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T10:26:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ada7a06c07721bac37a24ff43607415d51bdc43c",
"body": null,
"is_bot": false,
"headline": "Remove legacy DataStore layer (#719)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T10:20:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c599d10db322d2467c522449707bf1250598677c",
"body": null,
"is_bot": false,
"headline": "Telemetry types proposal (#721)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-10T10:19:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "19f39ef8f4e86bfca632ed024fa8e6a345a81a66",
"body": "…712)",
"is_bot": false,
"headline": "Systems (Part 1) - wire System with injected failover and registry (#…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-09T06:38:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c13fc32a23e69bfa70df715fc4aed129b9c7ece9",
"body": null,
"is_bot": false,
"headline": "Change pattern from .md to .rbs in .proquo.yml",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-08T21:04:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "033b23ca32cbc6b92babf9d90d70bf83f2fbc511",
"body": "…#730)\n\nBumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.19.4 to 2.20.0.\n- [Release notes](https://github.com/step-security/harden-runner/releases)\n- [Commits](https://github.com/step-security/harden-runner/compare/9af89fc71515a100421586dfdb3dc9c984fbf411...\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump step-security/harden-runner from 2.19.4 to 2.20.0 (…",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-08T20:59:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "82baac521fbb2e3d0a951b60347ebfb4fa6dbb65",
"body": null,
"is_bot": false,
"headline": "Update proquo action to use main branch (#729)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-06T07:50:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e5f367d32a81363707c63387b72436c10c797e2",
"body": "Bumps [docker/login-action](https://github.com/docker/login-action) from 4.3.0 to 4.4.0.\n- [Release notes](https://github.com/docker/login-action/releases)\n- [Commits](https://github.com/docker/login-action/compare/c99871dec2022cc055c062a10cc1a1310835ceb4...af1e73f918a031802d376d3c8bbc3fe56130a9b0)\n\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump docker/login-action from 4.3.0 to 4.4.0 (#728)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-06T07:38:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "31f3ef3fe3e5b6e228af58f6819a75e6ad75cb46",
"body": null,
"is_bot": false,
"headline": "Adjust proquo weights (#727)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-06T07:37:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f05502c35842521ba31065b667a6583d15fe548a",
"body": "Bumps [docker/login-action](https://github.com/docker/login-action) from 4.2.0 to 4.3.0.\n- [Release notes](https://github.com/docker/login-action/releases)\n- [Commits](https://github.com/docker/login-action/compare/650006c6eb7dba73a995cc03b0b2d7f5ca915bee...c99871dec2022cc055c062a10cc1a1310835ceb4)\n\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump docker/login-action from 4.2.0 to 4.3.0 (#717)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-05T21:42:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5da1c60b09e81b71c575697b5bbe8a844c4ace4f",
"body": "Bumps [standard](https://github.com/standardrb/standard) from 1.54.0 to 1.55.0.\n- [Release notes](https://github.com/standardrb/standard/releases)\n- [Changelog](https://github.com/standardrb/standard/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/standardrb/standard/compare/v1.54.0...v1.55.0\n[…]\nrect:development\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump standard from 1.54.0 to 1.55.0 (#700)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-05T21:42:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "db3bdce047a51b273a5b1e244d5fc768f2c07325",
"body": null,
"is_bot": false,
"headline": "Update proquo.yml (#725)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-05T18:18:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "91572aa1b2c63d9f0f6e462dadde6195c3c9bdce",
"body": null,
"is_bot": false,
"headline": "Add PR review price tag (#722)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-05T12:49:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b24c8bc8e5f70725c63c96b872d7e7392b5fd7c0",
"body": "Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 7.2.0 to 7.3.0.\n- [Release notes](https://github.com/docker/build-push-action/releases)\n- [Commits](https://github.com/docker/build-push-action/compare/f9f3042f7e2789586610d6e8b85c8f03e5195baf...53b7df96c91f9c12dcc8a0\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump docker/build-push-action from 7.2.0 to 7.3.0 (#715)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-04T10:17:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d2e9be564cc5038477fcd6212fcd619d1463edc0",
"body": "Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 4.1.0 to 4.2.0.\n- [Release notes](https://github.com/docker/setup-buildx-action/releases)\n- [Commits](https://github.com/docker/setup-buildx-action/compare/d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5...bb05f3f5519dd8\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump docker/setup-buildx-action from 4.1.0 to 4.2.0 (#716)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-04T10:17:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b1b406c11218278feb443aaed01ba64c5766574c",
"body": "Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.314.0 to 1.316.0.\n- [Release notes](https://github.com/ruby/setup-ruby/releases)\n- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)\n- [Commits](https://github.com/ruby/setup-ruby/compare/9eb537ca036ebaed86729dcb\n[…]\nirect:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump ruby/setup-ruby from 1.314.0 to 1.316.0 (#718)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-04T10:17:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "72ec29b9564bb708d428bff82c61da00e49d98bf",
"body": null,
"is_bot": false,
"headline": "We all go agentic! (#713)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-07-03T13:18:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "030eb30db987cd65983f2b455d1b7dc54987ce0f",
"body": "Bumps [ruby-prof](https://github.com/ruby-prof/ruby-prof) from 2.0.4 to 2.0.5.\n- [Changelog](https://github.com/ruby-prof/ruby-prof/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/ruby-prof/ruby-prof/compare/2.0.4...2.0.5)\n\n---\nupdated-dependencies:\n- dependency-name: ruby-prof\n dependency\n[…]\nrect:development\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump ruby-prof from 2.0.4 to 2.0.5 (#709)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-29T13:01:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1b47a225d13dd25a552aeadf7ae589ebe99214bc",
"body": "Bumps [cucumber](https://github.com/cucumber/cucumber-ruby) from 11.0.0 to 11.1.1.\n- [Release notes](https://github.com/cucumber/cucumber-ruby/releases)\n- [Changelog](https://github.com/cucumber/cucumber-ruby/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/cucumber/cucumber-ruby/compare/v11.0\n[…]\nrect:development\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump cucumber from 11.0.0 to 11.1.1 (#710)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-29T13:01:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d17021d311515db76e8dd52cd1c26cd349cedce6",
"body": null,
"is_bot": true,
"headline": "Bump the bundler group across 1 directory with 2 updates (#707)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-27T08:22:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b411d728e363392ce7efd0d27750adc54f65620",
"body": "…gems/release-gem-1.4.0",
"is_bot": false,
"headline": "Merge pull request #701 from bolshakov/dependabot/github_actions/ruby…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-06-27T07:52:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "212e1ebcb1e6e7c1c346c87236753d9dd2e2b541",
"body": "…ons/checkout-7.0.0",
"is_bot": false,
"headline": "Merge pull request #703 from bolshakov/dependabot/github_actions/acti…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-06-27T07:52:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "539786a7b3ff1508db5b784194946348073c7868",
"body": "Bumps [concurrent-ruby-ext](http://www.concurrent-ruby.com) from 1.3.6 to 1.3.7.\n\n---\nupdated-dependencies:\n- dependency-name: concurrent-ruby-ext\n dependency-version: 1.3.7\n dependency-type: direct:development\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump concurrent-ruby-ext from 1.3.6 to 1.3.7",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-27T07:51:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "744e37c8fff57ab8a9149aaa5db09d4e42d1717b",
"body": null,
"is_bot": true,
"headline": "Bump ruby/setup-ruby from 1.310.0 to 1.314.0 (#705)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-27T07:51:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1e3f896f10be102e69109782bef04f3f94f83ea8",
"body": "…c4ad60d",
"is_bot": false,
"headline": "Merge pull request #706 from bolshakov/dependabot/bundler/bundler-f3d…",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-06-27T07:51:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ed339dd37fb8d469c7cbae2ffaaa38f558850f4",
"body": null,
"is_bot": false,
"headline": "Separate light and system settings (#696)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-06-27T07:50:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c8836546aea534a04c87cd8ac04961ac386ecc5",
"body": "Bumps the bundler group with 2 updates in the / directory: [puma](https://github.com/puma/puma) and [nokogiri](https://github.com/sparklemotion/nokogiri).\n\n\nUpdates `puma` from 8.0.1 to 8.0.2\n- [Release notes](https://github.com/puma/puma/releases)\n- [Changelog](https://github.com/puma/puma/blob/mai\n[…]\nnt\n dependency-group: bundler\n- dependency-name: nokogiri\n dependency-version: 1.19.4\n dependency-type: indirect\n dependency-group: bundler\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump the bundler group across 1 directory with 2 updates",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-23T12:43:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "698d5d06ab11f095e23d4416e871bacee92553b3",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 7.0.0.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67\n[…]\n- dependency-name: actions/checkout\n dependency-version: 7.0.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump actions/checkout from 6.0.2 to 7.0.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-19T06:53:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "570fa9ca2a85e07bce52209df7274b116b6d0268",
"body": "Bumps [rubygems/release-gem](https://github.com/rubygems/release-gem) from 1.2.0 to 1.4.0.\n- [Release notes](https://github.com/rubygems/release-gem/releases)\n- [Commits](https://github.com/rubygems/release-gem/compare/6317d8d1f7e28c24d28f6eff169ea854948bd9f7...052cc82692552de3ef2b81fd670e41d13cba80\n[…]\npendency-name: rubygems/release-gem\n dependency-version: 1.4.0\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump rubygems/release-gem from 1.2.0 to 1.4.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-15T06:54:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a9f5522d946fd000b62e40ce576bc1e6f2a1d924",
"body": "* Remove Light#with and #with_* methods\n\n* Replace LightFactory usas with LightBuilder\n\n* Rename Builder to Factory\n\n* Get rid of _LightFactory interface",
"is_bot": false,
"headline": "Unify Factory with Builder (#689)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-06-05T10:08:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5290890e47578ae195d535d0f157582c8f7dae65",
"body": null,
"is_bot": false,
"headline": "Remove #with and #with_* methods (#688)",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-06-01T10:37:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "583d68f0166952cd0a02d603eb1d94fe76b913bb",
"body": "Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 4.0.0 to 4.1.0.\n- [Release notes](https://github.com/docker/setup-buildx-action/releases)\n- [Commits](https://github.com/docker/setup-buildx-action/compare/4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd...d7f5e7f509e45c\n[…]\ncy-name: docker/setup-buildx-action\n dependency-version: 4.1.0\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump docker/setup-buildx-action from 4.0.0 to 4.1.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-05-28T06:33:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9db0fe283d5fa156bd9794a9ee8e7ae99bcd067b",
"body": null,
"is_bot": false,
"headline": "Speed up system light creation",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-05-27T16:32:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6ed82bfa2e2aba8afc85a2d39198e350cfccc23",
"body": null,
"is_bot": false,
"headline": "Add system light creation benchmark",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-05-27T16:32:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2cbb2529c198b9afb9614d52f8c16b0b7eb61db8",
"body": null,
"is_bot": false,
"headline": "Separate Legacy, System and Light dsl, introduce LightDSLs",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-05-27T16:32:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ef0015046ff9010333cbae04389f31cb293ee7e",
"body": null,
"is_bot": false,
"headline": "Use different configuration DSL for System and System lights",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-05-27T16:32:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "705eecb500e23c443e43a0766672d7a31cd04aa1",
"body": null,
"is_bot": false,
"headline": "Cover System with tests",
"author_name": "Tëma Bolshakov",
"author_login": "bolshakov",
"committed_at": "2026-05-27T16:32:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6932fe261e3880cee2b3bba3405e7ff7f055312b",
"body": "* chore: Add favicon",
"is_bot": false,
"headline": "chore: Set favicon for Stoplight Admin Panel (#685)",
"author_name": "George Asfour",
"author_login": "Lokideos",
"committed_at": "2026-05-27T08:49:46Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 43,
"commits_last_year": 407,
"latest_release_at": "2026-04-20T11:13:42Z",
"latest_release_tag": "v5.8.2",
"releases_from_tags": false,
"days_since_last_push": 2,
"active_weeks_last_year": 48,
"days_since_latest_release": 96,
"mean_days_between_releases": 28.9
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 85,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "stoplight",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "rubygems",
"matches_repo": false,
"registry_url": "https://rubygems.org/gems/stoplight",
"is_deprecated": false,
"latest_version": "5.8.2",
"repository_url": "https://github.com/orgsync/stoplight",
"versions_count": 44,
"total_downloads": 11477098,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2014-08-12T15:51:34.602000Z",
"latest_published_at": "2026-04-20T11:11:18.059000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 96
}
]
},
"popularity": {
"forks": 67,
"stars": 623,
"watchers": 11,
"fork_history": {
"days": [
{
"date": "2015-02-27",
"count": 1
},
{
"date": "2015-06-30",
"count": 1
},
{
"date": "2015-07-10",
"count": 1
},
{
"date": "2015-09-01",
"count": 1
},
{
"date": "2015-11-02",
"count": 1
},
{
"date": "2016-01-10",
"count": 1
},
{
"date": "2016-01-17",
"count": 1
},
{
"date": "2016-01-25",
"count": 1
},
{
"date": "2016-01-26",
"count": 1
},
{
"date": "2016-03-07",
"count": 1
},
{
"date": "2016-03-22",
"count": 1
},
{
"date": "2016-04-28",
"count": 1
},
{
"date": "2016-08-03",
"count": 1
},
{
"date": "2017-01-13",
"count": 1
},
{
"date": "2017-02-14",
"count": 1
},
{
"date": "2017-09-05",
"count": 1
},
{
"date": "2017-10-04",
"count": 1
},
{
"date": "2018-06-05",
"count": 1
},
{
"date": "2018-06-21",
"count": 1
},
{
"date": "2018-08-23",
"count": 1
},
{
"date": "2018-09-08",
"count": 1
},
{
"date": "2018-09-13",
"count": 1
},
{
"date": "2018-12-11",
"count": 1
},
{
"date": "2019-01-03",
"count": 1
},
{
"date": "2019-02-19",
"count": 1
},
{
"date": "2019-08-14",
"count": 1
},
{
"date": "2019-09-23",
"count": 1
},
{
"date": "2020-07-28",
"count": 1
},
{
"date": "2020-08-31",
"count": 1
},
{
"date": "2021-11-12",
"count": 1
},
{
"date": "2022-01-25",
"count": 1
},
{
"date": "2022-05-12",
"count": 1
},
{
"date": "2022-11-12",
"count": 1
},
{
"date": "2022-12-14",
"count": 1
},
{
"date": "2023-08-18",
"count": 1
},
{
"date": "2023-09-07",
"count": 1
},
{
"date": "2024-12-30",
"count": 1
},
{
"date": "2025-02-07",
"count": 1
},
{
"date": "2025-08-03",
"count": 1
},
{
"date": "2025-08-22",
"count": 2
},
{
"date": "2025-10-07",
"count": 1
},
{
"date": "2025-10-18",
"count": 2
},
{
"date": "2025-10-31",
"count": 1
},
{
"date": "2025-11-09",
"count": 1
},
{
"date": "2025-12-30",
"count": 1
},
{
"date": "2026-02-01",
"count": 1
},
{
"date": "2026-02-25",
"count": 1
},
{
"date": "2026-03-20",
"count": 1
},
{
"date": "2026-06-27",
"count": 1
},
{
"date": "2026-07-12",
"count": 2
},
{
"date": "2026-07-13",
"count": 2
},
{
"date": "2026-07-14",
"count": 4
},
{
"date": "2026-07-16",
"count": 2
},
{
"date": "2026-07-20",
"count": 1
},
{
"date": "2026-07-21",
"count": 2
},
{
"date": "2026-07-22",
"count": 1
},
{
"date": "2026-07-25",
"count": 1
}
],
"complete": true,
"collected": 66,
"total_forks": 67
},
"star_history": null,
"open_issues_and_prs": 39
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 135804,
"source_files_sampled": 248,
"oversized_source_files": 2,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 3804
},
"dependencies": {
"manifests": [
"Gemfile"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 115,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 2,
"direct_affected_count": 0
},
"ecosystems": [
"rubygems"
],
"dependencies": [
{
"name": "redis",
"manifest": "Gemfile",
"ecosystem": "rubygems",
"version_constraint": null
},
{
"name": "sinatra",
"manifest": "Gemfile",
"ecosystem": "rubygems",
"version_constraint": null
},
{
"name": "sinatra-contrib",
"manifest": "Gemfile",
"ecosystem": "rubygems",
"version_constraint": null
},
{
"name": "puma",
"manifest": "Gemfile",
"ecosystem": "rubygems",
"version_constraint": null
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "puma",
"direct": true,
"version": "8.0.2",
"ecosystem": "rubygems"
},
{
"name": "redis",
"direct": true,
"version": "5.4.1",
"ecosystem": "rubygems"
},
{
"name": "sinatra",
"direct": true,
"version": "4.2.1",
"ecosystem": "rubygems"
},
{
"name": "sinatra-contrib",
"direct": true,
"version": "4.2.1",
"ecosystem": "rubygems"
},
{
"name": "actionpack",
"direct": false,
"version": "8.0.4.1",
"ecosystem": "rubygems"
},
{
"name": "actionview",
"direct": false,
"version": "8.0.4.1",
"ecosystem": "rubygems"
},
{
"name": "activesupport",
"direct": false,
"version": "8.0.4.1",
"ecosystem": "rubygems"
},
{
"name": "ammeter",
"direct": false,
"version": "1.1.7",
"ecosystem": "rubygems"
},
{
"name": "ast",
"direct": false,
"version": "2.4.3",
"ecosystem": "rubygems"
},
{
"name": "base64",
"direct": false,
"version": "0.3.0",
"ecosystem": "rubygems"
},
{
"name": "benchmark",
"direct": false,
"version": "0.5.0",
"ecosystem": "rubygems"
},
{
"name": "benchmark-ips",
"direct": false,
"version": "2.15.1",
"ecosystem": "rubygems"
},
{
"name": "bigdecimal",
"direct": false,
"version": "4.1.2",
"ecosystem": "rubygems"
},
{
"name": "builder",
"direct": false,
"version": "3.3.0",
"ecosystem": "rubygems"
},
{
"name": "concurrent-ruby",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "concurrent-ruby",
"direct": false,
"version": "1.3.8",
"ecosystem": "rubygems"
},
{
"name": "concurrent-ruby-ext",
"direct": false,
"version": "1.3.8",
"ecosystem": "rubygems"
},
{
"name": "connection_pool",
"direct": false,
"version": "3.0.2",
"ecosystem": "rubygems"
},
{
"name": "crass",
"direct": false,
"version": "1.0.7",
"ecosystem": "rubygems"
},
{
"name": "csv",
"direct": false,
"version": "3.3.5",
"ecosystem": "rubygems"
},
{
"name": "cucumber",
"direct": false,
"version": "11.1.1",
"ecosystem": "rubygems"
},
{
"name": "cucumber-ci-environment",
"direct": false,
"version": "11.0.0",
"ecosystem": "rubygems"
},
{
"name": "cucumber-core",
"direct": false,
"version": "16.2.0",
"ecosystem": "rubygems"
},
{
"name": "cucumber-cucumber-expressions",
"direct": false,
"version": "19.0.1",
"ecosystem": "rubygems"
},
{
"name": "cucumber-gherkin",
"direct": false,
"version": "39.1.0",
"ecosystem": "rubygems"
},
{
"name": "cucumber-html-formatter",
"direct": false,
"version": "23.1.0",
"ecosystem": "rubygems"
},
{
"name": "cucumber-messages",
"direct": false,
"version": "32.3.1",
"ecosystem": "rubygems"
},
{
"name": "cucumber-tag-expressions",
"direct": false,
"version": "8.1.0",
"ecosystem": "rubygems"
},
{
"name": "database_cleaner-core",
"direct": false,
"version": "2.0.1",
"ecosystem": "rubygems"
},
{
"name": "database_cleaner-redis",
"direct": false,
"version": "2.0.0",
"ecosystem": "rubygems"
},
{
"name": "date",
"direct": false,
"version": "3.5.1",
"ecosystem": "rubygems"
},
{
"name": "debug",
"direct": false,
"version": "1.11.1",
"ecosystem": "rubygems"
},
{
"name": "diff-lcs",
"direct": false,
"version": "1.6.2",
"ecosystem": "rubygems"
},
{
"name": "drb",
"direct": false,
"version": "2.2.3",
"ecosystem": "rubygems"
},
{
"name": "erb",
"direct": false,
"version": "6.0.1.1",
"ecosystem": "rubygems"
},
{
"name": "erubi",
"direct": false,
"version": "1.13.1",
"ecosystem": "rubygems"
},
{
"name": "ffi",
"direct": false,
"version": "1.17.4",
"ecosystem": "rubygems"
},
{
"name": "fileutils",
"direct": false,
"version": "1.8.0",
"ecosystem": "rubygems"
},
{
"name": "i18n",
"direct": false,
"version": "1.14.8",
"ecosystem": "rubygems"
},
{
"name": "io-console",
"direct": false,
"version": "0.8.2",
"ecosystem": "rubygems"
},
{
"name": "irb",
"direct": false,
"version": "1.16.0",
"ecosystem": "rubygems"
},
{
"name": "json",
"direct": false,
"version": "2.21.1",
"ecosystem": "rubygems"
},
{
"name": "language_server-protocol",
"direct": false,
"version": "3.17.0.6",
"ecosystem": "rubygems"
},
{
"name": "lint_roller",
"direct": false,
"version": "1.1.0",
"ecosystem": "rubygems"
},
{
"name": "listen",
"direct": false,
"version": "3.10.0",
"ecosystem": "rubygems"
},
{
"name": "logger",
"direct": false,
"version": "1.7.0",
"ecosystem": "rubygems"
},
{
"name": "loofah",
"direct": false,
"version": "2.25.2",
"ecosystem": "rubygems"
},
{
"name": "memoist3",
"direct": false,
"version": "1.0.0",
"ecosystem": "rubygems"
},
{
"name": "mini_mime",
"direct": false,
"version": "1.1.5",
"ecosystem": "rubygems"
},
{
"name": "mini_portile2",
"direct": false,
"version": "2.8.9",
"ecosystem": "rubygems"
},
{
"name": "minitest",
"direct": false,
"version": "5.27.0",
"ecosystem": "rubygems"
},
{
"name": "multi_json",
"direct": false,
"version": "1.17.0",
"ecosystem": "rubygems"
},
{
"name": "multi_test",
"direct": false,
"version": "1.1.0",
"ecosystem": "rubygems"
},
{
"name": "mustermann",
"direct": false,
"version": "3.0.4",
"ecosystem": "rubygems"
},
{
"name": "nio4r",
"direct": false,
"version": "2.7.5",
"ecosystem": "rubygems"
},
{
"name": "nokogiri",
"direct": false,
"version": "1.19.4",
"ecosystem": "rubygems"
},
{
"name": "ostruct",
"direct": false,
"version": "0.6.3",
"ecosystem": "rubygems"
},
{
"name": "parallel",
"direct": false,
"version": "1.28.0",
"ecosystem": "rubygems"
},
{
"name": "parser",
"direct": false,
"version": "3.3.12.0",
"ecosystem": "rubygems"
},
{
"name": "pp",
"direct": false,
"version": "0.6.3",
"ecosystem": "rubygems"
},
{
"name": "prettyprint",
"direct": false,
"version": "0.2.0",
"ecosystem": "rubygems"
},
{
"name": "prism",
"direct": false,
"version": "1.9.0",
"ecosystem": "rubygems"
},
{
"name": "psych",
"direct": false,
"version": "5.3.1",
"ecosystem": "rubygems"
},
{
"name": "racc",
"direct": false,
"version": "1.8.1",
"ecosystem": "rubygems"
},
{
"name": "rack",
"direct": false,
"version": "3.2.6",
"ecosystem": "rubygems"
},
{
"name": "rack-protection",
"direct": false,
"version": "4.2.1",
"ecosystem": "rubygems"
},
{
"name": "rack-session",
"direct": false,
"version": "2.1.2",
"ecosystem": "rubygems"
},
{
"name": "rack-test",
"direct": false,
"version": "2.2.0",
"ecosystem": "rubygems"
},
{
"name": "rackup",
"direct": false,
"version": "2.2.1",
"ecosystem": "rubygems"
},
{
"name": "rails-dom-testing",
"direct": false,
"version": "2.3.0",
"ecosystem": "rubygems"
},
{
"name": "rails-html-sanitizer",
"direct": false,
"version": "1.7.1",
"ecosystem": "rubygems"
},
{
"name": "railties",
"direct": false,
"version": "8.0.4.1",
"ecosystem": "rubygems"
},
{
"name": "rainbow",
"direct": false,
"version": "3.1.1",
"ecosystem": "rubygems"
},
{
"name": "rake",
"direct": false,
"version": "13.4.2",
"ecosystem": "rubygems"
},
{
"name": "rantly",
"direct": false,
"version": "2.0.0",
"ecosystem": "rubygems"
},
{
"name": "rb-fsevent",
"direct": false,
"version": "0.11.2",
"ecosystem": "rubygems"
},
{
"name": "rb-inotify",
"direct": false,
"version": "0.11.1",
"ecosystem": "rubygems"
},
{
"name": "rbs",
"direct": false,
"version": "4.0.2",
"ecosystem": "rubygems"
},
{
"name": "rdoc",
"direct": false,
"version": "7.0.1",
"ecosystem": "rubygems"
},
{
"name": "redis-client",
"direct": false,
"version": "0.25.1",
"ecosystem": "rubygems"
},
{
"name": "regexp_parser",
"direct": false,
"version": "2.12.0",
"ecosystem": "rubygems"
},
{
"name": "reline",
"direct": false,
"version": "0.6.3",
"ecosystem": "rubygems"
},
{
"name": "rspec",
"direct": false,
"version": "3.13.2",
"ecosystem": "rubygems"
},
{
"name": "rspec-core",
"direct": false,
"version": "3.13.6",
"ecosystem": "rubygems"
},
{
"name": "rspec-expectations",
"direct": false,
"version": "3.13.5",
"ecosystem": "rubygems"
},
{
"name": "rspec-mocks",
"direct": false,
"version": "3.13.6",
"ecosystem": "rubygems"
},
{
"name": "rspec-rails",
"direct": false,
"version": "8.0.0",
"ecosystem": "rubygems"
},
{
"name": "rspec-support",
"direct": false,
"version": "3.13.6",
"ecosystem": "rubygems"
},
{
"name": "rubocop",
"direct": false,
"version": "1.88.2",
"ecosystem": "rubygems"
},
{
"name": "rubocop-ast",
"direct": false,
"version": "1.50.0",
"ecosystem": "rubygems"
},
{
"name": "rubocop-performance",
"direct": false,
"version": "1.26.1",
"ecosystem": "rubygems"
},
{
"name": "ruby-prof",
"direct": false,
"version": "2.0.5",
"ecosystem": "rubygems"
},
{
"name": "ruby-progressbar",
"direct": false,
"version": "1.13.0",
"ecosystem": "rubygems"
},
{
"name": "ruby2_keywords",
"direct": false,
"version": "0.0.5",
"ecosystem": "rubygems"
},
{
"name": "securerandom",
"direct": false,
"version": "0.4.1",
"ecosystem": "rubygems"
},
{
"name": "simplecov",
"direct": false,
"version": "1.0.2",
"ecosystem": "rubygems"
},
{
"name": "simplecov-lcov",
"direct": false,
"version": "0.9.0",
"ecosystem": "rubygems"
},
{
"name": "standard",
"direct": false,
"version": "1.56.0",
"ecosystem": "rubygems"
},
{
"name": "standard-custom",
"direct": false,
"version": "1.0.2",
"ecosystem": "rubygems"
},
{
"name": "standard-performance",
"direct": false,
"version": "1.9.0",
"ecosystem": "rubygems"
},
{
"name": "steep",
"direct": false,
"version": "2.0.0",
"ecosystem": "rubygems"
},
{
"name": "stringio",
"direct": false,
"version": "3.2.0",
"ecosystem": "rubygems"
},
{
"name": "strscan",
"direct": false,
"version": "3.1.8",
"ecosystem": "rubygems"
},
{
"name": "sys-uname",
"direct": false,
"version": "1.5.1",
"ecosystem": "rubygems"
},
{
"name": "terminal-table",
"direct": false,
"version": "4.0.0",
"ecosystem": "rubygems"
},
{
"name": "thor",
"direct": false,
"version": "1.4.0",
"ecosystem": "rubygems"
},
{
"name": "tilt",
"direct": false,
"version": "2.6.1",
"ecosystem": "rubygems"
},
{
"name": "timecop",
"direct": false,
"version": "0.9.11",
"ecosystem": "rubygems"
},
{
"name": "tsort",
"direct": false,
"version": "0.2.0",
"ecosystem": "rubygems"
},
{
"name": "tzinfo",
"direct": false,
"version": "2.0.6",
"ecosystem": "rubygems"
},
{
"name": "unicode-display_width",
"direct": false,
"version": "3.2.0",
"ecosystem": "rubygems"
},
{
"name": "unicode-emoji",
"direct": false,
"version": "4.2.0",
"ecosystem": "rubygems"
},
{
"name": "uri",
"direct": false,
"version": "1.1.1",
"ecosystem": "rubygems"
},
{
"name": "useragent",
"direct": false,
"version": "0.16.11",
"ecosystem": "rubygems"
},
{
"name": "yard",
"direct": false,
"version": "0.9.45",
"ecosystem": "rubygems"
},
{
"name": "zeitwerk",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "zeitwerk",
"direct": false,
"version": "2.8.2",
"ecosystem": "rubygems"
}
],
"collected": true,
"truncated": false,
"total_count": 117,
"direct_count": 4,
"indirect_count": 113
}
},
"maintainership": {
"issues": {
"open_prs": 4,
"merged_prs": 546,
"open_issues": 35,
"closed_ratio": 0.795,
"closed_issues": 136,
"closed_unmerged_prs": 114
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "tfausak",
"commits": 431,
"avatar_url": "https://avatars.githubusercontent.com/u/408753?v=4"
},
{
"type": "User",
"login": "bolshakov",
"commits": 298,
"avatar_url": "https://avatars.githubusercontent.com/u/991265?v=4"
},
{
"type": "User",
"login": "Lokideos",
"commits": 34,
"avatar_url": "https://avatars.githubusercontent.com/u/22339735?v=4"
},
{
"type": "User",
"login": "camdez",
"commits": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/141447?v=4"
},
{
"type": "User",
"login": "johnsonsirv",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/25527349?v=4"
},
{
"type": "User",
"login": "mrdziuban",
"commits": 5,
"avatar_url": "https://avatars.githubusercontent.com/u/4718399?v=4"
},
{
"type": "User",
"login": "chaadow",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/1371733?v=4"
},
{
"type": "User",
"login": "AaronLasseigne",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/297205?v=4"
},
{
"type": "User",
"login": "AndreasWurm",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/115934?v=4"
},
{
"type": "User",
"login": "duffuniverse",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/6830119?v=4"
}
],
"contributors_sampled": 39,
"top_contributor_share": 0.519
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"dependency-review.yml",
"proquo.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"Gemfile.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 7,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "24 out of 24 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 6,
"reason": "Found 9/14 approved changesets -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 7 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 7,
"reason": "dependency not pinned by hash detected -- score normalized to 7",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 7,
"reason": "SAST tool is not run on all commits -- score normalized to 7",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "8c0e00cbb36fa6eabb58de812cf44a6c048da22c",
"ran_at": "2026-07-26T08:05:06Z",
"aggregate_score": 8.4,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-26T03:34:34Z",
"oldest_open_prs": [
{
"number": 708,
"created_at": "2026-06-28T13:27:23Z",
"last_comment_at": "2026-06-29T13:01:11Z",
"last_comment_author": "bolshakov"
},
{
"number": 842,
"created_at": "2026-07-23T15:06:26Z",
"last_comment_at": "2026-07-23T15:06:36Z",
"last_comment_author": "github-actions"
},
{
"number": 843,
"created_at": "2026-07-23T18:45:24Z",
"last_comment_at": "2026-07-24T11:20:34Z",
"last_comment_author": "bolshakov"
},
{
"number": 844,
"created_at": "2026-07-24T06:53:04Z",
"last_comment_at": "2026-07-24T06:53:16Z",
"last_comment_author": "github-actions"
}
],
"last_merged_pr_at": "2026-07-23T07:50:29Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 291,
"created_at": "2025-04-11T13:28:29Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 367,
"created_at": "2025-06-25T10:33:33Z",
"last_comment_at": "2025-10-21T08:53:36Z",
"last_comment_author": "bolshakov"
},
{
"number": 466,
"created_at": "2025-10-10T11:58:55Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 467,
"created_at": "2025-10-10T15:17:29Z",
"last_comment_at": "2026-07-11T13:12:41Z",
"last_comment_author": "bolshakov"
},
{
"number": 472,
"created_at": "2025-10-12T14:08:48Z",
"last_comment_at": "2025-10-12T14:08:58Z",
"last_comment_author": "bolshakov"
},
{
"number": 494,
"created_at": "2025-10-29T12:39:45Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 543,
"created_at": "2025-12-08T21:48:32Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 702,
"created_at": "2026-06-18T23:50:17Z",
"last_comment_at": "2026-07-18T14:01:21Z",
"last_comment_author": "bolshakov"
},
{
"number": 743,
"created_at": "2026-07-12T15:32:06Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 744,
"created_at": "2026-07-12T15:36:22Z",
"last_comment_at": "2026-07-24T16:39:25Z",
"last_comment_author": "bolshakov"
},
{
"number": 745,
"created_at": "2026-07-12T15:39:43Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 746,
"created_at": "2026-07-12T15:45:06Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 750,
"created_at": "2026-07-12T20:08:45Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 752,
"created_at": "2026-07-12T20:19:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 753,
"created_at": "2026-07-12T20:28:21Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 754,
"created_at": "2026-07-12T20:32:50Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 773,
"created_at": "2026-07-14T11:20:05Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 774,
"created_at": "2026-07-14T11:20:07Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 775,
"created_at": "2026-07-14T11:20:08Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 777,
"created_at": "2026-07-14T11:20:11Z",
"last_comment_at": "2026-07-24T15:02:37Z",
"last_comment_author": "bolshakov"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/bolshakov/stoplight",
"host": "github.com",
"name": "stoplight",
"owner": "bolshakov"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"security": 87,
"vitality": 94,
"community": 68,
"governance": 59,
"engineering": 81
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 94,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 97,
"inputs": {
"commits_last_year": 407,
"human_commit_share": 0.71,
"days_since_last_push": 2,
"active_weeks_last_year": 48
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "48/52 weeks with commits",
"points": 33.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 48
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "407 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 407
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 90,
"inputs": {
"releases_count": 43,
"latest_release_tag": "v5.8.2",
"releases_from_tags": false,
"days_since_latest_release": 96,
"mean_days_between_releases": 28.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "43 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 43
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 96 days ago",
"points": 27,
"status": "partial",
"details": [
{
"code": "release_recency",
"params": {
"days": 96
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~28.9 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 28.9
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 3,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 3 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 3
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 68,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"forks": 67,
"stars": 623,
"watchers": 11,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "623 stars",
"points": 45.3,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 623
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "67 forks",
"points": 15.2,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 67
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "11 watchers",
"points": 5.6,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 11
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 59,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 43,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 39,
"top_contributor_share": 0.519
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 52% of commits",
"points": 10.8,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 52
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "39 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 39
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 7 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 78,
"inputs": {
"merged_prs": 546,
"open_issues": 35,
"closed_issues": 136,
"issue_closed_ratio": 0.795,
"closed_unmerged_prs": 114
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "80% of issues closed",
"points": 37.2,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 80
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "546/660 decided PRs merged",
"points": 31.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 546,
"decided": 660
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 9/14 approved changesets -- score normalized to 6",
"points": 9,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 59,
"inputs": {
"followers": 49,
"owner_type": "User",
"is_verified": null,
"owner_login": "bolshakov",
"public_repos": 138,
"account_age_days": 5454
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "49 followers of bolshakov",
"points": 12.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 49,
"login": "bolshakov"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "138 public repos, account ~14 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 138
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 81,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "4 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 4
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "24 out of 24 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"circuit-breaker",
"distributed-systems",
"fault-tolerance",
"microservices",
"resilience"
],
"has_wiki": true,
"homepage": "http://bolshakov.github.io/stoplight/",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "http://bolshakov.github.io/stoplight/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "5 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 5
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "excellent",
"name": "Security",
"value": 87,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "good",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 84,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 8.4
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection is not maximal on development and all release branches",
"points": 5.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "24 out of 24 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 9/14 approved changesets -- score normalized to 6",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 7 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 7",
"points": 3.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 7",
"points": 3.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 115 resolved dependencies against OSV; 2 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 115
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 2
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 115,
"unassessed_packages": 2,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 115,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 15
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 62,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.761,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 3804
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "54 of 71 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 54,
"sampled": 71
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 47,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"Gemfile.lock"
],
"has_dockerfile": true,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.29
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "29 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 29,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 7",
"points": 7,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "Ruby",
"largest_source_bytes": 135804,
"source_files_sampled": 248,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Ruby without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Ruby"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/248 source files over 60KB",
"points": 54.6,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 248,
"oversized": 2
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"rubygems package 'stoplight' points at a different repository (https://github.com/orgsync/stoplight); excluded from ecosystem scoring"
],
"report_type": "repository",
"generated_at": "2026-07-26T08:05:32.264569Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/bolshakov/stoplight.svg",
"full_name": "bolshakov/stoplight",
"license_state": "standard",
"license_spdx": "MIT"
}