{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-13T23:30:10.465284Z","repo":{"ref":{"host":"github.com","owner":"withoutboats","name":"notty"},"default_branch":"master","clone_url":"https://github.com/withoutboats/notty.git","html_url":"https://github.com/withoutboats/notty","description":"A new kind of terminal","stars":2327,"forks":40,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":2360,"primary_language":"Rust","license_spdx":"AGPL-3.0","created_at":"2015-11-15T09:16:04Z","pushed_at":"2017-03-27T19:50:28Z","security_policy_url":null,"distribution":{"owner_created_at":"2014-10-08T00:46:37Z","owner_type":"User","release_assets":[]}},"commit_sha":"077b57357f3feff0a4b267d1faabaa0ddaf2b65e","profile":{"lines_by_language":{"Rust":8869,"Shell":9,"Ruby":5},"files_by_category":{"source":64,"config":8,"docs":5,"other":2,"binary":2},"source_lines":8883,"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":null},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":47.1,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":56.4,"duplication":49.0,"lint":99.3,"testing":0.0,"docs":65.0,"type_safety":null,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 19% of function code in complex or long functions; 12% duplicated lines. Weakest area: testing."},"security":{"score":72.8,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":75.2,"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":"ok","tool_version":null,"metrics":{"declared":19.0,"checked":19.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":140.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":18226.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2015-11":{"loc":9387,"attributed_loc":0},"2015-12":{"loc":1577,"attributed_loc":0},"2016-01":{"loc":6,"attributed_loc":0},"2016-02":{"loc":1132,"attributed_loc":0},"2016-03":{"loc":256,"attributed_loc":0},"2016-04":{"loc":1632,"attributed_loc":0},"2016-05":{"loc":1452,"attributed_loc":0},"2016-06":{"loc":43,"attributed_loc":0},"2016-07":{"loc":2200,"attributed_loc":0},"2016-08":{"loc":1,"attributed_loc":0},"2016-10":{"loc":540,"attributed_loc":0},"2017-01":{"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":76.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":13543.0,"pre_ai_era_burst_loc":0.0,"measured_loc":13543.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":353.75,"median_loc_per_hour":63.87256248283438,"pr_timed_units":4.0,"excluded_import_loc":4683.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["f29afc349ce94ae6237d2672a24fe885ee7d71e0"]},"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":8883.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":29.0,"findings_high":0.0,"findings_medium":0.0,"findings_low":29.0,"weighted_findings":7.25,"scanned_lines":8883.0,"parse_errors":4.0},"findings":[{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":27,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:27"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":33,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:33"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":38,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:38"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":43,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:43"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":48,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:48"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":53,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:53"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":58,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:58"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":63,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:63"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr.rs","line":78,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr.rs:78"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr_list.rs","line":27,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr_list.rs:27"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr_list.rs","line":31,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr_list.rs:31"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr_list.rs","line":44,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr_list.rs:44"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/attr_list.rs","line":50,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/attr_list.rs:50"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/layout.rs","line":36,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/layout.rs:36"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/layout.rs","line":50,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/layout.rs:50"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/layout.rs","line":57,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/layout.rs:57"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/layout.rs","line":71,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/layout.rs:71"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/pangocairo/src/wrap/layout.rs","line":77,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/pangocairo/src/wrap/layout.rs:77"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/src/cfg.rs","line":28,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/src/cfg.rs:28"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/src/image_renderer.rs","line":27,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/src/image_renderer.rs:27"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"notty-cairo/src/image_renderer.rs","line":36,"fingerprint":"rust.lang.security.unsafe-usage:notty-cairo/src/image_renderer.rs:36"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/src/main.rs","line":124,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/src/main.rs:124"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/src/main.rs","line":133,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/src/main.rs:133"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/tty/src/lib.rs","line":56,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/tty/src/lib.rs:56"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/tty/src/lib.rs","line":64,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/tty/src/lib.rs:64"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/tty/src/lib.rs","line":88,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/tty/src/lib.rs:88"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/tty/src/lib.rs","line":110,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/tty/src/lib.rs:110"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/tty/src/lib.rs","line":138,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/tty/src/lib.rs:138"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"scaffolding/tty/src/lib.rs","line":156,"fingerprint":"rust.lang.security.unsafe-usage:scaffolding/tty/src/lib.rs:156"}],"evidence":[],"data":{"rulesets":["rust","bash","ruby"]},"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":0.0,"signed_commit_share":0.0,"unpinned_manifests":6.0},"findings":[],"evidence":[{"kind":"posture","description":"Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"notty-cairo/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"notty-cairo/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"notty-cairo/pangocairo/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"notty-cairo/pangocairo/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"scaffolding/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"scaffolding/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"scaffolding/echotest/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"scaffolding/echotest/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"scaffolding/tty/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"scaffolding/tty/Cargo.toml","url":null,"weight":0.3}],"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":602.0,"function_nloc":4690.0,"mean_ccn":2.6,"p90_ccn":4.0,"complex_functions":14.0,"long_functions":2.0,"many_param_functions":1.0,"risky_nloc_share":0.191},"findings":[],"evidence":[{"kind":"complex-function","description":"csi in src/output/ansi.rs: complexity 214, 260 lines","ref":"src/output/ansi.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/output/ansi.rs#L51","weight":1.0},{"kind":"complex-function","description":"parse in src/output/notty/mod.rs: complexity 38, 130 lines","ref":"src/output/notty/mod.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/output/notty/mod.rs#L37","weight":0.6333333333333333},{"kind":"complex-function","description":"move_within in src/datatypes/mod.rs: complexity 34, 85 lines","ref":"src/datatypes/mod.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/datatypes/mod.rs#L71","weight":0.5666666666666667},{"kind":"complex-function","description":"new in scaffolding/src/key.rs: complexity 32, 37 lines","ref":"scaffolding/src/key.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/scaffolding/src/key.rs#L30","weight":0.5333333333333333},{"kind":"complex-function","description":"encode in src/terminal/input/notty.rs: complexity 27, 31 lines","ref":"src/terminal/input/notty.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/input/notty.rs#L48","weight":0.45},{"kind":"complex-function","description":"encode in src/terminal/input/ansi.rs: complexity 26, 37 lines","ref":"src/terminal/input/ansi.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/input/ansi.rs#L51","weight":0.43333333333333335},{"kind":"complex-function","description":"repr in src/command/movement.rs: complexity 23, 27 lines","ref":"src/command/movement.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/command/movement.rs#L31","weight":0.38333333333333336},{"kind":"complex-function","description":"write in src/terminal/input/buffer.rs: complexity 22, 52 lines","ref":"src/terminal/input/buffer.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/input/buffer.rs#L37","weight":0.36666666666666664},{"kind":"complex-function","description":"echo in src/terminal/input/line_echo.rs: complexity 22, 61 lines","ref":"src/terminal/input/line_echo.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/input/line_echo.rs#L41","weight":0.36666666666666664},{"kind":"complex-function","description":"scroll in src/terminal/char_grid/grid/mod.rs: complexity 20, 18 lines","ref":"src/terminal/char_grid/grid/mod.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/char_grid/grid/mod.rs#L180","weight":0.3333333333333333}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":6042.0,"duplicated_lines":719.0,"duplicated_share":0.119,"files":64.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: notty-cairo/pangocairo/src/ffi.rs:1 and notty-cairo/pangocairo/src/lib.rs:1","ref":"notty-cairo/pangocairo/src/ffi.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/notty-cairo/pangocairo/src/ffi.rs#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: scaffolding/src/cfg/toml.rs:10 and src/output/ansi.rs:10","ref":"scaffolding/src/cfg/toml.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/scaffolding/src/cfg/toml.rs#L10","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: scaffolding/tty/src/lib.rs:50 and scaffolding/tty/src/lib.rs:132","ref":"scaffolding/tty/src/lib.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/scaffolding/tty/src/lib.rs#L50","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/command/meta.rs:10 and src/command/movement.rs:10","ref":"src/command/meta.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/command/meta.rs#L10","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datatypes/iter.rs:127 and src/datatypes/iter.rs:149","ref":"src/datatypes/iter.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/datatypes/iter.rs#L127","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/output/ansi.rs:116 and src/output/ansi.rs:159","ref":"src/output/ansi.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/output/ansi.rs#L116","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/terminal/char_grid/grid/mod.rs:47 and src/terminal/char_grid/grid/mod.rs:166","ref":"src/terminal/char_grid/grid/mod.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/char_grid/grid/mod.rs#L47","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/terminal/char_grid/writers/tests.rs:15 and src/terminal/char_grid/writers/tests.rs:147","ref":"src/terminal/char_grid/writers/tests.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/char_grid/writers/tests.rs#L15","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/terminal/screen/section.rs:262 and src/terminal/screen/section.rs:317","ref":"src/terminal/screen/section.rs","url":"https://github.com/withoutboats/notty/blob/077b57357f3feff0a4b267d1faabaa0ddaf2b65e/src/terminal/screen/section.rs#L262","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":0.25,"scanned_lines":8883.0,"category:correctness":1.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":"build_test.sh","line":6,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:build_test.sh:6"}],"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":8883.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":117.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":99.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"COPYING","ref":"COPYING","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":[]}