{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T16:03:39.717159Z","repo":{"ref":{"host":"github.com","owner":"Kotlin","name":"kotlinx.coroutines"},"default_branch":"master","clone_url":"https://github.com/Kotlin/kotlinx.coroutines.git","html_url":"https://github.com/Kotlin/kotlinx.coroutines","description":"Library support for Kotlin coroutines ","stars":13820,"forks":1949,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":45280,"primary_language":"Kotlin","license_spdx":"Apache-2.0","created_at":"2016-06-22T13:49:21Z","pushed_at":"2026-11-12T06:42:20Z","security_policy_url":null,"distribution":{"owner_created_at":"2012-02-17T12:53:03Z","owner_type":"Organization","release_assets":[]}},"commit_sha":"ead082131ceb45b8e4fda027c74471103c1cd09f","profile":{"lines_by_language":{"Kotlin":111620,"Java":1071,"Shell":96,"Python":75},"files_by_category":{"test":519,"source":456,"generated":131,"docs":92,"other":70,"binary":48,"config":20,"oversized":1},"source_lines":55055,"test_lines":57807},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.65,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":2.0,"flagged_work_units":0.0,"flagged_releases":0.0,"style_index":0.4},"summary":"Weak signals consistent with AI-assisted development."},"quality":{"score":76.3,"confidence":0.9,"coverage":1.0,"label":"adequate","breakdown":{"complexity":91.6,"duplication":55.2,"lint":100.0,"testing":55.0,"docs":100.0,"type_safety":40.0,"process":90.0},"summary":"Code quality is adequate: test-to-source ratio 1.05, no CI test run detected; 3% of function code in complex or long functions; 10% duplicated lines. Weakest area: type safety."},"security":{"score":67.9,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":79.2,"sast":100.0,"dependencies":null,"ci_actions":null,"posture":20.0,"scorecard":23.3},"summary":"Security posture is weak: 0 possible secret(s) in the tree, 1 only in history. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"ok","tool_version":"scorecard v5.6.0","metrics":{"aggregate":5.0,"check:Code-Review":8.0,"check:Maintained":10.0,"check:CII-Best-Practices":0.0,"check:Binary-Artifacts":7.0,"check:Security-Policy":0.0,"check:License":10.0,"check:SAST":0.0,"check:Fuzzing":0.0},"findings":[],"evidence":[{"kind":"scorecard-check","description":"Scorecard Code-Review: 8/10 (Found 25/28 approved changesets -- score normalized to 8)","ref":"Code-Review","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":0.2},{"kind":"scorecard-check","description":"Scorecard Maintained: 10/10 (7 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10)","ref":"Maintained","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":0.0},{"kind":"scorecard-check","description":"Scorecard CII-Best-Practices: 0/10 (no effort to earn an OpenSSF best practices badge detected)","ref":"CII-Best-Practices","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":1.0},{"kind":"scorecard-check","description":"Scorecard Binary-Artifacts: 7/10 (binaries present in source code)","ref":"Binary-Artifacts","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":0.3},{"kind":"scorecard-check","description":"Scorecard Security-Policy: 0/10 (security policy file not detected)","ref":"Security-Policy","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":1.0},{"kind":"scorecard-check","description":"Scorecard License: 10/10 (license file detected)","ref":"License","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":0.0},{"kind":"scorecard-check","description":"Scorecard SAST: 0/10 (SAST tool is not run on all commits -- score normalized to 0)","ref":"SAST","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":1.0},{"kind":"scorecard-check","description":"Scorecard Fuzzing: 0/10 (project is not fuzzed)","ref":"Fuzzing","url":"https://scorecard.dev/viewer/?uri=github.com/Kotlin/kotlinx.coroutines","weight":1.0}],"data":{"date":"2026-11-09","commit":"ead082131ceb45b8e4fda027c74471103c1cd09f","matches_head":true},"error":null},{"analyzer":"sec-registry","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":3014.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":236897.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2016-06":{"loc":604,"attributed_loc":0},"2016-07":{"loc":289,"attributed_loc":0},"2016-10":{"loc":0,"attributed_loc":0},"2016-11":{"loc":117,"attributed_loc":0},"2016-12":{"loc":381,"attributed_loc":0},"2017-01":{"loc":5660,"attributed_loc":0},"2017-02":{"loc":15100,"attributed_loc":0},"2017-03":{"loc":5224,"attributed_loc":0},"2017-04":{"loc":3120,"attributed_loc":0},"2017-05":{"loc":1536,"attributed_loc":0},"2017-06":{"loc":2287,"attributed_loc":0},"2017-07":{"loc":6794,"attributed_loc":0},"2017-08":{"loc":5957,"attributed_loc":0},"2017-09":{"loc":5639,"attributed_loc":0},"2017-10":{"loc":1822,"attributed_loc":0},"2017-11":{"loc":2671,"attributed_loc":0},"2017-12":{"loc":6952,"attributed_loc":0},"2018-01":{"loc":3298,"attributed_loc":0},"2018-02":{"loc":1208,"attributed_loc":0},"2018-03":{"loc":4835,"attributed_loc":0},"2018-04":{"loc":7031,"attributed_loc":0},"2018-05":{"loc":2803,"attributed_loc":0},"2018-06":{"loc":1977,"attributed_loc":0},"2018-07":{"loc":7854,"attributed_loc":0},"2018-08":{"loc":2957,"attributed_loc":0},"2018-09":{"loc":10129,"attributed_loc":0},"2018-10":{"loc":3609,"attributed_loc":0},"2018-11":{"loc":2326,"attributed_loc":0},"2018-12":{"loc":3376,"attributed_loc":0},"2019-01":{"loc":330,"attributed_loc":0},"2019-02":{"loc":3804,"attributed_loc":0},"2019-03":{"loc":2369,"attributed_loc":0},"2019-04":{"loc":10359,"attributed_loc":0},"2019-05":{"loc":2643,"attributed_loc":0},"2019-06":{"loc":4331,"attributed_loc":0},"2019-07":{"loc":4840,"attributed_loc":0},"2019-08":{"loc":4196,"attributed_loc":0},"2019-09":{"loc":2643,"attributed_loc":0},"2019-10":{"loc":1952,"attributed_loc":0},"2019-11":{"loc":1023,"attributed_loc":0},"2019-12":{"loc":1189,"attributed_loc":0},"2020-01":{"loc":215,"attributed_loc":0},"2020-02":{"loc":2491,"attributed_loc":0},"2020-03":{"loc":3271,"attributed_loc":0},"2020-04":{"loc":7232,"attributed_loc":0},"2020-05":{"loc":1378,"attributed_loc":0},"2020-06":{"loc":177,"attributed_loc":0},"2020-07":{"loc":1382,"attributed_loc":0},"2020-08":{"loc":629,"attributed_loc":0},"2020-09":{"loc":403,"attributed_loc":0},"2020-10":{"loc":9303,"attributed_loc":0},"2020-11":{"loc":775,"attributed_loc":0},"2020-12":{"loc":863,"attributed_loc":0},"2021-01":{"loc":429,"attributed_loc":0},"2021-02":{"loc":967,"attributed_loc":0},"2021-03":{"loc":854,"attributed_loc":0},"2021-04":{"loc":4944,"attributed_loc":0},"2021-05":{"loc":717,"attributed_loc":0},"2021-06":{"loc":651,"attributed_loc":0},"2021-07":{"loc":487,"attributed_loc":0},"2021-08":{"loc":212,"attributed_loc":0},"2021-09":{"loc":718,"attributed_loc":0},"2021-10":{"loc":1693,"attributed_loc":0},"2021-11":{"loc":5995,"attributed_loc":0},"2021-12":{"loc":316,"attributed_loc":0},"2022-01":{"loc":212,"attributed_loc":0},"2022-02":{"loc":498,"attributed_loc":0},"2022-03":{"loc":111,"attributed_loc":0},"2022-04":{"loc":390,"attributed_loc":0},"2022-05":{"loc":179,"attributed_loc":0},"2022-06":{"loc":228,"attributed_loc":0},"2022-07":{"loc":1081,"attributed_loc":0},"2022-08":{"loc":2236,"attributed_loc":0},"2022-09":{"loc":456,"attributed_loc":0},"2022-10":{"loc":934,"attributed_loc":0},"2022-11":{"loc":197,"attributed_loc":0},"2022-12":{"loc":73,"attributed_loc":0},"2023-01":{"loc":406,"attributed_loc":0},"2023-02":{"loc":6349,"attributed_loc":0},"2023-03":{"loc":841,"attributed_loc":0},"2023-04":{"loc":126,"attributed_loc":0},"2023-05":{"loc":266,"attributed_loc":0},"2023-06":{"loc":386,"attributed_loc":0},"2023-07":{"loc":95,"attributed_loc":0},"2023-08":{"loc":104,"attributed_loc":0},"2023-09":{"loc":71,"attributed_loc":0},"2023-10":{"loc":192,"attributed_loc":0},"2023-11":{"loc":353,"attributed_loc":0},"2023-12":{"loc":2778,"attributed_loc":0},"2024-01":{"loc":1830,"attributed_loc":0},"2024-02":{"loc":848,"attributed_loc":0},"2024-03":{"loc":249,"attributed_loc":0},"2024-04":{"loc":557,"attributed_loc":0},"2024-05":{"loc":1533,"attributed_loc":0},"2024-06":{"loc":35,"attributed_loc":0},"2024-07":{"loc":655,"attributed_loc":0},"2024-08":{"loc":588,"attributed_loc":0},"2024-09":{"loc":32,"attributed_loc":0},"2024-10":{"loc":1668,"attributed_loc":0},"2024-11":{"loc":205,"attributed_loc":0},"2024-12":{"loc":370,"attributed_loc":0},"2025-01":{"loc":157,"attributed_loc":0},"2025-02":{"loc":689,"attributed_loc":0},"2025-03":{"loc":73,"attributed_loc":0},"2025-04":{"loc":653,"attributed_loc":0},"2025-05":{"loc":381,"attributed_loc":0},"2025-06":{"loc":118,"attributed_loc":0},"2025-07":{"loc":211,"attributed_loc":0},"2025-08":{"loc":62,"attributed_loc":0},"2025-09":{"loc":19,"attributed_loc":0},"2025-10":{"loc":186,"attributed_loc":0},"2025-11":{"loc":698,"attributed_loc":0},"2025-12":{"loc":129,"attributed_loc":0},"2026-01":{"loc":0,"attributed_loc":0},"2026-02":{"loc":7,"attributed_loc":0},"2026-03":{"loc":1363,"attributed_loc":0},"2026-04":{"loc":3377,"attributed_loc":0},"2026-05":{"loc":12,"attributed_loc":0},"2026-06":{"loc":269,"attributed_loc":0},"2026-07":{"loc":17,"attributed_loc":0},"2026-08":{"loc":5,"attributed_loc":0},"2026-09":{"loc":0,"attributed_loc":0},"2026-10":{"loc":2,"attributed_loc":0},"2026-11":{"loc":0,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":2.0,"workflow_agents":0.0,"tools_configured":2.0,"earliest_adoption":1789549448.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/CLAUDE.md","weight":0.5},{"kind":"ai-artifact","description":"AGENTS.md (generic-agent configuration)","ref":"AGENTS.md","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/AGENTS.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1789549448},{"tool":"generic-agent","path":"AGENTS.md","added_at":1789549448}],"workflows":[],"tools":["claude-code","generic-agent"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-5","metrics":{"work_units":1882.0,"flagged_units":0.0,"pre_ai_era_bursts":11.0,"pre_ai_era_measured_loc":176201.0,"pre_ai_era_burst_loc":22077.0,"measured_loc":216682.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":3412.0,"median_loc_per_hour":42.7654776780643,"pr_timed_units":1051.0,"excluded_import_loc":17231.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["331750b11ebc59396f657c80e4d16e03c2a5643d","34c3464c80904e6e578b646db80f9d0169059c37","d57bfa2e3d8a622d6a988a9f0a6bcf2b825c5e17","e7cf6321f875e6ccf2cc90028877551ce7478856"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-5","metrics":{"releases":99.0,"flagged_releases":0.0,"max_loc_per_day":1047.2},"findings":[],"evidence":[],"data":{"releases":[{"from":"0.8-beta","to":"0.10-rc","loc":1629,"days":7.77,"loc_per_day":209.7,"flagged":false},{"from":"0.10-rc","to":"0.11-rc","loc":3074,"days":5.07,"loc_per_day":606.9,"flagged":false},{"from":"0.11-rc","to":"0.12","loc":1971,"days":7.09,"loc_per_day":278.1,"flagged":false},{"from":"0.12","to":"0.13","loc":3218,"days":13.13,"loc_per_day":245.2,"flagged":false},{"from":"0.13","to":"0.14","loc":659,"days":2.91,"loc_per_day":226.5,"flagged":false},{"from":"0.14","to":"0.15","loc":4360,"days":47.85,"loc_per_day":91.1,"flagged":false},{"from":"0.15","to":"0.16","loc":2135,"days":36.24,"loc_per_day":58.9,"flagged":false},{"from":"0.16","to":"0.17","loc":4066,"days":44.85,"loc_per_day":90.7,"flagged":false},{"from":"0.17","to":"0.18","loc":1010,"days":25.04,"loc_per_day":40.3,"flagged":false},{"from":"0.18","to":"0.19","loc":10038,"days":42.24,"loc_per_day":237.6,"flagged":false},{"from":"0.19","to":"0.19.1","loc":2589,"days":8.01,"loc_per_day":323.4,"flagged":false},{"from":"0.19.1","to":"0.19.2","loc":316,"days":13.78,"loc_per_day":22.9,"flagged":false},{"from":"0.19.2","to":"0.19.3","loc":94,"days":5.86,"loc_per_day":16.0,"flagged":false},{"from":"0.19.3","to":"0.20","loc":6783,"days":37.99,"loc_per_day":178.5,"flagged":false},{"from":"0.20","to":"0.21","loc":5625,"days":24.14,"loc_per_day":233.0,"flagged":false},{"from":"0.21","to":"0.21.1","loc":1369,"days":15.76,"loc_per_day":86.9,"flagged":false},{"from":"0.21.1","to":"0.21.2","loc":295,"days":2.12,"loc_per_day":138.9,"flagged":false},{"from":"0.21.2","to":"0.22","loc":2307,"days":9.38,"loc_per_day":246.0,"flagged":false},{"from":"0.22","to":"0.22.1","loc":430,"days":4.86,"loc_per_day":88.4,"flagged":false},{"from":"0.22.1","to":"0.22.2","loc":430,"days":9.08,"loc_per_day":47.4,"flagged":false},{"from":"0.22.2","to":"0.22.3","loc":239,"days":15.95,"loc_per_day":15.0,"flagged":false},{"from":"0.22.3","to":"0.22.4","loc":167,"days":9.85,"loc_per_day":16.9,"flagged":false},{"from":"0.22.4","to":"0.22.5","loc":126,"days":0.82,"loc_per_day":154.5,"flagged":false},{"from":"0.22.5","to":"0.23.0","loc":10631,"days":94.12,"loc_per_day":113.0,"flagged":false},{"from":"0.23.0","to":"0.23.1","loc":398,"days":2.81,"loc_per_day":141.8,"flagged":false},{"from":"0.23.1","to":"0.23.2","loc":37,"days":2.99,"loc_per_day":12.4,"flagged":false},{"from":"0.23.2","to":"0.23.3","loc":8,"days":1.14,"loc_per_day":7.0,"flagged":false},{"from":"0.23.3","to":"0.23.4","loc":10,"days":12.1,"loc_per_day":0.8,"flagged":false},{"from":"0.23.4","to":"0.24.0","loc":9915,"days":29.14,"loc_per_day":340.3,"flagged":false},{"from":"0.24.0","to":"0.25.0","loc":3789,"days":27.91,"loc_per_day":135.8,"flagged":false},{"from":"0.25.0","to":"0.25.3","loc":79,"days":12.05,"loc_per_day":6.6,"flagged":false},{"from":"0.25.3","to":"0.26.0","loc":3319,"days":7.07,"loc_per_day":469.3,"flagged":false},{"from":"0.26.0","to":"0.26.1","loc":856,"days":7.81,"loc_per_day":109.6,"flagged":false},{"from":"0.26.1","to":"0.27.0","loc":5297,"days":7.12,"loc_per_day":744.3,"flagged":false},{"from":"0.27.0","to":"0.30.0","loc":1617,"days":1.99,"loc_per_day":811.9,"flagged":false},{"from":"0.30.0","to":"0.30.1","loc":606,"days":3.79,"loc_per_day":160.0,"flagged":false},{"from":"0.30.1","to":"0.30.2","loc":254,"days":6.19,"loc_per_day":41.0,"flagged":false},{"from":"0.30.2","to":"1.0.0-RC1","loc":2885,"days":10.71,"loc_per_day":269.4,"flagged":false},{"from":"1.0.0-RC1","to":"1.0.0","loc":456,"days":10.27,"loc_per_day":44.4,"flagged":false},{"from":"1.0.0","to":"1.0.1","loc":1539,"days":8.0,"loc_per_day":192.4,"flagged":false},{"from":"1.0.1","to":"1.1.0-alpha","loc":4773,"days":42.17,"loc_per_day":113.2,"flagged":false},{"from":"1.1.0-alpha","to":"1.1.0","loc":640,"days":2.83,"loc_per_day":226.2,"flagged":false},{"from":"1.1.0","to":"1.1.1","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"1.1.1","to":"1.2.0-alpha","loc":4186,"days":95.1,"loc_per_day":44.0,"flagged":false},{"from":"1.2.0-alpha","to":"1.2.0-alpha-2","loc":173,"days":8.79,"loc_per_day":19.7,"flagged":false},{"from":"1.2.0-alpha-2","to":"1.2.0","loc":2022,"days":8.13,"loc_per_day":248.7,"flagged":false},{"from":"1.2.0","to":"1.2.1","loc":3992,"days":13.69,"loc_per_day":291.6,"flagged":false},{"from":"1.2.1","to":"1.3.0-M1","loc":7346,"days":41.52,"loc_per_day":176.9,"flagged":false},{"from":"1.3.0-M1","to":"1.2.2","loc":4,"days":11.92,"loc_per_day":0.3,"flagged":false},{"from":"1.2.2","to":"1.3.0-M2","loc":8233,"days":7.86,"loc_per_day":1047.2,"flagged":false},{"from":"1.3.0-M2","to":"1.3.0-rc","loc":3723,"days":23.0,"loc_per_day":161.9,"flagged":false},{"from":"1.3.0-rc","to":"1.3.0-rc2","loc":2293,"days":21.11,"loc_per_day":108.6,"flagged":false},{"from":"1.3.0-rc2","to":"1.3.0","loc":1926,"days":13.77,"loc_per_day":139.9,"flagged":false},{"from":"1.3.0","to":"1.3.1","loc":874,"days":12.09,"loc_per_day":72.3,"flagged":false},{"from":"1.3.1","to":"1.3.2","loc":112,"days":21.04,"loc_per_day":5.3,"flagged":false},{"from":"1.3.2","to":"1.3.3","loc":6722,"days":78.87,"loc_per_day":85.2,"flagged":false},{"from":"1.3.3","to":"1.3.4","loc":4371,"days":83.97,"loc_per_day":52.1,"flagged":false},{"from":"1.3.4","to":"1.3.5","loc":2330,"days":11.14,"loc_per_day":209.2,"flagged":false},{"from":"1.3.5","to":"1.3.6","loc":6756,"days":52.11,"loc_per_day":129.7,"flagged":false},{"from":"1.3.6","to":"1.3.7","loc":434,"days":10.78,"loc_per_day":40.3,"flagged":false},{"from":"1.3.7","to":"1.3.8","loc":1615,"days":58.33,"loc_per_day":27.7,"flagged":false},{"from":"1.3.8","to":"1.3.9","loc":562,"days":31.62,"loc_per_day":17.8,"flagged":false},{"from":"1.3.9","to":"1.4.0-M1","loc":3649,"days":57.07,"loc_per_day":63.9,"flagged":false},{"from":"1.4.0-M1","to":"1.4.0","loc":1556,"days":13.05,"loc_per_day":119.2,"flagged":false},{"from":"1.4.0","to":"1.4.1","loc":135,"days":8.24,"loc_per_day":16.4,"flagged":false},{"from":"1.4.1","to":"1.4.2","loc":489,"days":22.87,"loc_per_day":21.4,"flagged":false},{"from":"1.4.2","to":"1.4.3","loc":1873,"days":96.78,"loc_per_day":19.4,"flagged":false},{"from":"1.4.3","to":"1.5.0-RC","loc":6334,"days":54.34,"loc_per_day":116.6,"flagged":false},{"from":"1.5.0-RC","to":"1.5.0","loc":253,"days":17.78,"loc_per_day":14.2,"flagged":false},{"from":"1.5.0","to":"1.5.1","loc":1377,"days":56.0,"loc_per_day":24.6,"flagged":false},{"from":"1.5.1","to":"1.5.2","loc":438,"days":54.79,"loc_per_day":8.0,"flagged":false},{"from":"1.5.2","to":"1.6.0-RC","loc":8259,"days":81.07,"loc_per_day":101.9,"flagged":false},{"from":"1.6.0-RC","to":"1.6.0-RC2","loc":386,"days":18.01,"loc_per_day":21.4,"flagged":false},{"from":"1.6.0-RC2","to":"1.6.0-RC3","loc":48,"days":5.84,"loc_per_day":8.2,"flagged":false},{"from":"1.6.0-RC3","to":"1.6.0","loc":29,"days":6.07,"loc_per_day":4.8,"flagged":false},{"from":"1.6.0","to":"1.6.1","loc":2450,"days":103.26,"loc_per_day":23.7,"flagged":false},{"from":"1.6.1","to":"1.6.2","loc":307,"days":53.01,"loc_per_day":5.8,"flagged":false},{"from":"1.6.2","to":"1.6.3","loc":77,"days":23.76,"loc_per_day":3.2,"flagged":false},{"from":"1.6.3","to":"1.6.4","loc":1011,"days":22.15,"loc_per_day":45.6,"flagged":false},{"from":"1.6.4","to":"1.7.0-Beta","loc":7212,"days":239.96,"loc_per_day":30.1,"flagged":false},{"from":"1.7.0-Beta","to":"1.7.0-RC","loc":403,"days":41.06,"loc_per_day":9.8,"flagged":false},{"from":"1.7.0-RC","to":"1.7.0","loc":129,"days":16.05,"loc_per_day":8.0,"flagged":false},{"from":"1.7.0","to":"1.7.1","loc":182,"days":6.86,"loc_per_day":26.5,"flagged":false},{"from":"1.7.1","to":"1.7.2","loc":403,"days":48.0,"loc_per_day":8.4,"flagged":false},{"from":"1.7.2","to":"1.7.3","loc":56,"days":25.92,"loc_per_day":2.2,"flagged":false},{"from":"1.7.3","to":"1.8.0-RC","loc":2037,"days":129.15,"loc_per_day":15.8,"flagged":false},{"from":"1.8.0-RC","to":"1.8.0-RC2","loc":1248,"days":19.95,"loc_per_day":62.6,"flagged":false},{"from":"1.8.0-RC2","to":"1.8.0","loc":2763,"days":55.95,"loc_per_day":49.4,"flagged":false},{"from":"1.8.0","to":"1.8.1-Beta","loc":395,"days":24.97,"loc_per_day":15.8,"flagged":false},{"from":"1.8.1-Beta","to":"1.8.1","loc":36,"days":59.87,"loc_per_day":0.6,"flagged":false},{"from":"1.8.1","to":"1.9.0-RC","loc":2141,"days":18.28,"loc_per_day":117.1,"flagged":false},{"from":"1.9.0-RC","to":"1.9.0-RC.2","loc":1278,"days":75.95,"loc_per_day":16.8,"flagged":false},{"from":"1.9.0-RC.2","to":"1.9.0","loc":0,"days":31.93,"loc_per_day":0.0,"flagged":false},{"from":"1.9.0","to":"1.10.0","loc":2251,"days":97.2,"loc_per_day":23.2,"flagged":false},{"from":"1.10.0","to":"1.10.1","loc":24,"days":0.76,"loc_per_day":31.4,"flagged":false},{"from":"1.10.1","to":"1.10.2","loc":1189,"days":104.97,"loc_per_day":11.3,"flagged":false},{"from":"1.10.2","to":"1.11.0-rc01","loc":6848,"days":376.04,"loc_per_day":18.2,"flagged":false},{"from":"1.11.0-rc01","to":"1.11.0-rc02","loc":86,"days":11.96,"loc_per_day":7.2,"flagged":false},{"from":"1.11.0-rc02","to":"1.11.0","loc":12,"days":9.91,"loc_per_day":1.2,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":55055.0,"index":0.4,"count:narrated_steps":20.0,"per_kloc:narrated_steps":0.363,"files:narrated_steps":9.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":1.0,"per_kloc:assistant_voice":0.018,"files:assistant_voice":1.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: * Then, `true` means that warnings should be treated as errors, `false` means that they should not.","ref":"buildSrc/src/main/kotlin/CommunityProjectsBuild.kt:165","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/buildSrc/src/main/kotlin/CommunityProjectsBuild.kt#L165","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, try the fast-fast error path for Guava ListenableFutures. This will save allocating an","ref":"integration/kotlinx-coroutines-guava/src/ListenableFuture.kt:122","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/integration/kotlinx-coroutines-guava/src/ListenableFuture.kt#L122","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Finally, if this isn't done yet, attach a Listener that will complete the Deferred.","ref":"integration/kotlinx-coroutines-guava/src/ListenableFuture.kt:150","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/integration/kotlinx-coroutines-guava/src/ListenableFuture.kt#L150","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 1: Create nodes and install them as completion handlers, they may fire!","ref":"kotlinx-coroutines-core/common/src/Await.kt:65","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/Await.kt#L65","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 2: Set disposer to each node","ref":"kotlinx-coroutines-core/common/src/Await.kt:74","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/Await.kt#L74","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 3: Now we can check if continuation is complete","ref":"kotlinx-coroutines-core/common/src/Await.kt:77","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/Await.kt#L77","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: * Finally, an exception is considered to have been propagated","ref":"kotlinx-coroutines-core/common/src/CoroutineExceptionHandler.kt:147","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/CoroutineExceptionHandler.kt#L147","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, try to add a child along the cancellation handlers","ref":"kotlinx-coroutines-core/common/src/JobSupport.kt:1024","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/JobSupport.kt#L1024","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":1.0,"secrets_nonprod":0.0,"secrets_low_confidence":2.0},"findings":[{"rule_id":"gitleaks/jwt","severity":"medium","message":"Possible jwt secret in history (commit 8da6f38ad4); removed from the current tree but still retrievable","path":"buildSrc/gradle.properties","line":5,"fingerprint":"8da6f38ad4cf3efbca778147f11fe3998d3674ee:buildSrc/gradle.properties:jwt:5"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 6738825058); removed from the current tree but still retrievable","path":"example-frontend-js/main.bundle.js.map","line":1,"fingerprint":"67388250584e35becb76b0d2ce46315bc46cbef1:example-frontend-js/main.bundle.js.map:generic-api-key:1"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 74bcc923bb); removed from the current tree but still retrievable","path":"binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/asmUtils.kt","line":130,"fingerprint":"74bcc923bbd748a0b3b582d3c7b7c64780ba22d1:binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/asmUtils.kt:generic-api-key:130"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":0.0,"findings_high":0.0,"findings_medium":0.0,"findings_low":0.0,"weighted_findings":0.0,"scanned_lines":55055.0,"parse_errors":13.0},"findings":[],"evidence":[],"data":{"rulesets":["kotlin","java","bash","python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":1.0,"check:lockfiles":0.0,"signed_commit_share":0.885,"unpinned_manifests":1.0},"findings":[],"evidence":[{"kind":"posture","description":"kotlinx-coroutines-test/npm/package.json has no lockfile alongside it (unpinned dependencies)","ref":"kotlinx-coroutines-test/npm/package.json","url":null,"weight":0.3}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":2613.0,"function_nloc":17630.0,"mean_ccn":1.87,"p90_ccn":4.0,"complex_functions":7.0,"long_functions":2.0,"many_param_functions":2.0,"risky_nloc_share":0.0293},"findings":[],"evidence":[{"kind":"complex-function","description":"SplitSubscriber::drain in benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/FlowableSplit.java: complexity 29, 113 lines","ref":"benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/FlowableSplit.java","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/FlowableSplit.java#L187","weight":0.48333333333333334},{"kind":"complex-function","description":"removeUnprocessedElements in kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt: complexity 22, 56 lines","ref":"kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt#L2018","weight":0.36666666666666664},{"kind":"complex-function","description":"toString in kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt: complexity 20, 54 lines","ref":"kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt#L2572","weight":0.3333333333333333},{"kind":"complex-function","description":"updateCellSendSlow in kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt: complexity 19, 63 lines","ref":"kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt#L478","weight":0.31666666666666665},{"kind":"complex-function","description":"updateCellReceiveSlow in kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt: complexity 18, 56 lines","ref":"kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt#L1031","weight":0.3},{"kind":"complex-function","description":"updateCellExpandBufferSlow in kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt: complexity 16, 37 lines","ref":"kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt#L1275","weight":0.26666666666666666},{"kind":"complex-function","description":"onCancellation in kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt: complexity 16, 32 lines","ref":"kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/kotlinx-coroutines-core/common/src/channels/BufferedChannel.kt#L2825","weight":0.26666666666666666},{"kind":"complex-function","description":"RxJava2PlaysScrabbleOpt::play in benchmarks/src/jmh/java/benchmarks/flow/scrabble/RxJava2PlaysScrabbleOpt.java: complexity 5, 106 lines","ref":"benchmarks/src/jmh/java/benchmarks/flow/scrabble/RxJava2PlaysScrabbleOpt.java","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/java/benchmarks/flow/scrabble/RxJava2PlaysScrabbleOpt.java#L32","weight":0.08333333333333333}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":36378.0,"duplicated_lines":3604.0,"duplicated_share":0.0991,"files":456.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/java/benchmarks/flow/scrabble/RxJava2PlaysScrabble.java:17 and benchmarks/src/jmh/java/benchmarks/flow/scrabble/RxJava2PlaysScrabbleOpt.java:15","ref":"benchmarks/src/jmh/java/benchmarks/flow/scrabble/RxJava2PlaysScrabble.java","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/java/benchmarks/flow/scrabble/RxJava2PlaysScrabble.java#L17","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/FlowableSplit.java:207 and benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/FlowableSplit.java:277","ref":"benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/FlowableSplit.java","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/FlowableSplit.java#L207","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/StringFlowable.java:35 and benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/StringFlowable.java:62","ref":"benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/StringFlowable.java","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/java/benchmarks/flow/scrabble/optimizations/StringFlowable.java#L35","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/kotlin/benchmarks/akka/PingPongAkkaBenchmark.kt:40 and benchmarks/src/jmh/kotlin/benchmarks/akka/StatefulActorAkkaBenchmark.kt:49","ref":"benchmarks/src/jmh/kotlin/benchmarks/akka/PingPongAkkaBenchmark.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/kotlin/benchmarks/akka/PingPongAkkaBenchmark.kt#L40","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/kotlin/benchmarks/flow/CombineFlowsBenchmark.kt:8 and benchmarks/src/jmh/kotlin/benchmarks/flow/CombineTwoFlowsBenchmark.kt:9","ref":"benchmarks/src/jmh/kotlin/benchmarks/flow/CombineFlowsBenchmark.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/kotlin/benchmarks/flow/CombineFlowsBenchmark.kt#L8","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/kotlin/benchmarks/flow/FlatMapMergeBenchmark.kt:8 and benchmarks/src/jmh/kotlin/benchmarks/flow/NumbersBenchmark.kt:12","ref":"benchmarks/src/jmh/kotlin/benchmarks/flow/FlatMapMergeBenchmark.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/kotlin/benchmarks/flow/FlatMapMergeBenchmark.kt#L8","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/kotlin/benchmarks/flow/NumbersBenchmark.kt:64 and benchmarks/src/jmh/kotlin/benchmarks/flow/NumbersBenchmark.kt:76","ref":"benchmarks/src/jmh/kotlin/benchmarks/flow/NumbersBenchmark.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/kotlin/benchmarks/flow/NumbersBenchmark.kt#L64","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/kotlin/benchmarks/flow/TakeBenchmark.kt:12 and kotlinx-coroutines-core/benchmarks/jvm/kotlin/kotlinx/coroutines/channels/SimpleChannelBenchmark.kt:7","ref":"benchmarks/src/jmh/kotlin/benchmarks/flow/TakeBenchmark.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/kotlin/benchmarks/flow/TakeBenchmark.kt#L12","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/kotlin/benchmarks/flow/TakeBenchmark.kt:19 and kotlinx-coroutines-core/benchmarks/jvm/kotlin/kotlinx/coroutines/flow/TakeWhileBenchmark.kt:17","ref":"benchmarks/src/jmh/kotlin/benchmarks/flow/TakeBenchmark.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/kotlin/benchmarks/flow/TakeBenchmark.kt#L19","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: benchmarks/src/jmh/kotlin/benchmarks/flow/scrabble/FlowPlaysScrabbleBase.kt:105 and benchmarks/src/jmh/kotlin/benchmarks/flow/scrabble/FlowPlaysScrabbleOpt.kt:88","ref":"benchmarks/src/jmh/kotlin/benchmarks/flow/scrabble/FlowPlaysScrabbleBase.kt","url":"https://github.com/Kotlin/kotlinx.coroutines/blob/ead082131ceb45b8e4fda027c74471103c1cd09f/benchmarks/src/jmh/kotlin/benchmarks/flow/scrabble/FlowPlaysScrabbleBase.kt#L105","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":0.0,"weighted_findings":0.0,"scanned_lines":55055.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":1.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":1.0,"test_lines":57807.0,"source_lines":55055.0,"test_ratio":1.05,"ci_files":0.0,"cochange_share":0.3498,"cochange_commits":203.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":1.0,"check:changelog":1.0,"readme_lines":224.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE.txt","ref":"LICENSE.txt","url":null,"weight":0.0},{"kind":"docs","description":"CONTRIBUTING.md","ref":"CONTRIBUTING.md","url":null,"weight":0.0},{"kind":"docs","description":"CHANGES.md","ref":"CHANGES.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}