{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.255718Z","repo":{"ref":{"host":"github.com","owner":"ivacf","name":"archi"},"default_branch":"master","clone_url":"https://github.com/ivacf/archi.git","html_url":"https://github.com/ivacf/archi","description":"Repository that showcases 3 Android app architectures: \"Standard Android\", MVP and MVVM. The exact same app is built 3 times following the different patterns.","stars":3297,"forks":490,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":1454,"primary_language":"Java","license_spdx":"Apache-2.0","created_at":"2015-09-11T16:13:34Z","pushed_at":"2019-10-03T12:13:37Z","security_policy_url":null,"distribution":{"owner_created_at":"2012-02-20T00:24:12Z","owner_type":"User","release_assets":[]}},"commit_sha":"30f1c690bf2b60c904fb3c968884b113780d935a","profile":{"lines_by_language":{"Java":2817},"files_by_category":{"binary":35,"source":31,"config":28,"other":13,"test":7,"docs":2},"source_lines":2257,"test_lines":560},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.49,"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":null,"style_index":0.0},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":56.9,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":79.9,"duplication":1.8,"lint":100.0,"testing":42.4,"docs":65.0,"type_safety":null,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.25, no CI test run detected; 7% of function code in complex or long functions; 67% duplicated lines. Weakest area: duplication."},"security":{"score":73.0,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":75.6,"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":34.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":3004.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2015-09":{"loc":2869,"attributed_loc":0},"2015-10":{"loc":103,"attributed_loc":0},"2015-11":{"loc":0,"attributed_loc":0},"2016-01":{"loc":0,"attributed_loc":0},"2016-04":{"loc":32,"attributed_loc":0},"2017-02":{"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":14.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":3004.0,"pre_ai_era_burst_loc":0.0,"measured_loc":3004.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":518.5945945945947,"median_loc_per_hour":78.86758343634116,"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":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":2257.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":2257.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-mvp/src/main/AndroidManifest.xml","line":14,"fingerprint":"java.android.security.exported_activity:app-mvp/src/main/AndroidManifest.xml:14"},{"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-mvvm/src/main/AndroidManifest.xml","line":14,"fingerprint":"java.android.security.exported_activity:app-mvvm/src/main/AndroidManifest.xml:14"},{"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":14,"fingerprint":"java.android.security.exported_activity:app/src/main/AndroidManifest.xml:14"}],"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":202.0,"function_nloc":1241.0,"mean_ccn":2.01,"p90_ccn":3.0,"complex_functions":6.0,"long_functions":0.0,"many_param_functions":0.0,"risky_nloc_share":0.0749},"findings":[],"evidence":[{"kind":"complex-function","description":"Repository::equals in app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java: complexity 18, 18 lines","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java#L79","weight":0.3},{"kind":"complex-function","description":"Repository::equals in app-mvvm/src/main/java/uk/ivanc/archimvvm/model/Repository.java: complexity 18, 18 lines","ref":"app-mvvm/src/main/java/uk/ivanc/archimvvm/model/Repository.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvvm/src/main/java/uk/ivanc/archimvvm/model/Repository.java#L79","weight":0.3},{"kind":"complex-function","description":"Repository::equals in app/src/main/java/uk/ivanc/archi/model/Repository.java: complexity 18, 18 lines","ref":"app/src/main/java/uk/ivanc/archi/model/Repository.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app/src/main/java/uk/ivanc/archi/model/Repository.java#L79","weight":0.3},{"kind":"complex-function","description":"User::equals in app-mvp/src/main/java/uk/ivanc/archimvp/model/User.java: complexity 16, 13 lines","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/model/User.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/model/User.java#L66","weight":0.26666666666666666},{"kind":"complex-function","description":"User::equals in app-mvvm/src/main/java/uk/ivanc/archimvvm/model/User.java: complexity 16, 13 lines","ref":"app-mvvm/src/main/java/uk/ivanc/archimvvm/model/User.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvvm/src/main/java/uk/ivanc/archimvvm/model/User.java#L66","weight":0.26666666666666666},{"kind":"complex-function","description":"User::equals in app/src/main/java/uk/ivanc/archi/model/User.java: complexity 16, 13 lines","ref":"app/src/main/java/uk/ivanc/archi/model/User.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app/src/main/java/uk/ivanc/archi/model/User.java#L66","weight":0.26666666666666666}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":1305.0,"duplicated_lines":869.0,"duplicated_share":0.6659,"files":31.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/ArchiApplication.java:10 and app-mvvm/src/main/java/uk/ivanc/archimvvm/ArchiApplication.java:10","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/ArchiApplication.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/ArchiApplication.java#L10","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/RepositoryAdapter.java:15 and app/src/main/java/uk/ivanc/archi/RepositoryAdapter.java:15","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/RepositoryAdapter.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/RepositoryAdapter.java#L15","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/RepositoryAdapter.java:20 and app-mvvm/src/main/java/uk/ivanc/archimvvm/RepositoryAdapter.java:19","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/RepositoryAdapter.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/RepositoryAdapter.java#L20","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/model/GithubService.java:13 and app-mvvm/src/main/java/uk/ivanc/archimvvm/model/GithubService.java:13","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/model/GithubService.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/model/GithubService.java#L13","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java:8 and app-mvvm/src/main/java/uk/ivanc/archimvvm/model/Repository.java:8","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java#L8","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java:36 and app-mvp/src/main/java/uk/ivanc/archimvp/model/User.java:29","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/model/Repository.java#L36","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/model/User.java:8 and app-mvvm/src/main/java/uk/ivanc/archimvvm/model/User.java:8","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/model/User.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/model/User.java#L8","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/presenter/MainPresenter.java:43 and app-mvvm/src/main/java/uk/ivanc/archimvvm/viewmodel/MainViewModel.java:105","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/presenter/MainPresenter.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/presenter/MainPresenter.java#L43","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/presenter/RepositoryPresenter.java:35 and app-mvvm/src/main/java/uk/ivanc/archimvvm/viewmodel/RepositoryViewModel.java:103","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/presenter/RepositoryPresenter.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/presenter/RepositoryPresenter.java#L35","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: app-mvp/src/main/java/uk/ivanc/archimvp/view/MainActivity.java:31 and app/src/main/java/uk/ivanc/archi/MainActivity.java:35","ref":"app-mvp/src/main/java/uk/ivanc/archimvp/view/MainActivity.java","url":"https://github.com/ivacf/archi/blob/30f1c690bf2b60c904fb3c968884b113780d935a/app-mvp/src/main/java/uk/ivanc/archimvp/view/MainActivity.java#L31","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":2257.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":0.4962,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":1.0,"test_lines":560.0,"source_lines":2257.0,"test_ratio":0.2481,"ci_files":0.0,"cochange_share":0.4375,"cochange_commits":16.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":35.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}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}