{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.880137Z","repo":{"ref":{"host":"github.com","owner":"klinker24","name":"Android-TextView-LinkBuilder"},"default_branch":"master","clone_url":"https://github.com/klinker24/Android-TextView-LinkBuilder.git","html_url":"https://github.com/klinker24/Android-TextView-LinkBuilder","description":"Insanely easy way to define clickable links within a TextView.","stars":1574,"forks":196,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":542,"primary_language":"Kotlin","license_spdx":"MIT","created_at":"2015-06-24T15:04:40Z","pushed_at":"2020-01-20T00:09:39Z","security_policy_url":null,"distribution":{"owner_created_at":"2013-06-28T22:14:45Z","owner_type":"User","release_assets":[{"name":"library-release.aar","size":29624,"download_count":66,"release_tag":"v2.0.1","url":"https://github.com/klinker24/Android-TextView-LinkBuilder/releases/download/v2.0.1/library-release.aar"},{"name":"library-release.aar","size":27431,"download_count":56,"release_tag":"v2.0.0","url":"https://github.com/klinker24/Android-TextView-LinkBuilder/releases/download/v2.0.0/library-release.aar"},{"name":"library-release.aar","size":15668,"download_count":51,"release_tag":"v1.6.1","url":"https://github.com/klinker24/Android-TextView-LinkBuilder/releases/download/v1.6.1/library-release.aar"}]}},"commit_sha":"f2040d0c90d718004a4fa03a0276504cc5d8636b","profile":{"lines_by_language":{"Kotlin":1223,"Java":148},"files_by_category":{"source":12,"config":11,"other":8,"binary":7,"docs":3},"source_lines":1371,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.65,"coverage":1.0,"label":"none-detected","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":0.0,"style_index":0.0},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":56.6,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":100.0,"duplication":65.1,"lint":100.0,"testing":0.0,"docs":85.0,"type_safety":null,"process":5.0},"summary":"Code quality is weak: test-to-source ratio 0.00, no CI test run detected; 0% of function code in complex or long functions; 7% duplicated lines. Weakest area: testing."},"security":{"score":60.7,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":63.2,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":18.0},"summary":"Security posture is weak: no high-impact findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"ok","tool_version":"scorecard v5.6.0","metrics":{"aggregate":1.7,"check:Maintained":0.0,"check:Code-Review":1.0,"check:Binary-Artifacts":9.0,"check:CII-Best-Practices":0.0,"check:Security-Policy":0.0,"check:Fuzzing":0.0,"check:License":10.0,"check:Signed-Releases":0.0,"check:SAST":0.0,"check:Branch-Protection":0.0},"findings":[],"evidence":[{"kind":"scorecard-check","description":"Scorecard Maintained: 0/10 (0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0)","ref":"Maintained","url":"https://scorecard.dev/viewer/?uri=github.com/klinker24/Android-TextView-LinkBuilder","weight":1.0},{"kind":"scorecard-check","description":"Scorecard Code-Review: 1/10 (Found 3/27 approved changesets -- score normalized to 1)","ref":"Code-Review","url":"https://scorecard.dev/viewer/?uri=github.com/klinker24/Android-TextView-LinkBuilder","weight":0.9},{"kind":"scorecard-check","description":"Scorecard Binary-Artifacts: 9/10 (binaries present in source code)","ref":"Binary-Artifacts","url":"https://scorecard.dev/viewer/?uri=github.com/klinker24/Android-TextView-LinkBuilder","weight":0.1},{"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/klinker24/Android-TextView-LinkBuilder","weight":1.0},{"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/klinker24/Android-TextView-LinkBuilder","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/klinker24/Android-TextView-LinkBuilder","weight":1.0},{"kind":"scorecard-check","description":"Scorecard License: 10/10 (license file detected)","ref":"License","url":"https://scorecard.dev/viewer/?uri=github.com/klinker24/Android-TextView-LinkBuilder","weight":0.0},{"kind":"scorecard-check","description":"Scorecard Signed-Releases: 0/10 (Project has not signed or included provenance with any releases.)","ref":"Signed-Releases","url":"https://scorecard.dev/viewer/?uri=github.com/klinker24/Android-TextView-LinkBuilder","weight":1.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/klinker24/Android-TextView-LinkBuilder","weight":1.0},{"kind":"scorecard-check","description":"Scorecard Branch-Protection: 0/10 (branch protection not enabled on development/release branches)","ref":"Branch-Protection","url":"https://scorecard.dev/viewer/?uri=github.com/klinker24/Android-TextView-LinkBuilder","weight":1.0}],"data":{"date":"2026-11-02","commit":"f2040d0c90d718004a4fa03a0276504cc5d8636b","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":98.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":3140.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2015-06":{"loc":808,"attributed_loc":0},"2015-07":{"loc":218,"attributed_loc":0},"2015-08":{"loc":286,"attributed_loc":0},"2015-09":{"loc":27,"attributed_loc":0},"2015-10":{"loc":72,"attributed_loc":0},"2015-12":{"loc":0,"attributed_loc":0},"2016-02":{"loc":6,"attributed_loc":0},"2016-03":{"loc":0,"attributed_loc":0},"2016-04":{"loc":0,"attributed_loc":0},"2016-05":{"loc":87,"attributed_loc":0},"2016-10":{"loc":39,"attributed_loc":0},"2016-11":{"loc":30,"attributed_loc":0},"2016-12":{"loc":30,"attributed_loc":0},"2017-06":{"loc":0,"attributed_loc":0},"2017-07":{"loc":18,"attributed_loc":0},"2018-01":{"loc":0,"attributed_loc":0},"2018-03":{"loc":1510,"attributed_loc":0},"2018-04":{"loc":1,"attributed_loc":0},"2018-05":{"loc":0,"attributed_loc":0},"2018-10":{"loc":8,"attributed_loc":0},"2018-12":{"loc":0,"attributed_loc":0},"2019-12":{"loc":0,"attributed_loc":0},"2020-01":{"loc":0,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":32.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":3140.0,"pre_ai_era_burst_loc":0.0,"measured_loc":3140.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":298.39508618981574,"median_loc_per_hour":40.717241379310344,"pr_timed_units":1.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":14.0,"flagged_releases":0.0,"max_loc_per_day":824.2},"findings":[],"evidence":[],"data":{"releases":[{"from":"1.0.0","to":"1.0.1","loc":42,"days":0.05,"loc_per_day":824.2,"flagged":false},{"from":"1.0.1","to":"1.0.2","loc":20,"days":1.84,"loc_per_day":10.9,"flagged":false},{"from":"1.0.2","to":"1.0.3","loc":15,"days":2.4,"loc_per_day":6.2,"flagged":false},{"from":"1.0.3","to":"1.0.4","loc":78,"days":9.14,"loc_per_day":8.5,"flagged":false},{"from":"1.0.4","to":"1.0.5","loc":13,"days":1.47,"loc_per_day":8.9,"flagged":false},{"from":"1.0.5","to":"1.0.6","loc":74,"days":5.22,"loc_per_day":14.2,"flagged":false},{"from":"1.0.6","to":"1.1.0","loc":57,"days":12.83,"loc_per_day":4.4,"flagged":false},{"from":"1.1.0","to":"1.2.0","loc":20,"days":21.13,"loc_per_day":0.9,"flagged":false},{"from":"1.2.0","to":"1.3.0","loc":266,"days":10.93,"loc_per_day":24.3,"flagged":false},{"from":"1.3.0","to":"1.3.1","loc":99,"days":103.96,"loc_per_day":1.0,"flagged":false},{"from":"1.3.1","to":"1.3.2","loc":6,"days":77.1,"loc_per_day":0.1,"flagged":false},{"from":"1.3.2","to":"v1.6.1","loc":204,"days":508.9,"loc_per_day":0.4,"flagged":false},{"from":"v1.6.1","to":"v2.0.0","loc":1255,"days":230.15,"loc_per_day":5.5,"flagged":false},{"from":"v2.0.0","to":"v2.0.1","loc":81,"days":0.16,"loc_per_day":510.7,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":1371.0,"index":0.0,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.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":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":3.0,"findings_high":0.0,"findings_medium":3.0,"findings_low":0.0,"weighted_findings":1.8,"scanned_lines":1371.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"example/src/main/AndroidManifest.xml","line":22,"fingerprint":"java.android.security.exported_activity:example/src/main/AndroidManifest.xml:22"},{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"example/src/main/AndroidManifest.xml","line":34,"fingerprint":"java.android.security.exported_activity:example/src/main/AndroidManifest.xml:34"},{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"example/src/main/AndroidManifest.xml","line":45,"fingerprint":"java.android.security.exported_activity:example/src/main/AndroidManifest.xml:45"}],"evidence":[],"data":{"rulesets":["kotlin","java"]},"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":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0102,"unpinned_manifests":0.0},"findings":[],"evidence":[],"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":67.0,"function_nloc":550.0,"mean_ccn":1.75,"p90_ccn":4.0,"complex_functions":0.0,"long_functions":0.0,"many_param_functions":0.0,"risky_nloc_share":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":754.0,"duplicated_lines":54.0,"duplicated_share":0.0716,"files":12.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: example/src/main/java/com/klinker/android/link_builder_example/MainActivity.kt:2 and library/src/main/java/com/klinker/android/link_builder/Link.kt:2","ref":"example/src/main/java/com/klinker/android/link_builder_example/MainActivity.kt","url":"https://github.com/klinker24/Android-TextView-LinkBuilder/blob/f2040d0c90d718004a4fa03a0276504cc5d8636b/example/src/main/java/com/klinker/android/link_builder_example/MainActivity.kt#L2","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":1371.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":1371.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":38.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":0.0,"check:changelog":1.0,"readme_lines":105.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0},{"kind":"docs","description":"changelog.md","ref":"changelog.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}