{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.419507Z","repo":{"ref":{"host":"github.com","owner":"jehan593","name":"arch-config"},"default_branch":"main","clone_url":"https://github.com/jehan593/arch-config.git","html_url":"https://github.com/jehan593/arch-config","description":"Personal Arch Linux (Cinnamon) system setup: dotfiles, install/reset scripts, and CLI tools for WireGuard, tunnels, and more","stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":180,"primary_language":"Shell","license_spdx":null,"created_at":"2026-02-16T02:47:29Z","pushed_at":"2026-11-11T02:44:23Z","security_policy_url":null,"distribution":{"owner_created_at":"2025-09-29T22:07:24Z","owner_type":"User","release_assets":[]}},"commit_sha":"76849836c4120bf53d1f3f137071e4f244884417","profile":{"lines_by_language":{"Shell":1849,"Lua":159,"JavaScript":4},"files_by_category":{"source":18,"config":8,"docs":6,"other":2},"source_lines":2012,"test_lines":0},"pillars":{"ai_provenance":{"score":0.4,"confidence":0.79,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.0042,"suspected_share":0.0,"estimated_share":0.0042,"ai_artifacts":1.0,"flagged_work_units":0.0,"flagged_releases":null,"style_index":0.0},"summary":"Explicit AI attribution on 0% of first-party code added; an estimated 0% including velocity signals."},"quality":{"score":58.4,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":100.0,"duplication":89.3,"lint":81.7,"testing":0.0,"docs":40.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; 2% duplicated lines. Weakest area: testing."},"security":{"score":81.8,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":100.0,"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":35.0,"attributed_commits":4.0,"attributed_commit_share":0.11428571428571428,"effective_loc":2632.0,"attributed_loc":11.0,"attributed_loc_share":0.004179331306990881,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 4 attributed commits, 11 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"34c3d128f151cc4c979420dd201303f0fe09049a","url":"https://github.com/jehan593/arch-config/commit/34c3d128f151cc4c979420dd201303f0fe09049a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e0849d9d392c988db608cbe04fca54041f7e5235","url":"https://github.com/jehan593/arch-config/commit/e0849d9d392c988db608cbe04fca54041f7e5235","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"70ff9d70d37597c41083d30be3ddde7bde0fffd9","url":"https://github.com/jehan593/arch-config/commit/70ff9d70d37597c41083d30be3ddde7bde0fffd9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"74b7bd198452c39410bc73ca1cd1939af4842b7a","url":"https://github.com/jehan593/arch-config/commit/74b7bd198452c39410bc73ca1cd1939af4842b7a","weight":0.9}],"data":{"attributed_loc_by_commit":{"74b7bd198452c39410bc73ca1cd1939af4842b7a":11,"70ff9d70d37597c41083d30be3ddde7bde0fffd9":0,"e0849d9d392c988db608cbe04fca54041f7e5235":0,"34c3d128f151cc4c979420dd201303f0fe09049a":0},"tools":{"claude-code":{"name":"Claude Code","commits":4,"loc":11,"first_seen":1784556638,"last_seen":1785283994}},"monthly":{"2026-07":{"loc":2225,"attributed_loc":11},"2026-08":{"loc":277,"attributed_loc":0},"2026-09":{"loc":29,"attributed_loc":0},"2026-10":{"loc":94,"attributed_loc":0},"2026-11":{"loc":7,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":1.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1785283987.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/jehan593/arch-config/blob/76849836c4120bf53d1f3f137071e4f244884417/CLAUDE.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1785283987}],"workflows":[],"tools":["claude-code"]},"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":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":2632.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":410.75,"median_loc_per_hour":276.75,"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":2012.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":0.0,"findings_high":0.0,"findings_medium":0.0,"findings_low":0.0,"weighted_findings":0.0,"scanned_lines":1853.0,"parse_errors":2.0},"findings":[],"evidence":[],"data":{"rulesets":["bash","javascript"]},"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":8.0,"function_nloc":68.0,"mean_ccn":2.62,"p90_ccn":6.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":1489.0,"duplicated_lines":28.0,"duplicated_share":0.0188,"files":18.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: reset.sh:5 and setup.sh:5","ref":"reset.sh","url":"https://github.com/jehan593/arch-config/blob/76849836c4120bf53d1f3f137071e4f244884417/reset.sh#L5","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":6.0,"weighted_findings":1.5,"scanned_lines":1853.0,"category:correctness":6.0},"findings":[{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"tools/timer.sh","line":137,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:tools/timer.sh:137"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"tools/timer.sh","line":147,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:tools/timer.sh:147"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"tools/timer.sh","line":149,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:tools/timer.sh:149"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-command-substitution-in-command","severity":"low","message":"The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result.","path":"tools/timer.sh","line":240,"fingerprint":"bash.lang.correctness.unquoted-command-substitution-in-command:tools/timer.sh:240"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"tools/timer.sh","line":386,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:tools/timer.sh:386"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"tools/timer.sh","line":390,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:tools/timer.sh:390"}],"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":2012.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"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":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":90.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.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},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":11.0,"other_lines":2001.0,"files_blamed":18.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":6.0,"quality:other_per_kloc":2.999,"security:ai_findings":0.0,"security:ai_per_kloc":0.0,"security:other_findings":0.0,"security:other_per_kloc":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}