{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.614770Z","repo":{"ref":{"host":"github.com","owner":"jonwiggins","name":"cqlite"},"default_branch":"main","clone_url":"https://github.com/jonwiggins/cqlite.git","html_url":"https://github.com/jonwiggins/cqlite","description":"Lightweight SQLite implementation in Rust","stars":1,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":1033,"primary_language":"Rust","license_spdx":null,"created_at":"2026-02-09T07:22:18Z","pushed_at":"2026-02-22T18:16:07Z","security_policy_url":null,"distribution":{"owner_created_at":"2018-01-17T18:47:54Z","owner_type":"User","release_assets":[]}},"commit_sha":"18d2647c741ba7823e693f4787eaa1e26224b1dc","profile":{"lines_by_language":{"Rust":22691,"Shell":19},"files_by_category":{"source":18,"other":6,"config":3,"docs":2,"test":2,"generated":1,"oversized":1},"source_lines":20589,"test_lines":2121},"pillars":{"ai_provenance":{"score":62.5,"confidence":0.76,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.6248,"suspected_share":0.3079,"estimated_share":0.6248,"ai_artifacts":1.0,"flagged_work_units":3.0,"flagged_releases":null,"style_index":0.097},"summary":"Explicit AI attribution on 62% of first-party code added; an estimated 62% including velocity signals."},"quality":{"score":63.6,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":28.9,"duplication":61.8,"lint":100.0,"testing":80.2,"docs":40.0,"type_safety":null,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.10, CI runs tests; 41% of function code in complex or long functions; 8% duplicated lines. Weakest area: complexity."},"security":{"score":74.7,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":98.7,"dependencies":90.5,"ci_actions":29.5,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 2 known vulnerabilities in 2 dependencies; 5 high-severity workflow issues. 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":"ok","tool_version":null,"metrics":{"declared":2.0,"checked":2.0,"missing":0.0,"recent":0.0,"lookup_errors":0.0},"findings":[],"evidence":[],"data":{"phantom":false},"error":null},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":24.0,"attributed_commits":7.0,"attributed_commit_share":0.2916666666666667,"effective_loc":24199.0,"attributed_loc":15119.0,"attributed_loc_share":0.6247778833836108,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 7 attributed commits, 15,119 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c6c6d4b0a294e7963b79161c71af59c3f835dd64","url":"https://github.com/jonwiggins/cqlite/commit/c6c6d4b0a294e7963b79161c71af59c3f835dd64","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"748884c61bfece888b726a0483f5e6f4409fa813","url":"https://github.com/jonwiggins/cqlite/commit/748884c61bfece888b726a0483f5e6f4409fa813","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c39dbb66639771ad0822b6e895916fa8b38c59ad","url":"https://github.com/jonwiggins/cqlite/commit/c39dbb66639771ad0822b6e895916fa8b38c59ad","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"9dc8bce9249b9d4ba02d307fec08e279ecdbf092","url":"https://github.com/jonwiggins/cqlite/commit/9dc8bce9249b9d4ba02d307fec08e279ecdbf092","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3d9f857188c899059b5c1aa6bce238be4b8e16d8","url":"https://github.com/jonwiggins/cqlite/commit/3d9f857188c899059b5c1aa6bce238be4b8e16d8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"88ee95a7a2645bbbb7563544b475e678695a260d","url":"https://github.com/jonwiggins/cqlite/commit/88ee95a7a2645bbbb7563544b475e678695a260d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"cd01c0bdf5c508a34d05609dc0f9d24c42bdfbbd","url":"https://github.com/jonwiggins/cqlite/commit/cd01c0bdf5c508a34d05609dc0f9d24c42bdfbbd","weight":0.9}],"data":{"attributed_loc_by_commit":{"cd01c0bdf5c508a34d05609dc0f9d24c42bdfbbd":6573,"88ee95a7a2645bbbb7563544b475e678695a260d":4694,"3d9f857188c899059b5c1aa6bce238be4b8e16d8":1213,"9dc8bce9249b9d4ba02d307fec08e279ecdbf092":1321,"c39dbb66639771ad0822b6e895916fa8b38c59ad":475,"748884c61bfece888b726a0483f5e6f4409fa813":558,"c6c6d4b0a294e7963b79161c71af59c3f835dd64":285},"tools":{"claude-code":{"name":"Claude Code","commits":7,"loc":15119,"first_seen":1771703907,"last_seen":1771706969}},"monthly":{"2026-02":{"loc":24199,"attributed_loc":15119}}},"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":1770622908.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/CLAUDE.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1770622908}],"workflows":[],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":6.0,"flagged_units":3.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":12932.0,"flagged_loc":11303.0,"flagged_loc_share":0.8740334055057223,"max_loc_per_hour":1691.1825420230018,"median_loc_per_hour":1101.1043233082705,"pr_timed_units":0.0,"excluded_import_loc":11267.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"4,779 lines of first-party code in ~2.8h (1,691 lines/hour, 5 commit session)","ref":"8470049eaf1d4aec670ca9b3bb5b2151d74429e3","url":"https://github.com/jonwiggins/cqlite/commit/8470049eaf1d4aec670ca9b3bb5b2151d74429e3","weight":0.5073547626069005},{"kind":"velocity-burst","description":"1,317 lines of first-party code in ~1.0h (1,385 lines/hour, 1 commit session)","ref":"2d1e7ea61737ef1f6f3102d3943fea82b8d14284","url":"https://github.com/jonwiggins/cqlite/commit/2d1e7ea61737ef1f6f3102d3943fea82b8d14284","weight":0.41553023663453115},{"kind":"velocity-burst","description":"5,207 lines of first-party code in ~4.7h (1,101 lines/hour, 7 commit session)","ref":"e6a035864014f2a814c154b2e3291fc84975be92","url":"https://github.com/jonwiggins/cqlite/commit/e6a035864014f2a814c154b2e3291fc84975be92","weight":0.33033129699248115}],"data":{"flagged_loc_by_commit":{"3d9f857188c899059b5c1aa6bce238be4b8e16d8":1213,"9dc8bce9249b9d4ba02d307fec08e279ecdbf092":1321,"c39dbb66639771ad0822b6e895916fa8b38c59ad":475,"748884c61bfece888b726a0483f5e6f4409fa813":558,"c6c6d4b0a294e7963b79161c71af59c3f835dd64":285,"f7eb68161a90e6c533702b0e428a683d2c89e79b":594,"e6a035864014f2a814c154b2e3291fc84975be92":761,"caae445855dd18005bc6bbf64836f553be71e8ad":2149,"e3a54e4d9951e6adb6c48957f4facc1624a7eba8":4,"d359e13726edff7165a65fc9414254350f5f9543":1698,"170c699d3b356141e18ba040c9fb13ccc59c293b":918,"8470049eaf1d4aec670ca9b3bb5b2151d74429e3":10,"2d1e7ea61737ef1f6f3102d3943fea82b8d14284":1317},"excluded_import_commits":["88ee95a7a2645bbbb7563544b475e678695a260d","cd01c0bdf5c508a34d05609dc0f9d24c42bdfbbd"]},"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":20589.0,"index":0.097,"count:narrated_steps":2.0,"per_kloc:narrated_steps":0.097,"files:narrated_steps":2.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":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, determine serial types and encode values.","ref":"src/record.rs:53","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/record.rs#L53","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, resolve what each result column maps to.","ref":"src/vm.rs:1615","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/vm.rs#L1615","weight":0.0}],"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":0.0,"findings_low":3.0,"weighted_findings":0.75,"scanned_lines":20589.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"src/main.rs","line":30,"fingerprint":"rust.lang.security.args:src/main.rs:30"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src/main.rs","line":549,"fingerprint":"rust.lang.security.unsafe-usage:src/main.rs:549"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src/main.rs","line":564,"fingerprint":"rust.lang.security.unsafe-usage:src/main.rs:564"}],"evidence":[],"data":{"rulesets":["rust","bash"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":2.0,"vulnerabilities":2.0,"vulns_critical":0.0,"vulns_high":0.0,"vulns_medium":0.0,"vulns_low":0.0,"vulns_unknown":2.0,"penalty":6.0},"findings":[{"rule_id":"osv/RUSTSEC-2026-0190","severity":"medium","message":"anyhow@1.0.102 (crates.io) is affected by RUSTSEC-2026-0190","path":"Cargo.lock","line":null,"fingerprint":"anyhow@1.0.102 (crates.io):RUSTSEC-2026-0190"},{"rule_id":"osv/RUSTSEC-2026-0486","severity":"medium","message":"rustix@1.1.3 (crates.io) is affected by RUSTSEC-2026-0486","path":"Cargo.lock","line":null,"fingerprint":"rustix@1.1.3 (crates.io):RUSTSEC-2026-0486"}],"evidence":[],"data":{"ecosystems":["crates.io"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":1.0,"findings":12.0,"findings_high":5.0,"findings_medium":7.0,"findings_low":0.0,"penalty":73.2},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":17,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:17"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":27,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:27"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":43,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:43"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":44,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:44"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":17,"fingerprint":"artipacked:.github/workflows/ci.yml:17"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":25,"fingerprint":"artipacked:.github/workflows/ci.yml:25"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":43,"fingerprint":"artipacked:.github/workflows/ci.yml:43"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":1,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:1"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":13,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:13"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":21,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:21"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":36,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:36"}],"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":701.0,"function_nloc":15678.0,"mean_ccn":5.57,"p90_ccn":12.0,"complex_functions":52.0,"long_functions":24.0,"many_param_functions":1.0,"risky_nloc_share":0.4136},"findings":[],"evidence":[{"kind":"complex-function","description":"call_scalar in src/functions.rs: complexity 148, 437 lines","ref":"src/functions.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/functions.rs#L11","weight":1.0},{"kind":"complex-function","description":"execute_select_with_ctes in src/vm.rs: complexity 131, 600 lines","ref":"src/vm.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/vm.rs#L365","weight":1.0},{"kind":"complex-function","description":"fmt in src/tokenizer.rs: complexity 122, 126 lines","ref":"src/tokenizer.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/tokenizer.rs#L148","weight":1.0},{"kind":"complex-function","description":"eval_expr in src/vm.rs: complexity 116, 257 lines","ref":"src/vm.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/vm.rs#L1828","weight":1.0},{"kind":"complex-function","description":"lookup_keyword in src/tokenizer.rs: complexity 94, 98 lines","ref":"src/tokenizer.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/tokenizer.rs#L281","weight":1.0},{"kind":"complex-function","description":"execute_insert in src/planner.rs: complexity 66, 220 lines","ref":"src/planner.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/planner.rs#L303","weight":1.0},{"kind":"complex-function","description":"eval_aggregate_function in src/vm.rs: complexity 64, 212 lines","ref":"src/vm.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/vm.rs#L1362","weight":1.0},{"kind":"complex-function","description":"parse_primary in src/parser.rs: complexity 52, 138 lines","ref":"src/parser.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/parser.rs#L1461","weight":0.8666666666666667},{"kind":"complex-function","description":"parse_create_table in src/parser.rs: complexity 49, 83 lines","ref":"src/parser.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/parser.rs#L664","weight":0.8166666666666667},{"kind":"complex-function","description":"parse_comparison in src/parser.rs: complexity 49, 128 lines","ref":"src/parser.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/parser.rs#L1217","weight":0.8166666666666667}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":15069.0,"duplicated_lines":1207.0,"duplicated_share":0.0801,"files":18.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src/ast.rs:451 and src/planner.rs:2890","ref":"src/ast.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/ast.rs#L451","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/btree.rs:310 and src/btree.rs:368","ref":"src/btree.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/btree.rs#L310","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/btree.rs:1627 and src/schema.rs:177","ref":"src/btree.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/btree.rs#L1627","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/format.rs:216 and src/format.rs:229","ref":"src/format.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/format.rs#L216","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/journal.rs:53 and src/journal.rs:286","ref":"src/journal.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/journal.rs#L53","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/parser.rs:131 and src/parser.rs:533","ref":"src/parser.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/parser.rs#L131","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/planner.rs:413 and src/planner.rs:698","ref":"src/planner.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/planner.rs#L413","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/planner.rs:1971 and src/vm.rs:1924","ref":"src/planner.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/planner.rs#L1971","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/planner.rs:2831 and src/schema.rs:413","ref":"src/planner.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/planner.rs#L2831","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/tokenizer.rs:551 and src/tokenizer.rs:839","ref":"src/tokenizer.rs","url":"https://github.com/jonwiggins/cqlite/blob/18d2647c741ba7823e693f4787eaa1e26224b1dc/src/tokenizer.rs#L551","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":20589.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.206,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":1.0,"check:tests_cochange":1.0,"test_lines":2121.0,"source_lines":20589.0,"test_ratio":0.103,"ci_files":1.0,"cochange_share":0.3333,"cochange_commits":18.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/ci.yml","ref":".github/workflows/ci.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (go test, cargo test)","ref":null,"url":null,"weight":0.0},{"kind":"ci","description":"CI runs linters (clippy, rustfmt, cargo fmt)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["go test","cargo test"],"lint_commands":["clippy","rustfmt","cargo fmt"]},"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":104.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":13970.0,"other_lines":6619.0,"files_blamed":18.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":0.0,"quality:other_per_kloc":0.0,"security:ai_findings":3.0,"security:ai_per_kloc":0.215,"security:other_findings":0.0,"security:other_per_kloc":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":[]}