{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:04.970138Z","repo":{"ref":{"host":"github.com","owner":"grantland","name":"android-autofittextview"},"default_branch":"master","clone_url":"https://github.com/grantland/android-autofittextview.git","html_url":"https://github.com/grantland/android-autofittextview","description":"A TextView that automatically resizes text to fit perfectly within its bounds.","stars":4244,"forks":685,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":1190,"primary_language":"Java","license_spdx":"Apache-2.0","created_at":"2011-02-14T06:00:52Z","pushed_at":"2019-01-12T23:57:12Z","security_policy_url":null,"distribution":{"owner_created_at":"2010-05-14T18:00:11Z","owner_type":"User","release_assets":[]}},"commit_sha":"5c565aa5c3ed62aaa31140440bb526e7435e7947","profile":{"lines_by_language":{"Java":882},"files_by_category":{"other":12,"config":10,"binary":7,"source":4,"docs":2},"source_lines":882,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.54,"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":48.5,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":100.0,"duplication":79.9,"lint":47.2,"testing":0.0,"docs":65.0,"type_safety":null,"process":5.0},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 0% of function code in complex or long functions; 4% duplicated lines. Weakest area: testing."},"security":{"score":66.5,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":81.1,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":20.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.9,"check:Code-Review":1.0,"check:Maintained":0.0,"check:Binary-Artifacts":8.0,"check:CII-Best-Practices":0.0,"check:Fuzzing":0.0,"check:Security-Policy":0.0,"check:License":10.0,"check:Branch-Protection":0.0,"check:SAST":0.0},"findings":[],"evidence":[{"kind":"scorecard-check","description":"Scorecard Code-Review: 1/10 (Found 4/26 approved changesets -- score normalized to 1)","ref":"Code-Review","url":"https://scorecard.dev/viewer/?uri=github.com/grantland/android-autofittextview","weight":0.9},{"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/grantland/android-autofittextview","weight":1.0},{"kind":"scorecard-check","description":"Scorecard Binary-Artifacts: 8/10 (binaries present in source code)","ref":"Binary-Artifacts","url":"https://scorecard.dev/viewer/?uri=github.com/grantland/android-autofittextview","weight":0.2},{"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/grantland/android-autofittextview","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/grantland/android-autofittextview","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/grantland/android-autofittextview","weight":1.0},{"kind":"scorecard-check","description":"Scorecard License: 10/10 (license file detected)","ref":"License","url":"https://scorecard.dev/viewer/?uri=github.com/grantland/android-autofittextview","weight":0.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/grantland/android-autofittextview","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/grantland/android-autofittextview","weight":1.0}],"data":{"date":"2026-10-26","commit":"5c565aa5c3ed62aaa31140440bb526e7435e7947","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":56.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":1442.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2011-02":{"loc":158,"attributed_loc":0},"2012-06":{"loc":162,"attributed_loc":0},"2012-07":{"loc":15,"attributed_loc":0},"2014-02":{"loc":105,"attributed_loc":0},"2014-03":{"loc":211,"attributed_loc":0},"2014-04":{"loc":1,"attributed_loc":0},"2014-06":{"loc":758,"attributed_loc":0},"2014-08":{"loc":0,"attributed_loc":0},"2014-12":{"loc":0,"attributed_loc":0},"2015-01":{"loc":32,"attributed_loc":0},"2015-03":{"loc":0,"attributed_loc":0},"2015-09":{"loc":0,"attributed_loc":0},"2016-04":{"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":16.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":1442.0,"pre_ai_era_burst_loc":0.0,"measured_loc":1442.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":156.5,"median_loc_per_hour":36.98069046225863,"pr_timed_units":0.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":3.0,"flagged_releases":0.0,"max_loc_per_day":224.9},"findings":[],"evidence":[],"data":{"releases":[{"from":"0.1.0","to":"0.1.1","loc":52,"days":0.23,"loc_per_day":224.9,"flagged":false},{"from":"0.1.1","to":"0.2.0","loc":759,"days":160.95,"loc_per_day":4.7,"flagged":false},{"from":"0.2.0","to":"0.2.1","loc":32,"days":208.27,"loc_per_day":0.2,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":882.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":1.0,"findings_high":0.0,"findings_medium":1.0,"findings_low":0.0,"weighted_findings":0.6,"scanned_lines":882.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":"sample/src/main/AndroidManifest.xml","line":12,"fingerprint":"java.android.security.exported_activity:sample/src/main/AndroidManifest.xml:12"}],"evidence":[],"data":{"rulesets":["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.0,"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":65.0,"function_nloc":435.0,"mean_ccn":1.71,"p90_ccn":3.0,"complex_functions":0.0,"long_functions":0.0,"many_param_functions":2.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":483.0,"duplicated_lines":18.0,"duplicated_share":0.0373,"files":4.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: library/src/main/java/me/grantland/widget/AutofitHelper.java:69 and library/src/main/java/me/grantland/widget/AutofitLayout.java:50","ref":"library/src/main/java/me/grantland/widget/AutofitHelper.java","url":"https://github.com/grantland/android-autofittextview/blob/5c565aa5c3ed62aaa31140440bb526e7435e7947/library/src/main/java/me/grantland/widget/AutofitHelper.java#L69","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":1.0,"weighted_findings":3.0,"scanned_lines":882.0,"category:correctness":1.0},"findings":[{"rule_id":"opengrep/java.lang.correctness.hardcoded-conditional","severity":"high","message":"This if statement will always have the same behavior and is therefore unnecessary.","path":"library/src/main/java/me/grantland/widget/AutofitHelper.java","line":157,"fingerprint":"java.lang.correctness.hardcoded-conditional:library/src/main/java/me/grantland/widget/AutofitHelper.java:157"}],"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":882.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":28.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":0.0,"readme_lines":54.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}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}