{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:00.819671Z","repo":{"ref":{"host":"github.com","owner":"KingJA","name":"LoadSir"},"default_branch":"master","clone_url":"https://github.com/KingJA/LoadSir.git","html_url":"https://github.com/KingJA/LoadSir","description":"A lightweight, good expandability Android library used for displaying different pages like loading, error, empty, timeout or even your custom page when you load a page.(优雅地处理加载中，重试，无数据等)","stars":3467,"forks":504,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":4024,"primary_language":"Java","license_spdx":null,"created_at":"2017-09-02T08:32:15Z","pushed_at":"2020-12-26T03:23:03Z","security_policy_url":null,"distribution":{"owner_created_at":"2016-01-12T13:32:56Z","owner_type":"User","release_assets":[]}},"commit_sha":"7ff786c73b019997bccdb96a69f68e6c947e384b","profile":{"lines_by_language":{"Java":2510},"files_by_category":{"source":46,"config":36,"binary":30,"other":10,"docs":8},"source_lines":2510,"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":57.9,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":100.0,"duplication":50.9,"lint":100.0,"testing":2.3,"docs":60.0,"type_safety":null,"process":null},"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; 11% duplicated lines. Weakest area: testing."},"security":{"score":76.6,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":85.8,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: no high-impact findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"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":184.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":5470.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2017-09":{"loc":3893,"attributed_loc":0},"2017-10":{"loc":966,"attributed_loc":0},"2017-11":{"loc":14,"attributed_loc":0},"2017-12":{"loc":22,"attributed_loc":0},"2018-03":{"loc":4,"attributed_loc":0},"2019-01":{"loc":0,"attributed_loc":0},"2019-08":{"loc":332,"attributed_loc":0},"2020-02":{"loc":197,"attributed_loc":0},"2020-03":{"loc":42,"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":56.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":5470.0,"pre_ai_era_burst_loc":0.0,"measured_loc":5470.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":199.00317172632532,"median_loc_per_hour":67.39245884227296,"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":5.0,"flagged_releases":0.0,"max_loc_per_day":75.5},"findings":[],"evidence":[],"data":{"releases":[{"from":"1.2.0","to":"1.2.2","loc":448,"days":5.94,"loc_per_day":75.5,"flagged":false},{"from":"1.2.2","to":"1.3.0","loc":819,"days":14.8,"loc_per_day":55.3,"flagged":false},{"from":"1.3.0","to":"1.3.2","loc":39,"days":7.98,"loc_per_day":4.9,"flagged":false},{"from":"1.3.2","to":"1.3.5","loc":187,"days":71.44,"loc_per_day":2.6,"flagged":false},{"from":"1.3.5","to":"1.3.8","loc":575,"days":798.16,"loc_per_day":0.7,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":2510.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.1,"scanned_lines":2510.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":"app/src/main/AndroidManifest.xml","line":12,"fingerprint":"java.android.security.exported_activity:app/src/main/AndroidManifest.xml:12"},{"rule_id":"opengrep/java.lang.security.audit.crypto.weak-random","severity":"medium","message":"Detected use of the functions `Math.random()` or `java.util.Random()`. These are both not cryptographically strong random number generators (RNGs). If you are using these RNGs to create passwords or secret tokens, use `java.security.SecureRandom` instead. [confidence low]","path":"app/src/main/java/sample/kingja/loadsir/target/ConvertorActivity.java","line":38,"fingerprint":"java.lang.security.audit.crypto.weak-random:app/src/main/java/sample/kingja/loadsir/target/ConvertorActivity.java:38"},{"rule_id":"opengrep/java.lang.security.audit.object-deserialization","severity":"medium","message":"Found object deserialization using ObjectInputStream. Deserializing entire Java objects is dangerous because malicious actors can create Java object streams with unintended consequences. Ensure that the objects being deserialized are not user-controlled. If this must be done, consider using HMACs to [confidence low]","path":"loadsir/src/main/java/com/kingja/loadsir/callback/Callback.java","line":103,"fingerprint":"java.lang.security.audit.object-deserialization:loadsir/src/main/java/com/kingja/loadsir/callback/Callback.java:103"}],"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":188.0,"function_nloc":1060.0,"mean_ccn":1.27,"p90_ccn":2.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":1245.0,"duplicated_lines":140.0,"duplicated_share":0.1124,"files":46.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: app/src/main/java/sample/kingja/loadsir/target/AnimateActivity.java:29 and app/src/main/java/sample/kingja/loadsir/target/NormalActivity.java:32","ref":"app/src/main/java/sample/kingja/loadsir/target/AnimateActivity.java","url":"https://github.com/KingJA/LoadSir/blob/7ff786c73b019997bccdb96a69f68e6c947e384b/app/src/main/java/sample/kingja/loadsir/target/AnimateActivity.java#L29","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app/src/main/java/sample/kingja/loadsir/target/AnimateActivity.java:42 and app/src/main/java/sample/kingja/loadsir/target/ConstraintLayoutActivity.java:41","ref":"app/src/main/java/sample/kingja/loadsir/target/AnimateActivity.java","url":"https://github.com/KingJA/LoadSir/blob/7ff786c73b019997bccdb96a69f68e6c947e384b/app/src/main/java/sample/kingja/loadsir/target/AnimateActivity.java#L42","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app/src/main/java/sample/kingja/loadsir/target/ConstraintLayoutActivity.java:42 and app/src/main/java/sample/kingja/loadsir/target/NormalActivity.java:41","ref":"app/src/main/java/sample/kingja/loadsir/target/ConstraintLayoutActivity.java","url":"https://github.com/KingJA/LoadSir/blob/7ff786c73b019997bccdb96a69f68e6c947e384b/app/src/main/java/sample/kingja/loadsir/target/ConstraintLayoutActivity.java#L42","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: loadsir/src/main/java/com/kingja/loadsir/callback/HintCallback.java:38 and loadsir/src/main/java/com/kingja/loadsir/callback/ProgressCallback.java:35","ref":"loadsir/src/main/java/com/kingja/loadsir/callback/HintCallback.java","url":"https://github.com/KingJA/LoadSir/blob/7ff786c73b019997bccdb96a69f68e6c947e384b/loadsir/src/main/java/com/kingja/loadsir/callback/HintCallback.java#L38","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":2510.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.2254,"test_lines":0.0,"source_lines":2510.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0563,"cochange_commits":71.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":0.0,"check:contributing":0.0,"check:changelog":1.0,"readme_lines":273.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"docs/changelog.md","ref":"docs/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":[]}