{"id":12205524,"name":"concurrent-ruby","ecosystem":"rubygems","description":"Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.\nInspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency patterns.\n","homepage":"http://www.concurrent-ruby.com","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/ruby-concurrency/concurrent-ruby","keywords_array":[],"namespace":null,"versions_count":138,"first_release_published_at":"2013-07-23T12:19:11.080Z","latest_release_published_at":"2026-07-19T13:35:54.097Z","latest_release_number":"1.3.8","last_synced_at":"2026-09-29T22:01:21.344Z","created_at":"2025-10-07T02:11:43.880Z","updated_at":"2026-09-29T22:01:21.344Z","registry_url":"https://gem.coop/gems/concurrent-ruby","install_command":"gem install concurrent-ruby -s https://gem.coop","documentation_url":"http://www.rubydoc.info/gems/concurrent-ruby/","metadata":{"funding":null},"repo_metadata":{"id":9666903,"uuid":"11607598","full_name":"ruby-concurrency/concurrent-ruby","owner":"ruby-concurrency","description":"Modern concurrency tools including agents, futures, promises, thread pools, supervisors, and more. Inspired by Erlang, Clojure, Scala, Go, Java, JavaScript, and classic concurrency patterns.","archived":false,"fork":false,"pushed_at":"2026-08-31T15:45:26.000Z","size":11189,"stargazers_count":5834,"open_issues_count":55,"forks_count":420,"subscribers_count":114,"default_branch":"master","last_synced_at":"2026-09-29T14:12:20.079Z","etag":null,"topics":["concurrency","ruby"],"latest_commit_sha":null,"homepage":"https://ruby-concurrency.github.io/concurrent-ruby/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruby-concurrency.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":"support/generate_docs.rb","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2013-07-23T12:19:51.000Z","updated_at":"2026-09-28T01:37:09.000Z","dependencies_parsed_at":"2026-09-29T12:51:07.383Z","dependency_job_id":null,"html_url":"https://github.com/ruby-concurrency/concurrent-ruby","commit_stats":{"total_commits":2602,"total_committers":166,"mean_commits":"15.674698795180722","dds":0.5876249039200615,"last_synced_commit":"957cf7d09aae59db7026e607ca42768aad644ebc"},"previous_names":["jdantonio/concurrent-ruby"],"tags_count":100,"template":false,"template_full_name":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-concurrency","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/sbom","scorecard":{"id":641179,"data":{"date":"2025-08-11","repo":{"name":"github.com/ruby-concurrency/concurrent-ruby","commit":"52f0ee417e28210d8848dd532ed332744791538c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Maintained","score":0,"reason":"1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/docs.yml:8","Warn: no topLevel permission defined: .github/workflows/experimental.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":4,"reason":"Found 12/27 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/docs.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/docs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/docs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/docs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/experimental.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/experimental.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/experimental.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/ruby-concurrency/concurrent-ruby/experimental.yml/master?enable=pin","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 17 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T10:48:36.744Z","repository_id":9666903,"created_at":"2025-08-21T10:48:36.745Z","updated_at":"2025-08-21T10:48:36.745Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":342085742,"owners_count":37849113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-09-29T02:00:06.972Z","response_time":187,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"ruby-concurrency","name":"ruby-concurrency","uuid":"5462766","kind":"organization","description":"","email":"concurrent-ruby@googlegroups.com","website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/5462766?v=4","repositories_count":5,"last_synced_at":"2026-09-24T21:28:06.616Z","metadata":{"has_sponsors_listing":false,"funding":null},"html_url":"https://github.com/ruby-concurrency","funding_links":[],"total_stars":6112,"followers":14,"following":0,"created_at":"2022-11-02T16:17:27.806Z","updated_at":"2026-09-24T21:28:06.630Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-concurrency","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-concurrency/repositories"},"tags":[{"name":"v1.3.8","sha":"0b88d5ff75f69b3740c8f0868e76f833cb2fd45d","kind":"commit","published_at":"2026-07-19T13:22:08.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.8","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.8","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.8","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.8/manifests"},{"name":"v1.3.7","sha":"4c8fc28ab6bb9bd8258a4c0c2fa6d35ebe77b3cb","kind":"commit","published_at":"2026-06-16T21:14:33.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.7","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.7","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.7","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.7/manifests"},{"name":"v1.3.6","sha":"dba776697b17b564f5cd9c6f2597adbc9b698724","kind":"commit","published_at":"2025-12-13T12:12:59.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.6","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.6/manifests"},{"name":"v1.3.5","sha":"33abefb6823a07699f4b8665abba9297ef5d2ccd","kind":"commit","published_at":"2025-01-15T21:13:41.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.5","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.5/manifests"},{"name":"edge-v0.7.2","sha":"33abefb6823a07699f4b8665abba9297ef5d2ccd","kind":"commit","published_at":"2025-01-15T21:13:41.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.7.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.7.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.7.2/manifests"},{"name":"v1.3.4","sha":"044020f44b36930b863b930f3ee8fa1e9f750469","kind":"commit","published_at":"2024-08-10T11:37:57.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.4","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.4/manifests"},{"name":"v1.3.3","sha":"b16af1e977c20e47bbab287ae92f2d397c7694b0","kind":"commit","published_at":"2024-06-09T14:33:25.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.3/manifests"},{"name":"v1.3.2","sha":"d1d29ac07ee48648f672e22a92d9bdc0160375c1","kind":"commit","published_at":"2024-06-07T20:05:42.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.2/manifests"},{"name":"edge-v0.7.1","sha":"22f337cca5564d83c3d0e618b02d5b07bad5aee4","kind":"commit","published_at":"2024-06-07T19:35:15.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.7.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.7.1/manifests"},{"name":"v1.3.1","sha":"b5e090b9da95c63cd006721ae6a7e594ec78512b","kind":"commit","published_at":"2024-05-29T14:32:05.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.1/manifests"},{"name":"v1.3.1.pre","sha":"695be8a176fd3fd877a79e3ad8ad74243a024f0c","kind":"commit","published_at":"2024-05-29T07:05:49.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.1.pre","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.1.pre","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.1.pre","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.1.pre","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.1.pre/manifests"},{"name":"v1.3.0","sha":"bda72aeffc1a7663d33014aa887dd3908caa92dd","kind":"commit","published_at":"2024-05-28T20:20:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.3.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.3.0/manifests"},{"name":"v1.2.3","sha":"da6320d22518501abef917f3ac19e9ee9496bffc","kind":"commit","published_at":"2024-01-16T09:51:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.2.3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.2.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.2.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.3/manifests"},{"name":"v1.2.2","sha":"f2985bd06812f183fc1382939f7844ffdb24ba50","kind":"commit","published_at":"2023-02-24T18:48:02.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.2.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.2.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.2/manifests"},{"name":"v1.2.1","sha":"8cccba90b308ad84aa2ab98455b46268185e31ea","kind":"commit","published_at":"2023-02-24T17:53:19.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.2.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.1/manifests"},{"name":"edge-v0.7.0","sha":"e12c465295f2e42e53eeae63067d5bf0fa48f61b","kind":"commit","published_at":"2023-01-23T18:47:57.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.7.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.7.0/manifests"},{"name":"v1.2.0","sha":"cdbc6db6c7530eb64ecfb7417fb7a449c7ec2fd6","kind":"commit","published_at":"2023-01-23T18:13:15.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.2.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.2.0/manifests"},{"name":"v1.1.10","sha":"c97452b194245a337daf0c651867242de9bff9c9","kind":"commit","published_at":"2022-03-21T23:22:30.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.10","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.10","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.10","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.10/manifests"},{"name":"v1.1.9","sha":"52c08fca13cc3811673ea2f6fdb244a0e42e0ebe","kind":"commit","published_at":"2021-06-05T12:18:52.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.9","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.9","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.9","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.9/manifests"},{"name":"v1.1.8","sha":"b47d29412b05a4a502fad66a2ac3699013178e89","kind":"commit","published_at":"2021-01-20T09:54:04.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.8","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.8","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.8","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.8/manifests"},{"name":"v1.1.7","sha":"c1114a0c6891d9634f019f1f9fe58dcae8658964","kind":"commit","published_at":"2020-08-05T20:43:06.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.7","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.7","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.7","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.7/manifests"},{"name":"v1.1.6","sha":"082c05f136309fd7be56e7c1b07a4edcb93968f4","kind":"commit","published_at":"2020-02-10T20:39:39.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.6","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.6/manifests"},{"name":"edge-v0.6.0","sha":"082c05f136309fd7be56e7c1b07a4edcb93968f4","kind":"commit","published_at":"2020-02-10T20:39:39.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.6.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.6.0/manifests"},{"name":"v1.1.6.pre1","sha":"94a2a9a21ab5a69d80ba06fb5784cc9777356c44","kind":"commit","published_at":"2020-01-26T15:25:11.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.6.pre1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.6.pre1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.6.pre1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.6.pre1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.6.pre1/manifests"},{"name":"edge-v0.6.0.pre1","sha":"94a2a9a21ab5a69d80ba06fb5784cc9777356c44","kind":"commit","published_at":"2020-01-26T15:25:11.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.6.0.pre1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.6.0.pre1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.6.0.pre1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.6.0.pre1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.6.0.pre1/manifests"},{"name":"v1.1.5","sha":"ffed3c3c0518030b0ed245637703089fa1f0eeee","kind":"commit","published_at":"2019-03-11T09:29:17.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.5","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.5/manifests"},{"name":"edge-v0.5.0","sha":"ffed3c3c0518030b0ed245637703089fa1f0eeee","kind":"commit","published_at":"2019-03-11T09:29:17.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.5.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.5.0/manifests"},{"name":"v1.1.4","sha":"b2c2c1241ce324d52276edfa40f144d5088edb79","kind":"commit","published_at":"2018-12-14T18:21:39.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.4","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.4/manifests"},{"name":"v1.1.3","sha":"675c74653ac502a951f8b46acc014db54d0c2ae7","kind":"commit","published_at":"2018-11-07T07:54:09.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.3/manifests"},{"name":"v1.1.2","sha":"9fe401e14b8de22ca27c4dc4575e382b756d7811","kind":"commit","published_at":"2018-11-06T09:07:35.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.2/manifests"},{"name":"v1.1.1","sha":"68a82c279ed3db9cf869aaba64cebd5a62adb8ee","kind":"commit","published_at":"2018-11-05T13:10:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.1/manifests"},{"name":"edge-v0.4.1","sha":"68a82c279ed3db9cf869aaba64cebd5a62adb8ee","kind":"commit","published_at":"2018-11-05T13:10:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.4.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.1/manifests"},{"name":"v1.1.0","sha":"c5399e16650a00ae02d7208ccca89af1810c801f","kind":"commit","published_at":"2018-10-31T14:29:33.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.0/manifests"},{"name":"edge-v0.4.0","sha":"c5399e16650a00ae02d7208ccca89af1810c801f","kind":"commit","published_at":"2018-10-31T14:29:33.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.4.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.0/manifests"},{"name":"v1.1.0.pre2","sha":"5cabc5b56775441d0eefb8db003afe8ac7ec1737","kind":"commit","published_at":"2018-09-18T08:58:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.0.pre2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.0.pre2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.0.pre2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.0.pre2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.0.pre2/manifests"},{"name":"edge-v0.4.0.pre2","sha":"5cabc5b56775441d0eefb8db003afe8ac7ec1737","kind":"commit","published_at":"2018-09-18T08:58:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.4.0.pre2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.4.0.pre2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.4.0.pre2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.0.pre2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.0.pre2/manifests"},{"name":"v1.1.0.pre1","sha":"3828d702d0756b4def757bf7b0c21eb3795fc2d4","kind":"commit","published_at":"2018-08-15T12:39:07.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.1.0.pre1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.1.0.pre1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.1.0.pre1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.0.pre1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.1.0.pre1/manifests"},{"name":"edge-v0.4.0.pre1","sha":"3828d702d0756b4def757bf7b0c21eb3795fc2d4","kind":"commit","published_at":"2018-08-15T12:39:07.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.4.0.pre1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.4.0.pre1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.4.0.pre1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.0.pre1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.4.0.pre1/manifests"},{"name":"edge-v0.2.4","sha":"a6b00c82bf540e076e14ed78f820fc4262b42ec0","kind":"commit","published_at":"2017-03-29T20:32:52.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.2.4","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.2.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.2.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.2.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.2.4/manifests"},{"name":"v1.0.5","sha":"48b5680c0bc103e036cbcb08da7c612dd35ce677","kind":"commit","published_at":"2017-02-26T16:56:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.5","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.5/manifests"},{"name":"edge-v0.3.1","sha":"48b5680c0bc103e036cbcb08da7c612dd35ce677","kind":"commit","published_at":"2017-02-26T16:56:36.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.3.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.3.1/manifests"},{"name":"v1.0.4","sha":"be39a0a79c8b2750ce4c157d91bafdd11d12d44f","kind":"commit","published_at":"2016-12-27T02:01:38.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.4","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.4/manifests"},{"name":"edge-v0.3.0","sha":"be39a0a79c8b2750ce4c157d91bafdd11d12d44f","kind":"commit","published_at":"2016-12-27T02:01:38.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.3.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.3.0/manifests"},{"name":"v1.0.3","sha":"af76cbf0f873f0901afca4c5d63de8cf9006134b","kind":"commit","published_at":"2016-12-17T18:43:52.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3/manifests"},{"name":"edge-v0.2.3","sha":"af76cbf0f873f0901afca4c5d63de8cf9006134b","kind":"commit","published_at":"2016-12-17T18:43:52.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/edge-v0.2.3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/edge-v0.2.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@edge-v0.2.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.2.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/edge-v0.2.3/manifests"},{"name":"v1.0.3.pre3","sha":"83718fc3a07fe010401ed1d96146037d6ab9ce7c","kind":"commit","published_at":"2016-06-23T16:36:00.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.3.pre3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.3.pre3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.3.pre3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3.pre3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3.pre3/manifests"},{"name":"v1.0.3.pre2","sha":"c25a3d481f19c3d30361e99e897f7e11ad500d1d","kind":"commit","published_at":"2016-06-22T11:10:34.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.3.pre2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.3.pre2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.3.pre2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3.pre2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3.pre2/manifests"},{"name":"v1.0.3.pre1","sha":"9aebc5e296a2d2ac45b207f9fac2f82f497eab09","kind":"commit","published_at":"2016-06-12T19:57:28.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.3.pre1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.3.pre1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.3.pre1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3.pre1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.3.pre1/manifests"},{"name":"v1.0.2","sha":"d608a9e260da40ce4e9464495845d1ee4bc97cd4","kind":"commit","published_at":"2016-05-02T14:16:19.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.2/manifests"},{"name":"v1.0.1","sha":"536478817a3d0440f00ac09098f3ba71f0d8ce7c","kind":"commit","published_at":"2016-02-27T14:00:08.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.1/manifests"},{"name":"v1.0.0","sha":"93aaa086be820c3983fa2c0a40f6d716b3de4d5a","kind":"commit","published_at":"2015-11-13T14:59:53.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0/manifests"},{"name":"v1.0.0.pre5","sha":"c77fdbf57824d12b70ee01e151ff6ce0abe0de1f","kind":"commit","published_at":"2015-11-05T01:04:29.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.0.pre5","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.0.pre5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.0.pre5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0.pre5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0.pre5/manifests"},{"name":"v0.9.2","sha":"0136ba931b5c8aea7f42289c509500dd1473bb28","kind":"commit","published_at":"2015-11-04T23:37:39.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.9.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.9.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.2/manifests"},{"name":"v1.0.0.pre4","sha":"6a7696705808db6ca35e1f33b9f097408ce4f67b","kind":"commit","published_at":"2015-10-08T23:29:31.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.0.pre4","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.0.pre4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.0.pre4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0.pre4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0.pre4/manifests"},{"name":"1.0.0.pre3","sha":"10ceb96c146d2937b66e7a444445e5ab9edbeb7c","kind":"commit","published_at":"2015-09-30T01:06:44.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/1.0.0.pre3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/1.0.0.pre3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@1.0.0.pre3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/1.0.0.pre3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/1.0.0.pre3/manifests"},{"name":"1.0.0.pre2","sha":"df1deeaf9ec439916437e851e14af3f49a8d74f5","kind":"commit","published_at":"2015-09-19T06:41:53.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/1.0.0.pre2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/1.0.0.pre2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@1.0.0.pre2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/1.0.0.pre2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/1.0.0.pre2/manifests"},{"name":"v1.0.0.pre1","sha":"7c2909ffbe2bcfb26410effa023b9f3f2498c65b","kind":"commit","published_at":"2015-08-19T23:31:29.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v1.0.0.pre1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.0.0.pre1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v1.0.0.pre1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0.pre1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v1.0.0.pre1/manifests"},{"name":"v0.9.1","sha":"0d449fb5e552061c30ad93609eaecac83f2a06ad","kind":"commit","published_at":"2015-08-09T16:15:52.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.9.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.9.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.1/manifests"},{"name":"v0.9.0","sha":"83db1c4f1eb43f9a1d48b5d7b4e63b52884b0a8d","kind":"commit","published_at":"2015-07-10T16:01:23.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.9.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0/manifests"},{"name":"v0.9.0.pre3","sha":"704118776c51dede67745514a9bef0f235306830","kind":"commit","published_at":"2015-06-19T19:24:26.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.9.0.pre3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.9.0.pre3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.9.0.pre3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0.pre3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0.pre3/manifests"},{"name":"v0.9.0.pre2","sha":"db7ee0cff3e160b8a4b979fa675966d5dcf45863","kind":"commit","published_at":"2015-06-08T04:22:03.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.9.0.pre2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.9.0.pre2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.9.0.pre2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0.pre2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0.pre2/manifests"},{"name":"v0.9.0.pre1","sha":"a39941fc441f771c14a8c316293f5f2fd2d53430","kind":"commit","published_at":"2015-05-27T02:18:05.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.9.0.pre1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.9.0.pre1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.9.0.pre1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0.pre1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.9.0.pre1/manifests"},{"name":"v0.8.0","sha":"30c2c472bc0665fe58415d13bc3461c72d387c0c","kind":"commit","published_at":"2015-01-25T17:50:22.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.8.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0/manifests"},{"name":"v0.8.0.pre3","sha":"12ba3a82cc4e2dee8eb7dd100f714c4c79ddec7e","kind":"commit","published_at":"2015-01-25T05:29:23.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.8.0.pre3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.8.0.pre3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.8.0.pre3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0.pre3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0.pre3/manifests"},{"name":"v0.7.2","sha":"4b1ac2f4419a4381ff7db1b71d7bc62c09014cd1","kind":"commit","published_at":"2015-01-25T00:39:56.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.7.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.7.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.2/manifests"},{"name":"v0.8.0.pre2","sha":"90e17d7d888deee7d83f9de351c8c41746aaef70","kind":"commit","published_at":"2015-01-15T02:56:42.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.8.0.pre2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.8.0.pre2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.8.0.pre2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0.pre2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0.pre2/manifests"},{"name":"v0.8.0.pre.1","sha":"42370465f6f3729e03fe89e89b420f99eb77b527","kind":"commit","published_at":"2014-12-15T03:40:50.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.8.0.pre.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.8.0.pre.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.8.0.pre.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0.pre.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.8.0.pre.1/manifests"},{"name":"v0.7.0.1","sha":"7ff3b9a78c3ad7efcc344f8f2ea929b22f79b02f","kind":"commit","published_at":"2014-12-05T00:16:45.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.7.0.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.7.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.7.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.1/manifests"},{"name":"v0.7.0","sha":"f215605628215f47f8999aca6e0ea78f39902aba","kind":"commit","published_at":"2014-08-13T20:18:53.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.7.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0/manifests"},{"name":"v0.7.0.rc3","sha":"98fb1e36d4b1bf7c2d928fb53abf280297a55034","kind":"commit","published_at":"2014-08-12T21:10:32.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.7.0.rc3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.7.0.rc3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.7.0.rc3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc3/manifests"},{"name":"v0.7.0.rc2","sha":"62e3e64ce8c24ebc560a72e204ce1b61eaf56e26","kind":"commit","published_at":"2014-07-30T14:36:59.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.7.0.rc2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.7.0.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.7.0.rc2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc2/manifests"},{"name":"v0.7.0.rc1","sha":"ac140b1935983639bb238cfc88b369ef993ff82c","kind":"commit","published_at":"2014-06-27T14:03:19.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.7.0.rc1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.7.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.7.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc1/manifests"},{"name":"v0.7.0.rc0","sha":"f73f9d886b7eb790c494403ce52df10d6a3c64fe","kind":"commit","published_at":"2014-06-16T12:24:30.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.7.0.rc0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.7.0.rc0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.7.0.rc0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.7.0.rc0/manifests"},{"name":"v0.6.1","sha":"46e7bb00cb62e13aa54ede0948fff7582ee534fe","kind":"commit","published_at":"2014-06-14T23:10:11.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.6.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.6.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.1/manifests"},{"name":"v0.6.0","sha":"251dcc86b9d1c6b03f5010dd7d114e14c3be2a2f","kind":"commit","published_at":"2014-05-26T14:26:04.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.6.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.0/manifests"},{"name":"v0.6.0.pre.2","sha":"09fa943ba9735828184892b92d44efbb6859e78e","kind":"commit","published_at":"2014-05-13T00:31:22.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.6.0.pre.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.6.0.pre.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.6.0.pre.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.0.pre.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.0.pre.2/manifests"},{"name":"v0.6.0.pre.1","sha":"9270768329e9a5f7ce7de41e5542323ca42e2357","kind":"commit","published_at":"2014-04-08T13:04:08.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.6.0.pre.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.6.0.pre.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.6.0.pre.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.0.pre.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.6.0.pre.1/manifests"},{"name":"v0.5.0","sha":"8cc720117b9446e251c0f13d861968dd678a72e8","kind":"commit","published_at":"2014-03-16T13:31:25.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.5.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.5.0/manifests"},{"name":"v0.5.0.pre.1","sha":"2988970f0a75d1ff55e4aaba4f6aff3e41ab9e8e","kind":"commit","published_at":"2014-03-10T13:10:18.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.5.0.pre.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.5.0.pre.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.5.0.pre.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.5.0.pre.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.5.0.pre.1/manifests"},{"name":"v0.4.1","sha":"75752c793add06e3c79947af1c5d7223fd4ee8ec","kind":"commit","published_at":"2014-02-04T02:10:28.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.4.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.4.1/manifests"},{"name":"v0.4.0","sha":"c9505aaed61659567b925075cb88b6b2d0d9d8ce","kind":"commit","published_at":"2014-01-07T20:42:39.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.4.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.4.0/manifests"},{"name":"v0.3.2","sha":"3f739cd094138f677a1d4f27dae53daf49a29f42","kind":"tag","published_at":"2013-11-08T12:22:43.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.3.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.3.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.2/manifests"},{"name":"v0.3.1","sha":"3adc114590d09be164154410caa9abb2d54e9125","kind":"tag","published_at":"2013-11-07T02:35:32.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.3.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.1/manifests"},{"name":"v0.3.1.pre.2","sha":"c1c587092bcbe6929094d9bc8ae343c5f78193c2","kind":"tag","published_at":"2013-11-06T15:13:18.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.3.1.pre.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.3.1.pre.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.3.1.pre.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.1.pre.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.1.pre.2/manifests"},{"name":"v0.3.1.pre.1","sha":"738ea7d011d6ff3f1f1d7823d96a4c00aa7f578f","kind":"tag","published_at":"2013-11-03T23:01:32.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.3.1.pre.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.3.1.pre.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.3.1.pre.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.1.pre.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.1.pre.1/manifests"},{"name":"v0.3.0","sha":"3abf55fd9dce557c52b7513206193439591e198e","kind":"tag","published_at":"2013-10-18T02:00:20.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.3.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.0/manifests"},{"name":"v0.3.0.pre.3","sha":"4668473fa0029c88cade13ac6785c8019fe1766f","kind":"tag","published_at":"2013-10-17T11:33:42.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.3.0.pre.3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.3.0.pre.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.3.0.pre.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.0.pre.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.0.pre.3/manifests"},{"name":"v0.3.0.pre.2","sha":"c6485d488b5ea4b7aa4934d67fbd5477f2c22a4e","kind":"commit","published_at":"2013-10-13T15:24:47.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.3.0.pre.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.3.0.pre.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.3.0.pre.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.0.pre.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.3.0.pre.2/manifests"},{"name":"0.3.0.pre.1","sha":"ede093a0b96f1561f3fcb49190d34d36ec388edf","kind":"commit","published_at":"2013-10-10T02:34:04.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/0.3.0.pre.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/0.3.0.pre.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@0.3.0.pre.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/0.3.0.pre.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/0.3.0.pre.1/manifests"},{"name":"v0.2.2","sha":"6793ea5c64ef2ff24c2fffa1972e5010116bccb2","kind":"commit","published_at":"2013-08-20T23:04:29.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.2.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.2.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.2.2/manifests"},{"name":"v0.0.2","sha":"6793ea5c64ef2ff24c2fffa1972e5010116bccb2","kind":"commit","published_at":"2013-08-20T23:04:29.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.0.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.0.2/manifests"},{"name":"v0.2.1","sha":"293ed0f20a6f3fa2902ecf4cfffb96180e5a1bfe","kind":"commit","published_at":"2013-08-20T13:13:28.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.2.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.2.1/manifests"},{"name":"v0.2.0","sha":"8abcb1b8b7dd9a560761cb3e37374a4e01af8984","kind":"commit","published_at":"2013-08-20T03:39:24.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.2.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.2.0/manifests"},{"name":"v0.1.1.pre.5","sha":"5ecdcc00ef30cd31e478870d06b149e21c82a8eb","kind":"commit","published_at":"2013-08-15T11:40:09.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.1.1.pre.5","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.1.1.pre.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.1.1.pre.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.5/manifests"},{"name":"v0.1.1.pre.4","sha":"342d1645fc2ad48ede7c0013e84f75394f129ec9","kind":"commit","published_at":"2013-08-14T03:54:58.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.1.1.pre.4","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.1.1.pre.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.1.1.pre.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.4/manifests"},{"name":"v0.1.1.pre.3","sha":"dc82d0f27f55c313ca8446fac375d917690ab61b","kind":"commit","published_at":"2013-08-12T13:31:01.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.1.1.pre.3","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.1.1.pre.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.1.1.pre.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.3/manifests"},{"name":"v0.1.1.pre.2","sha":"dc3fef73e07b9a4d3ccc02861baa0e8272755c31","kind":"commit","published_at":"2013-08-08T19:02:46.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.1.1.pre.2","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.1.1.pre.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.1.1.pre.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1.pre.2/manifests"},{"name":"v0.1.1","sha":"08b9d3e461a5006dd66717c1c485eac3fd1633b6","kind":"commit","published_at":"2013-07-29T22:41:25.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.1.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.1/manifests"},{"name":"v0.1.0","sha":"d3dc8db888169470d51d93b4dacd86b27ff73386","kind":"commit","published_at":"2013-07-25T00:46:07.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.1.0","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.1.0/manifests"},{"name":"v0.0.1","sha":"773583560909b05e0679b872a85aa3118a08a1c5","kind":"commit","published_at":"2013-07-23T12:18:51.000Z","download_url":"https://codeload.github.com/ruby-concurrency/concurrent-ruby/tar.gz/v0.0.1","html_url":"https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-concurrency/concurrent-ruby@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2026-09-29T22:01:20.826Z","dependent_packages_count":0,"downloads":1380778911,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":0.005406866720735334,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":0.010273046769397135,"average":0.003919978372533117},"purl":"pkg:gem/concurrent-ruby?repository_url=https://gem.coop","advisories":[{"uuid":"GSA_kwCzR0hTQS02d3g4LXc0ZjUtd3djcs4ABZMC","url":"https://github.com/advisories/GHSA-6wx8-w4f5-wwcr","title":"Concurrent Ruby: ReadWriteLock allows wrong-thread write release and stray read-release counter corruption","description":"### Summary\n`Concurrent::ReadWriteLock#release_write_lock` does not verify that the calling thread acquired the write lock. Any thread with access to the lock object can release an active write lock held by another thread. A second writer can then enter its critical section while the first writer is still running.\n\n`Concurrent::ReadWriteLock#release_read_lock` also decrements the shared counter even when no read lock is held. Calling it on a fresh lock changes the counter from `0` to `-1`, after which normal read acquisition raises `Concurrent::ResourceLimitError`.\n\nThis is a synchronization correctness issue in the public `Concurrent::ReadWriteLock` API. It should not be framed as an authorization bypass; the lock is an in-process concurrency primitive, not an access-control boundary.\n\n###  Version\nSoftware: concurrent-ruby\nVersion: 1.3.6\nCommit: 7a1b78941c081106c20a9ca0144ac73a48d254ab\n\n### Details\n\n`release_write_lock` checks only whether the global counter indicates that a writer is running. It does not track or verify ownership:\n\n```ruby\ndef release_write_lock\n  return true unless running_writer?\n  c = @Counter.update { |counter| counter - RUNNING_WRITER }\n  @ReadLock.broadcast\n  @WriteLock.signal if waiting_writers(c) \u003e 0\n  true\nend\n```\n\nBecause ownership is not checked, a different thread can clear the `RUNNING_WRITER` bit while the original writer is still inside its critical section. Another writer can then acquire the write lock and run concurrently with the first writer.\n\n`release_read_lock` unconditionally decrements the shared counter:\n\n```ruby\ndef release_read_lock\n  while true\n    c = @Counter.value\n    if @Counter.compare_and_set(c, c-1)\n      if waiting_writer?(c) \u0026\u0026 running_readers(c) == 1\n        @WriteLock.signal\n      end\n      break\n    end\n  end\n  true\nend\n```\n\nOn a fresh lock, this changes the counter from `0` to `-1`. A later `acquire_read_lock` raises `Concurrent::ResourceLimitError` because the maximum-reader check masks the negative counter as saturated.\n\n# Reproduce\n\nFrom the root of a `concurrent-ruby` checkout, run:\n\n```bash\nruby -Ilib/concurrent-ruby - \u003c\u003c'RUBY'\nrequire 'concurrent/atomic/read_write_lock'\nrequire 'concurrent/version'\nrequire 'thread'\n\nputs \"ruby=#{RUBY_DESCRIPTION}\"\nputs \"concurrent_ruby_version=#{Concurrent::VERSION}\"\nputs \"poc=ReadWriteLock release methods corrupt or bypass lock state\"\n\nlock = Concurrent::ReadWriteLock.new\nevents = Queue.new\nwriter1_inside = false\n\nwriter1 = Thread.new do\n  lock.acquire_write_lock\n  writer1_inside = true\n  events \u003c\u003c :writer1_acquired\n  sleep 0.5\n  writer1_inside = false\n  lock.release_write_lock\n  events \u003c\u003c :writer1_finished\nend\n\nevents.pop\nputs 'writer1_acquired=true'\n\nintruder_result = nil\nintruder = Thread.new do\n  intruder_result = lock.release_write_lock\nend\nintruder.join\n\nputs \"wrong_thread_release_write_lock_returned=#{intruder_result}\"\n\nwriter2_entered_while_writer1_inside = nil\nwriter2 = Thread.new do\n  lock.acquire_write_lock\n  writer2_entered_while_writer1_inside = writer1_inside\n  lock.release_write_lock\nend\n\nwriter2.join(0.25)\n\nputs \"writer2_acquired_while_writer1_inside=#{writer2_entered_while_writer1_inside}\"\n\nwriter1.join\n\nlock2 = Concurrent::ReadWriteLock.new\nstray_read_release_result = lock2.release_read_lock\ncounter_after_stray_read_release = lock2.instance_eval { @Counter.value }\nread_after_stray_release = begin\n  lock2.acquire_read_lock\n  'acquired'\nrescue =\u003e error\n  \"#{error.class}: #{error.message}\"\nend\n\nputs \"stray_release_read_lock_returned=#{stray_read_release_result}\"\nputs \"counter_after_stray_read_release=#{counter_after_stray_read_release}\"\nputs \"acquire_read_after_stray_release=#{read_after_stray_release}\"\n\nif intruder_result \u0026\u0026 writer2_entered_while_writer1_inside \u0026\u0026 counter_after_stray_read_release == -1\n  puts 'result=REPRODUCED wrong-thread write release and stray read-release corruption'\nelse\n  puts 'result=NOT_REPRODUCED'\nend\n```\nExpected result:\n\n- A second thread successfully calls `release_write_lock` while the first writer still holds the lock.\n- A second writer enters while the first writer is still inside the write critical section.\n- Calling `release_read_lock` on a fresh lock changes the counter to `-1`.\n- A subsequent read acquisition fails with `Concurrent::ResourceLimitError`.\n\n### Log evidence\n\nLocal reproduction output:\n\n```text\nruby=ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25]\nconcurrent_ruby_version=1.3.6\npoc=ReadWriteLock release methods corrupt or bypass lock state\nwriter1_acquired=true\nwrong_thread_release_write_lock_returned=true\nwriter2_acquired_while_writer1_inside=true\nstray_release_read_lock_returned=true\ncounter_after_stray_read_release=-1\nacquire_read_after_stray_release=Concurrent::ResourceLimitError: Too many reader threads\nresult=REPRODUCED wrong-thread write release and stray read-release corruption\n```\n\n### Impact\nThis can break the write-lock mutual exclusion guarantee and can also leave a lock unusable after a stray read release.\nThe impact is local to applications that expose or misuse the manual `acquire_*` / `release_*` APIs. If the lock protects integrity-sensitive mutable state, wrong-thread write release can allow concurrent writers and data races. The stray read-release path can cause denial of service by corrupting the lock counter.\n\n### Credit\nPranjali Thakur - depthfirst ([depthfirst.com](\u003chttp://depthfirst.com\u003e))","origin":"UNSPECIFIED","severity":"LOW","published_at":"2026-06-19T20:47:41.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":2.1,"cvss_vector":"CVSS:4.0/AV:L/AC:H/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N","references":["https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-6wx8-w4f5-wwcr","https://github.com/advisories/GHSA-6wx8-w4f5-wwcr"],"source_kind":"github","identifiers":["GHSA-6wx8-w4f5-wwcr","CVE-2026-54906"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-06-19T21:00:08.618Z","updated_at":"2026-06-29T07:00:19.647Z","epss_percentage":0.0016,"epss_percentile":0.05579,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS02d3g4LXc0ZjUtd3djcs4ABZMC","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS02d3g4LXc0ZjUtd3djcs4ABZMC","packages":[{"ecosystem":"rubygems","package_name":"concurrent-ruby","versions":[{"first_patched_version":"1.3.7","vulnerable_version_range":"\u003c 1.3.7"}],"purl":"pkg:gem/concurrent-ruby"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS02d3g4LXc0ZjUtd3djcs4ABZMC/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS13djN4LTR2eHYtd2hwcM4ABZMB","url":"https://github.com/advisories/GHSA-wv3x-4vxv-whpp","title":"Concurrent Ruby: `ReentrantReadWriteLock` read-count overflow grants a write lock without exclusivity","description":"### Summary\n`Concurrent::ReentrantReadWriteLock` can incorrectly grant a write lock after one thread acquires the read lock 32,768 times.\n\nThe lock stores a thread's local read and write hold counts in one integer. The low 15 bits are used for the read hold count, and bit 15 is used as `WRITE_LOCK_HELD`. After 32,768 reentrant read acquisitions, the local read count crosses into the write-lock bit. `try_write_lock` then treats the thread as already holding a write lock and returns `true` without setting the global `RUNNING_WRITER` bit.\n\nThis breaks the core mutual-exclusion guarantee: the caller is told it has a write lock, but other threads can still hold or acquire read locks at the same time.\n\n### Version\nSoftware: concurrent-ruby\nVersion: 1.3.6\nCommit: 7a1b78941c081106c20a9ca0144ac73a48d254ab\n\n### Details\n\nThe implementation uses a shared counter to track global readers/writers and a per-thread local counter to support reentrancy:\n\n```ruby\nREADER_BITS    = 15\nWRITER_BITS    = 14\n\nWAITING_WRITER = 1 \u003c\u003c READER_BITS\nRUNNING_WRITER = 1 \u003c\u003c (READER_BITS + WRITER_BITS)\nMAX_READERS    = WAITING_WRITER - 1\nMAX_WRITERS    = RUNNING_WRITER - MAX_READERS - 1\n\nWRITE_LOCK_HELD = 1 \u003c\u003c READER_BITS\nREAD_LOCK_MASK  = WRITE_LOCK_HELD - 1\nWRITE_LOCK_MASK = MAX_WRITERS\n```\n\nWhen a thread already holds a lock, `acquire_read_lock` increments `@HeldCount`:\n\n```ruby\nif (held = @HeldCount.value) \u003e 0\n  if held \u0026 READ_LOCK_MASK == 0\n    @Counter.update { |c| c + 1 }\n  end\n  @HeldCount.value = held + 1\n  return true\nend\n```\n\nAfter 32,768 read acquisitions, the per-thread held count becomes `32768`, which is equal to `WRITE_LOCK_HELD`. Then `try_write_lock` returns success through its \"already have a write lock\" branch:\n\n```ruby\ndef try_write_lock\n  if (held = @HeldCount.value) \u003e= WRITE_LOCK_HELD\n    @HeldCount.value = held + WRITE_LOCK_HELD\n    return true\n  else\n    # normal global writer acquisition path\n  end\nend\n```\n\nThis branch does not set the global `RUNNING_WRITER` bit. Other threads therefore do not observe an active writer and can continue holding or acquiring read locks while the caller believes it owns the write lock.\n\n### PoC\n\n```ruby\n#!/usr/bin/env ruby\n# frozen_string_literal: true\n\nrequire 'concurrent/atomic/reentrant_read_write_lock'\nrequire 'concurrent/version'\nrequire 'thread'\n\ndef wait_for_queue(queue, timeout_seconds)\n  deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + timeout_seconds\n  loop do\n    return queue.pop(true)\n  rescue ThreadError\n    return nil if Process.clock_gettime(Process::CLOCK_MONOTONIC) \u003e= deadline\n\n    sleep 0.001\n  end\nend\n\nputs \"ruby=#{RUBY_DESCRIPTION}\"\nputs \"concurrent_ruby_version=#{Concurrent::VERSION}\"\nputs \"poc=ReentrantReadWriteLock read-depth overflow grants write lock without exclusivity\"\n\nlock = Concurrent::ReentrantReadWriteLock.new\nother_reader_ready = Queue.new\nother_reader_stop = Queue.new\n\nother_reader = Thread.new do\n  lock.acquire_read_lock\n  other_reader_ready \u003c\u003c :held\n  other_reader_stop.pop\nend\n\nwait_for_queue(other_reader_ready, 1)\nputs \"other_thread_holds_read_lock=true\"\n\ndepth = Concurrent::ReentrantReadWriteLock::WRITE_LOCK_HELD\ndepth.times { lock.acquire_read_lock }\n\nheld_count = lock.instance_eval { @HeldCount.value }\ncounter_before = lock.instance_eval { @Counter.value }\n\nputs \"main_thread_read_acquisitions=#{depth}\"\nputs \"main_thread_held_count=#{held_count}\"\nputs \"counter_before_try_write=#{counter_before}\"\nputs \"running_writer_bit_before=#{(counter_before \u0026 Concurrent::ReentrantReadWriteLock::RUNNING_WRITER) != 0}\"\n\nwrite_granted = lock.try_write_lock\ncounter_after = lock.instance_eval { @Counter.value }\n\nputs \"try_write_lock_returned=#{write_granted}\"\nputs \"counter_after_try_write=#{counter_after}\"\nputs \"running_writer_bit_after=#{(counter_after \u0026 Concurrent::ReentrantReadWriteLock::RUNNING_WRITER) != 0}\"\n\nthird_reader_ready = Queue.new\nthird_reader = Thread.new do\n  lock.acquire_read_lock\n  third_reader_ready \u003c\u003c :acquired\nend\n\nthird_reader_acquired = wait_for_queue(third_reader_ready, 0.25) == :acquired\nputs \"new_reader_acquired_while_write_claimed=#{third_reader_acquired}\"\n\nif write_granted \u0026\u0026 third_reader_acquired \u0026\u0026 (counter_after \u0026 Concurrent::ReentrantReadWriteLock::RUNNING_WRITER).zero?\n  puts 'result=REPRODUCED write lock granted without setting global writer state'\nelse\n  puts 'result=NOT_REPRODUCED'\nend\n\nthird_reader.kill\nother_reader_stop \u003c\u003c :stop\nother_reader.kill\n```\n\n### Log evidence\n```text\nruby=ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25]\nconcurrent_ruby_version=1.3.6\npoc=ReentrantReadWriteLock read-depth overflow grants write lock without exclusivity\nother_thread_holds_read_lock=true\nmain_thread_read_acquisitions=32768\nmain_thread_held_count=32768\ncounter_before_try_write=2\nrunning_writer_bit_before=false\ntry_write_lock_returned=true\ncounter_after_try_write=2\nrunning_writer_bit_after=false\nnew_reader_acquired_while_write_claimed=true\nresult=REPRODUCED write lock granted without setting global writer state\n```\n\n### Impact\nThis breaks the write-lock exclusivity guarantee. After the overflow, a thread can be told it has acquired the write lock while other threads can still hold or acquire read locks, allowing races and inconsistent reads of protected mutable state.\n\n### Credit\nPranjali Thakur - depthfirst ([depthfirst.com](\u003chttp://depthfirst.com\u003e))","origin":"UNSPECIFIED","severity":"LOW","published_at":"2026-06-19T20:47:38.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":2.0,"cvss_vector":"CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N","references":["https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-wv3x-4vxv-whpp","https://github.com/advisories/GHSA-wv3x-4vxv-whpp"],"source_kind":"github","identifiers":["GHSA-wv3x-4vxv-whpp","CVE-2026-54905"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-06-19T21:00:08.618Z","updated_at":"2026-06-29T07:00:19.648Z","epss_percentage":0.00106,"epss_percentile":0.01328,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS13djN4LTR2eHYtd2hwcM4ABZMB","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS13djN4LTR2eHYtd2hwcM4ABZMB","packages":[{"ecosystem":"rubygems","package_name":"concurrent-ruby","versions":[{"first_patched_version":"1.3.7","vulnerable_version_range":"\u003c 1.3.7"}],"purl":"pkg:gem/concurrent-ruby"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS13djN4LTR2eHYtd2hwcM4ABZMB/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS1oOHc4LTk5ZzctcW12as4ABZMA","url":"https://github.com/advisories/GHSA-h8w8-99g7-qmvj","title":"Concurrent Ruby : `AtomicReference#update` livelocks when the stored value is `Float::NAN`","description":"### Summary\n`Concurrent::AtomicReference#update` can enter a permanent busy retry loop when the current value is `Float::NAN`.\n\nThe issue is caused by the interaction between:\n- `AtomicReference#update`, which retries until `compare_and_set(old_value, new_value)` succeeds.\n- Numeric `compare_and_set`, which checks `old == old_value` before attempting the underlying atomic swap.\n- Ruby NaN semantics, where `Float::NAN == Float::NAN` is always `false`.\n\nAs a result, once an `AtomicReference` contains `Float::NAN`, calling `#update` repeatedly evaluates the caller's block and never returns. In services that store externally derived numeric values in an `AtomicReference`, this can cause CPU exhaustion or permanent request/job hangs.\n\n### Version\nSoftware: concurrent-ruby\nVersion: 1.3.6\nCommit: 7a1b78941c081106c20a9ca0144ac73a48d254ab\n### Details\n\n`AtomicReference#update` retries until `compare_and_set` returns true:\n\n```ruby\ndef update\n  true until compare_and_set(old_value = get, new_value = yield(old_value))\n  new_value\nend\n```\n\nFor numeric expected values, `compare_and_set` uses numeric equality before attempting the underlying atomic compare-and-set:\n\n```ruby\ndef compare_and_set(old_value, new_value)\n  if old_value.kind_of? Numeric\n    while true\n      old = get\n\n      return false unless old.kind_of? Numeric\n      return false unless old == old_value\n\n      result = _compare_and_set(old, new_value)\n      return result if result\n    end\n  else\n    _compare_and_set(old_value, new_value)\n  end\nend\n```\n\nWhen the stored value is `Float::NAN`, `old_value = get` returns NaN. The later comparison `old == old_value` is false because NaN is not equal to itself. `compare_and_set` therefore returns false every time. `AtomicReference#update` treats that as a failed concurrent update and retries forever.\n\nThis is reachable through the public `Concurrent::AtomicReference` API and does not require native extensions or undefined behavior.\n\n### PoC\n\n```ruby\n#!/usr/bin/env ruby\n# frozen_string_literal: true\n\nrequire 'concurrent/atomic/atomic_reference'\nrequire 'concurrent/version'\n\nputs \"ruby=#{RUBY_DESCRIPTION}\"\nputs \"concurrent_ruby_version=#{Concurrent::VERSION}\"\nputs \"poc=AtomicReference#update livelock when current value is Float::NAN\"\n\nref = Concurrent::AtomicReference.new(Float::NAN)\nattempts = 0\nfinished = false\n\nworker = Thread.new do\n  ref.update do |_old_value|\n    attempts += 1\n    0.0\n  end\n  finished = true\nend\n\nsleep 0.25\n\nputs \"nan_update_attempts_after_250ms=#{attempts}\"\nputs \"nan_update_finished=#{finished}\"\nputs \"nan_update_worker_alive=#{worker.alive?}\"\n\nif worker.alive? \u0026\u0026 !finished \u0026\u0026 attempts \u003e 1000\n  puts 'result=REPRODUCED busy retry loop; update did not complete'\nelse\n  puts 'result=NOT_REPRODUCED'\nend\n\nworker.kill\nworker.join\n\ncontrol = Concurrent::AtomicReference.new(1.0)\ncontrol_attempts = 0\ncontrol_result = control.update do |old_value|\n  control_attempts += 1\n  old_value + 1.0\nend\n\nputs \"control_update_result=#{control_result.inspect}\"\nputs \"control_update_attempts=#{control_attempts}\"\nputs \"control_update_final_value=#{control.value.inspect}\"\n```\n### Log evidence\n```text\nruby=ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25]\nconcurrent_ruby_version=1.3.6\npoc=AtomicReference#update livelock when current value is Float::NAN\nnan_update_attempts_after_250ms=1926016\nnan_update_finished=false\nnan_update_worker_alive=true\nresult=REPRODUCED busy retry loop; update did not complete\ncontrol_update_result=2.0\ncontrol_update_attempts=1\ncontrol_update_final_value=2.0\n```\n\n### Impact\nThis is an application-level denial of service issue. If an application stores externally derived numeric data in a `Concurrent::AtomicReference`, an attacker or faulty upstream data source may be able to cause the stored value to become `Float::NAN`. Any later call to `AtomicReference#update` on that reference will spin indefinitely, repeatedly executing the update block and consuming CPU.\n\n### Credit\nPranjali Thakur - depthfirst ([depthfirst.com](\u003chttp://depthfirst.com\u003e))","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2026-06-19T20:47:35.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.2,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","references":["https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-h8w8-99g7-qmvj","https://github.com/advisories/GHSA-h8w8-99g7-qmvj"],"source_kind":"github","identifiers":["GHSA-h8w8-99g7-qmvj","CVE-2026-54904"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-06-19T21:00:08.618Z","updated_at":"2026-06-29T07:00:19.648Z","epss_percentage":0.00278,"epss_percentile":0.19485,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1oOHc4LTk5ZzctcW12as4ABZMA","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS1oOHc4LTk5ZzctcW12as4ABZMA","packages":[{"ecosystem":"rubygems","package_name":"concurrent-ruby","versions":[{"first_patched_version":"1.3.7","vulnerable_version_range":"\u003c 1.3.7"}],"purl":"pkg:gem/concurrent-ruby"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1oOHc4LTk5ZzctcW12as4ABZMA/related_packages","related_advisories":[]}],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/concurrent-ruby","docker_dependents_count":4193,"docker_downloads_count":3829927869,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/concurrent-ruby","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/concurrent-ruby/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-09-28T21:31:01.711Z","issues_count":101,"pull_requests_count":146,"avg_time_to_close_issue":81267543.57142857,"avg_time_to_close_pull_request":4274749.7637795275,"issues_closed_count":70,"pull_requests_closed_count":127,"pull_request_authors_count":49,"issue_authors_count":71,"avg_comments_per_issue":5.257425742574258,"avg_comments_per_pull_request":1.678082191780822,"merged_pull_requests_count":108,"bot_issues_count":0,"bot_pull_requests_count":11,"past_year_issues_count":6,"past_year_pull_requests_count":18,"past_year_avg_time_to_close_issue":4531.0,"past_year_avg_time_to_close_pull_request":233745.66666666666,"past_year_issues_closed_count":3,"past_year_pull_requests_closed_count":12,"past_year_pull_request_authors_count":8,"past_year_issue_authors_count":6,"past_year_avg_comments_per_issue":5.333333333333333,"past_year_avg_comments_per_pull_request":1.1111111111111112,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":4,"past_year_merged_pull_requests_count":12,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-concurrency%2Fconcurrent-ruby/issues","maintainers":[{"login":"eregon","count":25,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/eregon"},{"login":"pitr-ch","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/pitr-ch"},{"login":"chrisseaton","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/chrisseaton"},{"login":"jdantonio","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jdantonio"},{"login":"nirvdrum","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nirvdrum"},{"login":"SmokeyStack","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/SmokeyStack"}],"active_maintainers":[{"login":"eregon","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/eregon"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/concurrent-ruby/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/concurrent-ruby/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/concurrent-ruby/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/concurrent-ruby/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/concurrent-ruby/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/concurrent-ruby/codemeta","maintainers":[{"uuid":"50229","login":"pitr-ch","name":null,"email":null,"url":null,"packages_count":18,"html_url":"https://gem.coop/profiles/pitr-ch","role":null,"created_at":"2025-10-07T14:53:32.000Z","updated_at":"2025-10-07T14:53:32.000Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/pitr-ch/packages"},{"uuid":"46093","login":"eregon","name":null,"email":null,"url":null,"packages_count":13,"html_url":"https://gem.coop/profiles/eregon","role":null,"created_at":"2025-10-07T14:53:32.107Z","updated_at":"2025-10-07T14:53:32.107Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/eregon/packages"},{"uuid":"65379","login":"jdantonio","name":null,"email":null,"url":null,"packages_count":9,"html_url":"https://gem.coop/profiles/jdantonio","role":null,"created_at":"2025-10-07T14:53:31.938Z","updated_at":"2025-10-07T14:53:31.938Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/jdantonio/packages"},{"uuid":"96545","login":"chrisseaton","name":null,"email":null,"url":null,"packages_count":10,"html_url":"https://gem.coop/profiles/chrisseaton","role":null,"created_at":"2025-10-07T14:53:31.869Z","updated_at":"2025-10-07T14:53:31.869Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/chrisseaton/packages"},{"uuid":"16","login":null,"name":null,"email":null,"url":null,"packages_count":15,"html_url":"https://gem.coop/profiles/","role":null,"created_at":"2025-10-07T14:53:32.054Z","updated_at":"2025-10-07T14:53:32.054Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/16/packages"}]}