{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:04.727561Z","repo":{"ref":{"host":"github.com","owner":"ggirelli","name":"folia-web"},"default_branch":"main","clone_url":"https://github.com/ggirelli/folia-web.git","html_url":"https://github.com/ggirelli/folia-web","description":"Folia: Multi-modality Rust Static Website Generator","stars":1,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":3594,"primary_language":"Rust","license_spdx":"MIT","created_at":"2026-11-06T20:48:39Z","pushed_at":"2026-11-12T21:48:28Z","security_policy_url":null,"distribution":{"owner_created_at":"2012-04-12T09:10:43Z","owner_type":"User","release_assets":[{"name":"folia-v0.2.0-x86_64-unknown-linux-gnu.tar.gz","size":4509673,"download_count":7,"release_tag":"v0.2.0","url":"https://github.com/ggirelli/folia-web/releases/download/v0.2.0/folia-v0.2.0-x86_64-unknown-linux-gnu.tar.gz"},{"name":"folia-v0.2.0-x86_64-unknown-linux-gnu.tar.gz.sha256","size":111,"download_count":4,"release_tag":"v0.2.0","url":"https://github.com/ggirelli/folia-web/releases/download/v0.2.0/folia-v0.2.0-x86_64-unknown-linux-gnu.tar.gz.sha256"},{"name":"folia-v0.1.0-x86_64-unknown-linux-gnu.tar.gz","size":4170306,"download_count":15,"release_tag":"v0.1.0","url":"https://github.com/ggirelli/folia-web/releases/download/v0.1.0/folia-v0.1.0-x86_64-unknown-linux-gnu.tar.gz"},{"name":"folia-v0.1.0-x86_64-unknown-linux-gnu.tar.gz.sha256","size":111,"download_count":2,"release_tag":"v0.1.0","url":"https://github.com/ggirelli/folia-web/releases/download/v0.1.0/folia-v0.1.0-x86_64-unknown-linux-gnu.tar.gz.sha256"}]}},"commit_sha":"7f2f7a1486b140b110c16ee819c845fbcc4b5ffc","profile":{"lines_by_language":{"Rust":35340,"Shell":2375,"Python":1417,"Ruby":294,"JavaScript":35},"files_by_category":{"source":130,"docs":43,"config":23,"other":23,"binary":9,"test":6,"generated":2},"source_lines":38160,"test_lines":1301},"pillars":{"ai_provenance":{"score":100.0,"confidence":0.92,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":1.0,"suspected_share":0.0,"estimated_share":1.0,"ai_artifacts":1.0,"flagged_work_units":6.0,"flagged_releases":0.0,"style_index":0.118},"summary":"Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals."},"quality":{"score":82.4,"confidence":0.9,"coverage":1.0,"label":"strong","breakdown":{"complexity":81.5,"duplication":91.3,"lint":92.9,"testing":73.1,"docs":100.0,"type_safety":40.0,"process":null},"summary":"Code quality is strong: test-to-source ratio 0.03, CI runs tests; 7% of function code in complex or long functions; 2% duplicated lines. Weakest area: type safety."},"security":{"score":76.8,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":94.3,"dependencies":95.1,"ci_actions":1.3,"posture":60.0,"scorecard":null},"summary":"Security posture is adequate: 1 known vulnerabilities in 1 dependencies; 21 high-severity workflow issues. Weakest area: ci actions."}},"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":21.0,"checked":21.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":89.0,"attributed_commits":89.0,"attributed_commit_share":1.0,"effective_loc":41371.0,"attributed_loc":41371.0,"attributed_loc_share":1.0,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 89 attributed commits, 41,371 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"7f2f7a1486b140b110c16ee819c845fbcc4b5ffc","url":"https://github.com/ggirelli/folia-web/commit/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"a1d83c7c283eed62c7f22161f5752076cc1e563a","url":"https://github.com/ggirelli/folia-web/commit/a1d83c7c283eed62c7f22161f5752076cc1e563a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: message 'Generated with [Claude Code'","ref":"d7b722d990df54364aedfaa77dc5c44cb7a081a0","url":"https://github.com/ggirelli/folia-web/commit/d7b722d990df54364aedfaa77dc5c44cb7a081a0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"0c740dc727256dd8c42f8cf9f24e87a03c1fcd1e","url":"https://github.com/ggirelli/folia-web/commit/0c740dc727256dd8c42f8cf9f24e87a03c1fcd1e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: message 'Generated with [Claude Code'","ref":"c216d038bf27693f7f32586f2b7b92424bca8c4c","url":"https://github.com/ggirelli/folia-web/commit/c216d038bf27693f7f32586f2b7b92424bca8c4c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: message 'Generated with [Claude Code'","ref":"c541b2b74b024975bdd918ec6006892560671d77","url":"https://github.com/ggirelli/folia-web/commit/c541b2b74b024975bdd918ec6006892560671d77","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"d9964b5bce7dddfdd2736eaf7a959b6b6a21648a","url":"https://github.com/ggirelli/folia-web/commit/d9964b5bce7dddfdd2736eaf7a959b6b6a21648a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"83b5119561eafd1e02cb1e2024fbc5833da928ff","url":"https://github.com/ggirelli/folia-web/commit/83b5119561eafd1e02cb1e2024fbc5833da928ff","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"b9d0d880904ab879c7e4c3acf950f24bd0d0142c","url":"https://github.com/ggirelli/folia-web/commit/b9d0d880904ab879c7e4c3acf950f24bd0d0142c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"c341e54d5b49782c93d9709e10ecb9a3d9194afa","url":"https://github.com/ggirelli/folia-web/commit/c341e54d5b49782c93d9709e10ecb9a3d9194afa","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"0d2561b9531408a3428f0320a28406c235efbc19","url":"https://github.com/ggirelli/folia-web/commit/0d2561b9531408a3428f0320a28406c235efbc19","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"5e47da9fce39cbc3bcacc69b3594833ccb35901d","url":"https://github.com/ggirelli/folia-web/commit/5e47da9fce39cbc3bcacc69b3594833ccb35901d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"b49e35fc6c9714f0ad0efb03961d7483f1d0b10a","url":"https://github.com/ggirelli/folia-web/commit/b49e35fc6c9714f0ad0efb03961d7483f1d0b10a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"04cc9d1c940f6343f8ac3ad8fbce47b89ef716e1","url":"https://github.com/ggirelli/folia-web/commit/04cc9d1c940f6343f8ac3ad8fbce47b89ef716e1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"6ced507fd3c109404708374035e70d00862d4d36","url":"https://github.com/ggirelli/folia-web/commit/6ced507fd3c109404708374035e70d00862d4d36","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"7678e81dd98f64b699a857075648fcafe0f65d06","url":"https://github.com/ggirelli/folia-web/commit/7678e81dd98f64b699a857075648fcafe0f65d06","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"83e1c662cbe4481cb0a57d530b166b6d835aa1d6","url":"https://github.com/ggirelli/folia-web/commit/83e1c662cbe4481cb0a57d530b166b6d835aa1d6","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"009f63776f35baf178c630efabe2062972f925fd","url":"https://github.com/ggirelli/folia-web/commit/009f63776f35baf178c630efabe2062972f925fd","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"7d2ea1f6e61c87688cff4fbcd811441785152c66","url":"https://github.com/ggirelli/folia-web/commit/7d2ea1f6e61c87688cff4fbcd811441785152c66","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"c0fd0a6617d28dc272a34d563871da0b74a177f9","url":"https://github.com/ggirelli/folia-web/commit/c0fd0a6617d28dc272a34d563871da0b74a177f9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"36a9ba290e74035edd80121610d454ee80649e23","url":"https://github.com/ggirelli/folia-web/commit/36a9ba290e74035edd80121610d454ee80649e23","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"16493671275c6eb3d283469714218ad53383974e","url":"https://github.com/ggirelli/folia-web/commit/16493671275c6eb3d283469714218ad53383974e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"50e21755f8673eae12f11ef581856a2cdbbf3dda","url":"https://github.com/ggirelli/folia-web/commit/50e21755f8673eae12f11ef581856a2cdbbf3dda","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1906e4f6f75c16adba62f52dc7336fbcdfaa0c9f","url":"https://github.com/ggirelli/folia-web/commit/1906e4f6f75c16adba62f52dc7336fbcdfaa0c9f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"338c46ae1807f1957354b7fc4e80fb9f096b9baf","url":"https://github.com/ggirelli/folia-web/commit/338c46ae1807f1957354b7fc4e80fb9f096b9baf","weight":0.9}],"data":{"attributed_loc_by_commit":{"cb3b7d3e55f21af60a40610c96fdfda191efde18":0,"af4b90bc04e2e12efeec2d3048417d4bd709f2b3":0,"64df65a3c4a2cde6294f68ef93c5fe031fb14d91":0,"ebfe174574c8565d1cc60cee93dbef32d7e04a98":0,"d5ed6ffe7e6c4c5c7737c7bc617ae8dce417ab1e":0,"d0b2455875135694fd38feebf973045b75435f26":16,"d6f9800fc06f4f59ba66a7f0f37afd1923a79010":3039,"274c83b9961baed0845af38a94cc144d3a18fe66":270,"53b747e3efad316a2b5c0db7ed99b9b95834ae46":653,"4b7658161cf10885d7d3a2a23facf8b2d0828ff7":3890,"081cb8f610d8465c7c11c93142f52ef678e6b50a":2256,"d58ca13e5618d82ebd8d11bd1d6f36a5b2948e9a":0,"bed62b19c61e10002302e8b50d663b22f9660445":624,"d11fc328b22c06514cca5b4ec5b1592006282741":1880,"a7c0c2cba9774a4bf9766222a431f08d8ca2c50b":0,"61fcdd94476c112894fccd29adafc167a2e90891":1352,"d1cb484fad67caee151d04bf8924dd777d90d44b":0,"4965789386b51dc30806e7eb15c43cd33f70ebeb":0,"e201f6058ba3e230fefce162215942191ddfad36":5356,"5cf9b317bb4ebc275d5876a7c4dbca0a192c22aa":0,"f9fbf84f4e6dbc625fb27e0b99331c554a80b3b3":3293,"98fa93065d9402309bd87506caa1743bfd5cbef7":341,"c23f6c49eff3905da41c6b59139c1616b954a505":1204,"b17755d28c684545cb5f1d4d53de1be4f8ad1b72":957,"aa719da52231353913e028bda532aa22375b1b90":13,"dc176d164ee2115491588f949193bbec43d890a2":714,"14d345561f0af5be7b651fed0bf3369c672a5a6e":0,"a1eb9e91279c8fbdd354fad2e17b055a40f6abe4":576,"d8ca9595239999e7c04ce1271367568bb9018e4d":1486,"2d1b93d7bb0aef4c97693826f99319d4d040f943":222,"09f2116149c70b1f81c2c5b17a6fd6f6c311b0b5":0,"09a1795d3b666c538732954bd806a1ff81dbeab2":0,"e07e49dc943607d14991d8837359b4bfbc54a129":243,"bb2c776523085acc414dde7f7ed9596808db8642":52,"9831978a29a6dcc91974f2e5693302bd554a5d9e":529,"8306531535228c0a60ae3fa64626c7f6a6c5548a":224,"50ab3f0baea73c370f4c7af0c83e9f89d3459ff0":45,"9c02536c3a53db999159b2d207d3664cb432532c":71,"c1b8fc37ed1d85a54f36324d8eb65f0742d629bb":87,"f35fe90b10b7acc7524d8dc5847406ecd3fe7346":77,"9f0c570287e6936e809566b13a97fed8845fd38c":28,"6deed36dbaea7143846c773719d08ca4c52eeca3":76,"65bc23f100148fd642fca02907e973322a0ba567":53,"68b7d77595548af6c02c9dacea2b5ecf95098463":60,"3d5ff9bc3f48b563ffa6d83d46a8f79f69862d1f":48,"99c66aa49018eed61c767c94616e2a87c4046f42":98,"e8740576f0bbffabbefdf7987c7c878875aa81c8":294,"5897a4fb4ff1532166c25cc564b9ca055cd912fd":483,"1f4786936d7436213a1d3f109af68c94fc27c84b":622,"669ddca5a4baead7437d1c3b6e11417eb8d3ff95":501,"1aa49d89b05d830ec1b896209d5211c01d7b35dd":562,"bf2877f3bd32f23f50a53b3188a2fdad600f6815":207,"9e3bcf10c6a4958e5b57d9b1faa59fd3cbe6ee27":1028,"3473ea247949cd1600be168ab43e65c12e8815c5":225,"75d375389b5581f31193e341dce974e9fbaa3724":504,"4d30539c74245afacc6fac2647022f9e5a2a8678":189,"a0d5b51881d0f983d36c4206b9d0812e2dd83f11":9,"69d78f4d81c55cb3cbaadf5e07a4778e5631bf9d":678,"007bd72f4cf252f4dbecc404736d052420cdee48":674,"d9aec2b12f95d62a833ac9cd8e1834e0eb75d5e5":594,"a011e8c0bc1395562d5a698a4198bbcdb12c3f39":164,"a8b85893f2cba94a6805316bb679277cf66e89bd":471,"ff6f6e14be7ead874191397f2ade7f0faa5d2c75":20,"4e1f4d6c5af34764844bc56a6e9be00472f640cf":0,"338c46ae1807f1957354b7fc4e80fb9f096b9baf":316,"1906e4f6f75c16adba62f52dc7336fbcdfaa0c9f":70,"50e21755f8673eae12f11ef581856a2cdbbf3dda":14,"16493671275c6eb3d283469714218ad53383974e":0,"36a9ba290e74035edd80121610d454ee80649e23":0,"c0fd0a6617d28dc272a34d563871da0b74a177f9":45,"7d2ea1f6e61c87688cff4fbcd811441785152c66":131,"009f63776f35baf178c630efabe2062972f925fd":75,"83e1c662cbe4481cb0a57d530b166b6d835aa1d6":9,"7678e81dd98f64b699a857075648fcafe0f65d06":0,"6ced507fd3c109404708374035e70d00862d4d36":0,"04cc9d1c940f6343f8ac3ad8fbce47b89ef716e1":0,"b49e35fc6c9714f0ad0efb03961d7483f1d0b10a":1,"5e47da9fce39cbc3bcacc69b3594833ccb35901d":0,"0d2561b9531408a3428f0320a28406c235efbc19":2159,"c341e54d5b49782c93d9709e10ecb9a3d9194afa":672,"b9d0d880904ab879c7e4c3acf950f24bd0d0142c":110,"83b5119561eafd1e02cb1e2024fbc5833da928ff":15,"d9964b5bce7dddfdd2736eaf7a959b6b6a21648a":119,"c541b2b74b024975bdd918ec6006892560671d77":310,"c216d038bf27693f7f32586f2b7b92424bca8c4c":141,"0c740dc727256dd8c42f8cf9f24e87a03c1fcd1e":28,"d7b722d990df54364aedfaa77dc5c44cb7a081a0":0,"a1d83c7c283eed62c7f22161f5752076cc1e563a":98,"7f2f7a1486b140b110c16ee819c845fbcc4b5ffc":0},"tools":{"claude-code":{"name":"Claude Code","commits":89,"loc":41371,"first_seen":1792916916,"last_seen":1794520106}},"monthly":{"2026-10":{"loc":10748,"attributed_loc":10748},"2026-11":{"loc":30623,"attributed_loc":30623}}},"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":1792920038.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/CLAUDE.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1792920038}],"workflows":[],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":61.0,"flagged_units":6.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":41371.0,"flagged_loc":21661.0,"flagged_loc_share":0.523579318846535,"max_loc_per_hour":1796.3470319634703,"median_loc_per_hour":476.9806689168457,"pr_timed_units":48.0,"excluded_import_loc":0.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"7,868 lines of first-party code in ~4.4h (1,796 lines/hour, 5 commit session)","ref":"4b7658161cf10885d7d3a2a23facf8b2d0828ff7","url":"https://github.com/ggirelli/folia-web/commit/4b7658161cf10885d7d3a2a23facf8b2d0828ff7","weight":0.538904109589041},{"kind":"velocity-burst","description":"1,204 lines of first-party code in ~0.8h (1,545 lines/hour, 1 commit session)","ref":"c23f6c49eff3905da41c6b59139c1616b954a505","url":"https://github.com/ggirelli/folia-web/commit/c23f6c49eff3905da41c6b59139c1616b954a505","weight":0.46357219251336895},{"kind":"velocity-burst","description":"5,356 lines of first-party code in ~4.0h (1,339 lines/hour, 1 commit session)","ref":"e201f6058ba3e230fefce162215942191ddfad36","url":"https://github.com/ggirelli/folia-web/commit/e201f6058ba3e230fefce162215942191ddfad36","weight":0.4017},{"kind":"velocity-burst","description":"3,293 lines of first-party code in ~4.0h (823 lines/hour, 1 commit session)","ref":"f9fbf84f4e6dbc625fb27e0b99331c554a80b3b3","url":"https://github.com/ggirelli/folia-web/commit/f9fbf84f4e6dbc625fb27e0b99331c554a80b3b3","weight":0.246975},{"kind":"velocity-burst","description":"1,684 lines of first-party code in ~2.5h (662 lines/hour, 3 commit session)","ref":"dc176d164ee2115491588f949193bbec43d890a2","url":"https://github.com/ggirelli/folia-web/commit/dc176d164ee2115491588f949193bbec43d890a2","weight":0.19872377622377624},{"kind":"velocity-burst","description":"2,256 lines of first-party code in ~3.9h (576 lines/hour, 1 commit session)","ref":"081cb8f610d8465c7c11c93142f52ef678e6b50a","url":"https://github.com/ggirelli/folia-web/commit/081cb8f610d8465c7c11c93142f52ef678e6b50a","weight":0.17279999999999998}],"data":{"flagged_loc_by_commit":{"d0b2455875135694fd38feebf973045b75435f26":16,"d6f9800fc06f4f59ba66a7f0f37afd1923a79010":3039,"274c83b9961baed0845af38a94cc144d3a18fe66":270,"53b747e3efad316a2b5c0db7ed99b9b95834ae46":653,"4b7658161cf10885d7d3a2a23facf8b2d0828ff7":3890,"081cb8f610d8465c7c11c93142f52ef678e6b50a":2256,"e201f6058ba3e230fefce162215942191ddfad36":5356,"f9fbf84f4e6dbc625fb27e0b99331c554a80b3b3":3293,"c23f6c49eff3905da41c6b59139c1616b954a505":1204,"b17755d28c684545cb5f1d4d53de1be4f8ad1b72":957,"aa719da52231353913e028bda532aa22375b1b90":13,"dc176d164ee2115491588f949193bbec43d890a2":714},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":1.0,"flagged_releases":0.0,"max_loc_per_day":1759.6},"findings":[],"evidence":[],"data":{"releases":[{"from":"v0.1.0","to":"v0.2.0","loc":3555,"days":2.02,"loc_per_day":1759.6,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":38160.0,"index":0.118,"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":9.0,"per_kloc:emoji_in_code":0.236,"files:emoji_in_code":3.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":24.0,"findings_high":0.0,"findings_medium":1.0,"findings_low":23.0,"weighted_findings":6.35,"scanned_lines":38160.0,"parse_errors":4.0},"findings":[{"rule_id":"opengrep/ruby.lang.security.dangerous-exec","severity":"medium","message":"Detected non-static command inside Open3.capture2. Audit the input to 'Open3.capture2'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code. [confidence medium]","path":"parity/jekyll/folia_dump.rb","line":195,"fingerprint":"ruby.lang.security.dangerous-exec:parity/jekyll/folia_dump.rb:195"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/core/src/content/git.rs","line":107,"fingerprint":"rust.lang.security.temp-dir:crates/core/src/content/git.rs:107"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/core/src/content/git.rs","line":187,"fingerprint":"rust.lang.security.temp-dir:crates/core/src/content/git.rs:187"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/config.rs","line":382,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/config.rs:382"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/config.rs","line":404,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/config.rs:404"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/discover/tests.rs","line":12,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/discover/tests.rs:12"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/output/tests.rs","line":8,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/output/tests.rs:8"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/render/tests.rs","line":11,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/render/tests.rs:11"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/sass.rs","line":96,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/sass.rs:96"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/sass/tests.rs","line":12,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/sass/tests.rs:12"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/serve/files.rs","line":157,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/serve/files.rs:157"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/folia/src/serve/http.rs","line":153,"fingerprint":"rust.lang.security.temp-dir:crates/folia/src/serve/http.rs:153"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/baseline.rs","line":123,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/baseline.rs:123"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/builds.rs","line":211,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/builds.rs:211"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/builds/tests.rs","line":31,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/builds/tests.rs:31"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/coverage/tests.rs","line":526,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/coverage/tests.rs:526"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/document/ledger/tests.rs","line":60,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/document/ledger/tests.rs:60"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/document/ledger/tests.rs","line":821,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/document/ledger/tests.rs:821"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/document/tests.rs","line":279,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/document/tests.rs:279"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/links/register/tests.rs","line":31,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/links/register/tests.rs:31"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/links/tests.rs","line":134,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/links/tests.rs:134"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/liquid/tests.rs","line":127,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/liquid/tests.rs:127"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/routes.rs","line":447,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/routes.rs:447"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/parity/src/warnings/tests.rs","line":191,"fingerprint":"rust.lang.security.temp-dir:crates/parity/src/warnings/tests.rs:191"}],"evidence":[],"data":{"rulesets":["rust","bash","python","ruby","javascript"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":1.0,"vulnerabilities":1.0,"vulns_critical":0.0,"vulns_high":0.0,"vulns_medium":0.0,"vulns_low":0.0,"vulns_unknown":1.0,"penalty":3.0},"findings":[{"rule_id":"osv/RUSTSEC-2025-0141","severity":"medium","message":"bincode@1.3.3 (crates.io) is affected by RUSTSEC-2025-0141","path":"Cargo.lock","line":null,"fingerprint":"bincode@1.3.3 (crates.io):RUSTSEC-2025-0141"}],"evidence":[],"data":{"ecosystems":["PyPI","RubyGems","crates.io"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":3.0,"findings":27.0,"findings_high":21.0,"findings_medium":6.0,"findings_low":0.0,"penalty":262.0},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":26,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:26"},{"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":30,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:30"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":31,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:31"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":45,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:45"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":46,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:46"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":47,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:47"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":54,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:54"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":55,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:55"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":61,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:61"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":62,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:62"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":63,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:63"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":66,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:66"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":76,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:76"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":77,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:77"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":81,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:81"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/docs.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/docs.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/docs.yml","line":28,"fingerprint":"unpinned-uses:.github/workflows/docs.yml:28"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/docs.yml","line":29,"fingerprint":"unpinned-uses:.github/workflows/docs.yml:29"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/docs.yml","line":32,"fingerprint":"unpinned-uses:.github/workflows/docs.yml:32"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/docs.yml","line":48,"fingerprint":"unpinned-uses:.github/workflows/docs.yml:48"},{"rule_id":"zizmor/dependabot-cooldown","severity":"medium","message":"insufficient cooldown in Dependabot updates [confidence high]","path":".github/dependabot.yml","line":6,"fingerprint":"dependabot-cooldown:.github/dependabot.yml:6"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":26,"fingerprint":"artipacked:.github/workflows/ci.yml:26"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":45,"fingerprint":"artipacked:.github/workflows/ci.yml:45"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":54,"fingerprint":"artipacked:.github/workflows/ci.yml:54"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":61,"fingerprint":"artipacked:.github/workflows/ci.yml:61"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":76,"fingerprint":"artipacked:.github/workflows/ci.yml:76"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":1.0,"check:signed_commits":1.0,"check:lockfiles":0.0,"signed_commit_share":1.0,"unpinned_manifests":7.0},"findings":[],"evidence":[{"kind":"posture","description":"Dependency updates: .github/dependabot.yml","ref":".github/dependabot.yml","url":null,"weight":0.0},{"kind":"posture","description":"crates/blog/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/blog/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/core/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/core/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/folia/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/folia/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/garden/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/garden/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/micro/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/micro/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/pages/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/pages/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/parity/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/parity/Cargo.toml","url":null,"weight":0.3}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":2.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v0.2.0 ships folia-v0.2.0-x86_64-unknown-linux-gnu.tar.gz (7 downloads)","ref":"folia-v0.2.0-x86_64-unknown-linux-gnu.tar.gz","url":"https://github.com/ggirelli/folia-web/releases/download/v0.2.0/folia-v0.2.0-x86_64-unknown-linux-gnu.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v0.1.0 ships folia-v0.1.0-x86_64-unknown-linux-gnu.tar.gz (15 downloads)","ref":"folia-v0.1.0-x86_64-unknown-linux-gnu.tar.gz","url":"https://github.com/ggirelli/folia-web/releases/download/v0.1.0/folia-v0.1.0-x86_64-unknown-linux-gnu.tar.gz","weight":0.0}],"data":{"signals":["binary-release-assets"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":1511.0,"function_nloc":24518.0,"mean_ccn":2.79,"p90_ccn":7.0,"complex_functions":21.0,"long_functions":6.0,"many_param_functions":2.0,"risky_nloc_share":0.0681},"findings":[],"evidence":[{"kind":"complex-function","description":"report in parity/accept.py: complexity 33, 115 lines","ref":"parity/accept.py","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/parity/accept.py#L694","weight":0.55},{"kind":"complex-function","description":"build_page in crates/pages/src/lib.rs: complexity 30, 100 lines","ref":"crates/pages/src/lib.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/pages/src/lib.rs#L175","weight":0.5},{"kind":"complex-function","description":"check in crates/parity/src/document/ledger.rs: complexity 27, 93 lines","ref":"crates/parity/src/document/ledger.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/parity/src/document/ledger.rs#L328","weight":0.45},{"kind":"complex-function","description":"markdown in parity/accept.py: complexity 26, 110 lines","ref":"parity/accept.py","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/parity/accept.py#L811","weight":0.43333333333333335},{"kind":"complex-function","description":"quote_at in crates/core/src/content/markdown/typography.rs: complexity 23, 53 lines","ref":"crates/core/src/content/markdown/typography.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/core/src/content/markdown/typography.rs#L134","weight":0.38333333333333336},{"kind":"complex-function","description":"run in crates/parity/src/markdown/mod.rs: complexity 23, 65 lines","ref":"crates/parity/src/markdown/mod.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/parity/src/markdown/mod.rs#L108","weight":0.38333333333333336},{"kind":"complex-function","description":"content_type in crates/folia/src/serve/files.rs: complexity 22, 30 lines","ref":"crates/folia/src/serve/files.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/serve/files.rs#L67","weight":0.36666666666666664},{"kind":"complex-function","description":"entry in crates/parity/src/coverage.rs: complexity 22, 92 lines","ref":"crates/parity/src/coverage.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/parity/src/coverage.rs#L217","weight":0.36666666666666664},{"kind":"complex-function","description":"build_entry in crates/micro/src/entry.rs: complexity 20, 106 lines","ref":"crates/micro/src/entry.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/micro/src/entry.rs#L99","weight":0.3333333333333333},{"kind":"complex-function","description":"decided_class in crates/parity/src/coverage.rs: complexity 20, 88 lines","ref":"crates/parity/src/coverage.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/parity/src/coverage.rs#L777","weight":0.3333333333333333}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":28617.0,"duplicated_lines":432.0,"duplicated_share":0.0151,"files":130.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: crates/core/src/content/git.rs:118 and crates/parity/src/routes.rs:466","ref":"crates/core/src/content/git.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/core/src/content/git.rs#L118","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/core/src/content/git.rs:120 and crates/folia/src/build/tests.rs:68","ref":"crates/core/src/content/git.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/core/src/content/git.rs#L120","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/build/tests.rs:66 and crates/parity/src/builds/tests.rs:63","ref":"crates/folia/src/build/tests.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/build/tests.rs#L66","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/build/tests.rs:150 and crates/folia/src/discover/tests.rs:47","ref":"crates/folia/src/build/tests.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/build/tests.rs#L150","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/build/tests.rs:513 and crates/folia/src/build/tests.rs:668","ref":"crates/folia/src/build/tests.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/build/tests.rs#L513","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/discover/tests.rs:13 and crates/folia/src/render/tests.rs:12","ref":"crates/folia/src/discover/tests.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/discover/tests.rs#L13","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/discover/tests.rs:14 and crates/parity/src/liquid/tests.rs:129","ref":"crates/folia/src/discover/tests.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/discover/tests.rs#L14","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/feed/tests.rs:23 and crates/folia/src/search/tests.rs:17","ref":"crates/folia/src/feed/tests.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/feed/tests.rs#L23","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/feed/tests.rs:162 and crates/folia/src/feed/tests.rs:220","ref":"crates/folia/src/feed/tests.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/feed/tests.rs#L162","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/folia/src/main.rs:42 and crates/folia/src/main.rs:80","ref":"crates/folia/src/main.rs","url":"https://github.com/ggirelli/folia-web/blob/7f2f7a1486b140b110c16ee819c845fbcc4b5ffc/crates/folia/src/main.rs#L42","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":18.0,"weighted_findings":11.25,"scanned_lines":38160.0,"category:correctness":16.0,"category:maintainability":2.0},"findings":[{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"parity/accept.py","line":386,"fingerprint":"python.lang.maintainability.return-not-in-function:parity/accept.py:386"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"parity/accept.py","line":446,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:parity/accept.py:446"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"parity/accept.py","line":537,"fingerprint":"python.lang.maintainability.return-not-in-function:parity/accept.py:537"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"parity/accept.py","line":816,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:parity/accept.py:816"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"parity/accept.py","line":826,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:parity/accept.py:826"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"parity/accept.py","line":845,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:parity/accept.py:845"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"parity/accept.py","line":849,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:parity/accept.py:849"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"parity/accept.py","line":856,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:parity/accept.py:856"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"parity/accept.py","line":895,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:parity/accept.py:895"},{"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":"scripts/accept-negative.sh","line":346,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/accept-negative.sh:346"},{"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":"scripts/baseline.sh","line":83,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/baseline.sh:83"},{"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":"scripts/baseline.sh","line":118,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/baseline.sh:118"},{"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":"scripts/baseline.sh","line":137,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/baseline.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":"scripts/baseline.sh","line":138,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/baseline.sh:138"},{"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":"scripts/baseline.sh","line":264,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/baseline.sh:264"},{"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":"scripts/baseline.sh","line":288,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/baseline.sh:288"},{"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":"scripts/baseline.sh","line":292,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/baseline.sh:292"},{"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":"scripts/check-file-length.sh","line":16,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:scripts/check-file-length.sh:16"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0682,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":1.0,"check:tests_cochange":0.6349,"test_lines":1301.0,"source_lines":38160.0,"test_ratio":0.0341,"ci_files":3.0,"cochange_share":0.1587,"cochange_commits":63.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 config: .github/workflows/docs.yml","ref":".github/workflows/docs.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/release.yml","ref":".github/workflows/release.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (go test, cargo test, just test)","ref":null,"url":null,"weight":0.0},{"kind":"ci","description":"CI runs linters (clippy, rustfmt)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["go test","cargo test","just test"],"lint_commands":["clippy","rustfmt"]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":1.0,"check:changelog":1.0,"readme_lines":66.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},{"kind":"docs","description":"CONTRIBUTING.md","ref":"CONTRIBUTING.md","url":null,"weight":0.0},{"kind":"docs","description":"CHANGELOG.md","ref":"CHANGELOG.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":38160.0,"other_lines":0.0,"files_blamed":130.0,"blame_failures":0.0,"quality:ai_findings":18.0,"quality:ai_per_kloc":0.472,"quality:other_findings":0.0,"security:ai_findings":24.0,"security:ai_per_kloc":0.629,"security:other_findings":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}