{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:00.974828Z","repo":{"ref":{"host":"github.com","owner":"MarkMcCaskey","name":"factorioctl"},"default_branch":"main","clone_url":"https://github.com/MarkMcCaskey/factorioctl.git","html_url":"https://github.com/MarkMcCaskey/factorioctl","description":"CLI to control Factorio + tools for Claude code to play Factorio","stars":11,"forks":1,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":278,"primary_language":"Rust","license_spdx":null,"created_at":"2026-01-26T05:35:36Z","pushed_at":"2026-01-26T06:57:31Z","security_policy_url":null,"distribution":{"owner_created_at":"2013-10-25T00:50:51Z","owner_type":"User","release_assets":[]}},"commit_sha":"c3abe9ea099b549e18b149d0ea483de21a73bdbe","profile":{"lines_by_language":{"Rust":17439,"Python":619,"Shell":343},"files_by_category":{"source":61,"docs":17,"config":9,"test":5,"generated":1},"source_lines":17555,"test_lines":846},"pillars":{"ai_provenance":{"score":100.0,"confidence":0.89,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":1.0,"suspected_share":0.0,"estimated_share":1.0,"ai_artifacts":2.0,"flagged_work_units":5.0,"flagged_releases":null,"style_index":0.142},"summary":"Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals."},"quality":{"score":48.0,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":41.9,"duplication":53.8,"lint":100.0,"testing":23.1,"docs":40.0,"type_safety":40.0,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.05, no CI test run detected; 29% of function code in complex or long functions; 10% duplicated lines. Weakest area: testing."},"security":{"score":77.8,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":98.5,"dependencies":68.2,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 11 known vulnerabilities in 6 dependencies; 1 high-severity SAST 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":13.0,"checked":13.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":74.0,"attributed_commits":69.0,"attributed_commit_share":0.9324324324324325,"effective_loc":19931.0,"attributed_loc":19931.0,"attributed_loc_share":1.0,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 69 attributed commits, 19,931 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2e1a9c302d2579edaf6420f501c97ac13925b6e1","url":"https://github.com/MarkMcCaskey/factorioctl/commit/2e1a9c302d2579edaf6420f501c97ac13925b6e1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a85460a49ba50b5e41ea4a63d4d494adcf8669fa","url":"https://github.com/MarkMcCaskey/factorioctl/commit/a85460a49ba50b5e41ea4a63d4d494adcf8669fa","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0e76e5e0a9469993bb13fe1e958e6ab70766ff50","url":"https://github.com/MarkMcCaskey/factorioctl/commit/0e76e5e0a9469993bb13fe1e958e6ab70766ff50","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b53d36b3d089c4bd17f3ae87386ce925148f46fa","url":"https://github.com/MarkMcCaskey/factorioctl/commit/b53d36b3d089c4bd17f3ae87386ce925148f46fa","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d5c038a17c27eb1d31c2b1b9363c57572ca4f149","url":"https://github.com/MarkMcCaskey/factorioctl/commit/d5c038a17c27eb1d31c2b1b9363c57572ca4f149","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"9f406c8eca40bdf7f81819d5e632fa1988ea7c3d","url":"https://github.com/MarkMcCaskey/factorioctl/commit/9f406c8eca40bdf7f81819d5e632fa1988ea7c3d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"abb7ff6fbe23472cbb7f84056d24b38193a0a843","url":"https://github.com/MarkMcCaskey/factorioctl/commit/abb7ff6fbe23472cbb7f84056d24b38193a0a843","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7a4f33031a459a4537eff35931e54e15034d8645","url":"https://github.com/MarkMcCaskey/factorioctl/commit/7a4f33031a459a4537eff35931e54e15034d8645","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a622373d0d1b93433da4e7c5ef476ef4ebf0d79d","url":"https://github.com/MarkMcCaskey/factorioctl/commit/a622373d0d1b93433da4e7c5ef476ef4ebf0d79d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b5a8ec28c1afba77ca7c2dbc1828a18670b7adae","url":"https://github.com/MarkMcCaskey/factorioctl/commit/b5a8ec28c1afba77ca7c2dbc1828a18670b7adae","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"90ee39d87770a3a4020e67ae18087f86fa57913a","url":"https://github.com/MarkMcCaskey/factorioctl/commit/90ee39d87770a3a4020e67ae18087f86fa57913a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7cd78d716523ae8a9a768b341120a16bc5bd4df3","url":"https://github.com/MarkMcCaskey/factorioctl/commit/7cd78d716523ae8a9a768b341120a16bc5bd4df3","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"cb275368a6131b681411995603749b189c8dda66","url":"https://github.com/MarkMcCaskey/factorioctl/commit/cb275368a6131b681411995603749b189c8dda66","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"21a6df3322c402ede2172c6552104304e589226c","url":"https://github.com/MarkMcCaskey/factorioctl/commit/21a6df3322c402ede2172c6552104304e589226c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"718d52f9b4e4cfc9fde006de3a64c6155c6f4f33","url":"https://github.com/MarkMcCaskey/factorioctl/commit/718d52f9b4e4cfc9fde006de3a64c6155c6f4f33","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"6f1cdc090fed31ba59692f4d679d02dbdf0ea9c8","url":"https://github.com/MarkMcCaskey/factorioctl/commit/6f1cdc090fed31ba59692f4d679d02dbdf0ea9c8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0b6f2761398f43ac755f8db11bfe09e7e2bcc174","url":"https://github.com/MarkMcCaskey/factorioctl/commit/0b6f2761398f43ac755f8db11bfe09e7e2bcc174","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c7ece6c4e10333c9c0147bceb53fa780d24a0c1c","url":"https://github.com/MarkMcCaskey/factorioctl/commit/c7ece6c4e10333c9c0147bceb53fa780d24a0c1c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"fda68858d1a7637df9a0bb4e72d54f245c37c8bc","url":"https://github.com/MarkMcCaskey/factorioctl/commit/fda68858d1a7637df9a0bb4e72d54f245c37c8bc","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0f06fe52bbb15e006e187311076d5a8dece2a193","url":"https://github.com/MarkMcCaskey/factorioctl/commit/0f06fe52bbb15e006e187311076d5a8dece2a193","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"25962b8885242a9b779a81e985500be50f46099e","url":"https://github.com/MarkMcCaskey/factorioctl/commit/25962b8885242a9b779a81e985500be50f46099e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ee1acb29e415aba997a43a18e7ab8e5313bb89a8","url":"https://github.com/MarkMcCaskey/factorioctl/commit/ee1acb29e415aba997a43a18e7ab8e5313bb89a8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"65a952547b4bf003c2ba7e2e34e659b64cee456f","url":"https://github.com/MarkMcCaskey/factorioctl/commit/65a952547b4bf003c2ba7e2e34e659b64cee456f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1bb8e9706a13aedc1ae2907f485fcea673b7e87b","url":"https://github.com/MarkMcCaskey/factorioctl/commit/1bb8e9706a13aedc1ae2907f485fcea673b7e87b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ddf5887ff7c2619ae0f28beeea3a1b3ccb0e45e9","url":"https://github.com/MarkMcCaskey/factorioctl/commit/ddf5887ff7c2619ae0f28beeea3a1b3ccb0e45e9","weight":0.9}],"data":{"attributed_loc_by_commit":{"07713c11479c44fbff2b0234ff3b90949f3a81f5":111,"966240c947e6ec2c5f725e70d6c3de942f176740":220,"2cdf285d236cbe3d95b17039d2dc13838e28ddff":280,"e7b5a77ab4a821633fc7725c74224fe6e9875b6d":0,"6a7a72fa8df78e155c0628382ff9607c47054d24":2928,"1dc327000131072bd04b1034c7c052f5571a26b5":271,"d3b7fb080eada2664f6593dddf43e9c02decd531":316,"5e47d1393ea5742bc94c4f6658809a750d22e5cb":1,"f2033032acfeba3c31552f7062dd47a92506ca5e":8,"2051ea6ddd3113fdce6428b626748ff0e753445c":0,"30b6048777feae72e1e211e8d860d6931d9ca254":45,"8cda0fbf7d97a3d9c9edb34a7b17e70f56c1437f":1010,"929fbf2fa19392b043ca29ab93614d165adc78c4":342,"3d8baaf95397af89b32bcf83571975379ddedd11":42,"6ed9a27a5413fbb142eb1e3773e1f6c95240bb73":268,"5987a6ea3eb3fb3d24680492bb093dd3775b95d0":322,"756004cdda47c9b410c38d8b3d198b24e50ecfd2":670,"703e756dc31d17f967583325209e73304556f277":396,"179ef57b98830f6048a1311b0c071152dacf8e98":142,"b82da1f670b7b6c8482d87b3c8377d13c1d141ca":1763,"032cc533c1d77a98eb0332eea6adf2655d25f208":476,"b931054055b479a24c05cfcda3e56a81bdbabf65":508,"5ec32edab034b4fe0b52e6599d6c4bbd935c0505":400,"57b227f4f377a1ce9a61175a014949bc147acfef":1474,"923490750e9d3dfb5056583189f8dd6b5d17f806":560,"6cf95848699e9561144270cd985401ad6f4bd1a3":177,"d1b66a9da963de5f46839125b1df86fbb3ae40da":223,"63993b8c9f5d353ca0328481dcbd9ff5d394cac1":95,"8ff3b0cbfa415ba0a694e9c214eeba2c8adfe26e":184,"cd494cea01f1f04ed2420a546bce3544be7e0b08":0,"4bea9f55ce5f05b366e2f01f364834d731b2cb0e":448,"06cb8841a46d6e65a3ce9041f7390e34c975b469":6,"ec6050dc66f04969ebc58b955c65c3e03b78be6e":5,"15b6562fbb5179272c014fff7916e45d61f572a5":31,"9363d480e12730c482603f1a9ba50e5231966aee":1,"55161a03993e0a14207e698f6c20a85f680d62b5":174,"21503e012cce6dfeb3fd838adeedaa0b67d2554a":75,"099c090955033da2f578907651c13ee142497fb6":1278,"ebe408056c16ab2384de25ebe5b9bd3a415ec76a":0,"109cd689ce2ef0068c34f38075c43ddbc3dbff64":64,"cbe251c0d20d4f1f3d1fc47386a3c36bb86f1224":19,"e029d6c39c7c47d26596d47efc7516c787195740":180,"16d94b86fb68bf2c1183d40b671ad9aad73c85e5":38,"9e2f5ea576391ec43f55b0790c79233c5df11d45":4,"ddf5887ff7c2619ae0f28beeea3a1b3ccb0e45e9":528,"1bb8e9706a13aedc1ae2907f485fcea673b7e87b":13,"65a952547b4bf003c2ba7e2e34e659b64cee456f":35,"ee1acb29e415aba997a43a18e7ab8e5313bb89a8":19,"25962b8885242a9b779a81e985500be50f46099e":1315,"0f06fe52bbb15e006e187311076d5a8dece2a193":199,"fda68858d1a7637df9a0bb4e72d54f245c37c8bc":686,"c7ece6c4e10333c9c0147bceb53fa780d24a0c1c":8,"0b6f2761398f43ac755f8db11bfe09e7e2bcc174":35,"6f1cdc090fed31ba59692f4d679d02dbdf0ea9c8":90,"718d52f9b4e4cfc9fde006de3a64c6155c6f4f33":149,"21a6df3322c402ede2172c6552104304e589226c":139,"cb275368a6131b681411995603749b189c8dda66":11,"7cd78d716523ae8a9a768b341120a16bc5bd4df3":51,"90ee39d87770a3a4020e67ae18087f86fa57913a":85,"b5a8ec28c1afba77ca7c2dbc1828a18670b7adae":122,"a622373d0d1b93433da4e7c5ef476ef4ebf0d79d":295,"7a4f33031a459a4537eff35931e54e15034d8645":563,"abb7ff6fbe23472cbb7f84056d24b38193a0a843":1,"9f406c8eca40bdf7f81819d5e632fa1988ea7c3d":0,"d5c038a17c27eb1d31c2b1b9363c57572ca4f149":16,"b53d36b3d089c4bd17f3ae87386ce925148f46fa":2,"0e76e5e0a9469993bb13fe1e958e6ab70766ff50":10,"a85460a49ba50b5e41ea4a63d4d494adcf8669fa":0,"2e1a9c302d2579edaf6420f501c97ac13925b6e1":4},"tools":{"claude-code":{"name":"Claude Code","commits":69,"loc":19931,"first_seen":1769292345,"last_seen":1769397186}},"monthly":{"2026-01":{"loc":19931,"attributed_loc":19931}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":2.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1769295031.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":".claude/settings.local.json (claude-code configuration)","ref":".claude/settings.local.json","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/.claude/settings.local.json","weight":0.5},{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/CLAUDE.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":".claude/settings.local.json","added_at":1769295031},{"tool":"claude-code","path":"CLAUDE.md","added_at":1769370743}],"workflows":[],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":9.0,"flagged_units":5.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":19931.0,"flagged_loc":15646.0,"flagged_loc_share":0.7850082785610356,"max_loc_per_hour":2187.0434183321845,"median_loc_per_hour":759.8147075854082,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"1,763 lines of first-party code in ~0.8h (2,187 lines/hour, 1 commit session)","ref":"b82da1f670b7b6c8482d87b3c8377d13c1d141ca","url":"https://github.com/MarkMcCaskey/factorioctl/commit/b82da1f670b7b6c8482d87b3c8377d13c1d141ca","weight":0.6},{"kind":"velocity-burst","description":"3,192 lines of first-party code in ~2.1h (1,520 lines/hour, 8 commit session)","ref":"179ef57b98830f6048a1311b0c071152dacf8e98","url":"https://github.com/MarkMcCaskey/factorioctl/commit/179ef57b98830f6048a1311b0c071152dacf8e98","weight":0.4561206668430801},{"kind":"velocity-burst","description":"4,097 lines of first-party code in ~3.5h (1,181 lines/hour, 9 commit session)","ref":"8ff3b0cbfa415ba0a694e9c214eeba2c8adfe26e","url":"https://github.com/MarkMcCaskey/factorioctl/commit/8ff3b0cbfa415ba0a694e9c214eeba2c8adfe26e","weight":0.35420749279538893},{"kind":"velocity-burst","description":"4,180 lines of first-party code in ~5.3h (793 lines/hour, 9 commit session)","ref":"30b6048777feae72e1e211e8d860d6931d9ca254","url":"https://github.com/MarkMcCaskey/factorioctl/commit/30b6048777feae72e1e211e8d860d6931d9ca254","weight":0.23790050590219225},{"kind":"velocity-burst","description":"2,414 lines of first-party code in ~3.7h (652 lines/hour, 11 commit session)","ref":"0f06fe52bbb15e006e187311076d5a8dece2a193","url":"https://github.com/MarkMcCaskey/factorioctl/commit/0f06fe52bbb15e006e187311076d5a8dece2a193","weight":0.19570034529349944}],"data":{"flagged_loc_by_commit":{"07713c11479c44fbff2b0234ff3b90949f3a81f5":111,"966240c947e6ec2c5f725e70d6c3de942f176740":220,"2cdf285d236cbe3d95b17039d2dc13838e28ddff":280,"6a7a72fa8df78e155c0628382ff9607c47054d24":2928,"1dc327000131072bd04b1034c7c052f5571a26b5":271,"d3b7fb080eada2664f6593dddf43e9c02decd531":316,"5e47d1393ea5742bc94c4f6658809a750d22e5cb":1,"f2033032acfeba3c31552f7062dd47a92506ca5e":8,"30b6048777feae72e1e211e8d860d6931d9ca254":45,"8cda0fbf7d97a3d9c9edb34a7b17e70f56c1437f":1010,"929fbf2fa19392b043ca29ab93614d165adc78c4":342,"3d8baaf95397af89b32bcf83571975379ddedd11":42,"6ed9a27a5413fbb142eb1e3773e1f6c95240bb73":268,"5987a6ea3eb3fb3d24680492bb093dd3775b95d0":322,"756004cdda47c9b410c38d8b3d198b24e50ecfd2":670,"703e756dc31d17f967583325209e73304556f277":396,"179ef57b98830f6048a1311b0c071152dacf8e98":142,"b82da1f670b7b6c8482d87b3c8377d13c1d141ca":1763,"032cc533c1d77a98eb0332eea6adf2655d25f208":476,"b931054055b479a24c05cfcda3e56a81bdbabf65":508,"5ec32edab034b4fe0b52e6599d6c4bbd935c0505":400,"57b227f4f377a1ce9a61175a014949bc147acfef":1474,"923490750e9d3dfb5056583189f8dd6b5d17f806":560,"6cf95848699e9561144270cd985401ad6f4bd1a3":177,"d1b66a9da963de5f46839125b1df86fbb3ae40da":223,"63993b8c9f5d353ca0328481dcbd9ff5d394cac1":95,"8ff3b0cbfa415ba0a694e9c214eeba2c8adfe26e":184,"109cd689ce2ef0068c34f38075c43ddbc3dbff64":64,"cbe251c0d20d4f1f3d1fc47386a3c36bb86f1224":19,"e029d6c39c7c47d26596d47efc7516c787195740":180,"16d94b86fb68bf2c1183d40b671ad9aad73c85e5":38,"9e2f5ea576391ec43f55b0790c79233c5df11d45":4,"ddf5887ff7c2619ae0f28beeea3a1b3ccb0e45e9":528,"1bb8e9706a13aedc1ae2907f485fcea673b7e87b":13,"65a952547b4bf003c2ba7e2e34e659b64cee456f":35,"ee1acb29e415aba997a43a18e7ab8e5313bb89a8":19,"25962b8885242a9b779a81e985500be50f46099e":1315,"0f06fe52bbb15e006e187311076d5a8dece2a193":199},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":17555.0,"index":0.142,"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":1.0,"per_kloc:emoji_in_code":0.057,"files:emoji_in_code":1.0,"count:assistant_voice":1.0,"per_kloc:assistant_voice":0.057,"files:assistant_voice":1.0},"findings":[],"evidence":[{"kind":"stylometry:assistant_voice","description":"assistant-style phrasing left in code: /// Get power status at a location (enhanced version with generator/consumer details)","ref":"src/client/lua.rs:2140","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/client/lua.rs#L2140","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":1.0,"findings_high":1.0,"findings_medium":0.0,"findings_low":0.0,"weighted_findings":0.75,"scanned_lines":17555.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"scripts/create_map.py","line":79,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:scripts/create_map.py:79"}],"evidence":[],"data":{"rulesets":["rust","python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":6.0,"vulnerabilities":11.0,"vulns_critical":0.0,"vulns_high":3.0,"vulns_medium":4.0,"vulns_low":0.0,"vulns_unknown":4.0,"penalty":23.0},"findings":[{"rule_id":"osv/GHSA-89vp-x53w-74fx","severity":"high","message":"rmcp@0.14.0 (crates.io) is affected by RUSTSEC-2026-0189, GHSA-89vp-x53w-74fx","path":"Cargo.lock","line":null,"fingerprint":"rmcp@0.14.0 (crates.io):GHSA-89vp-x53w-74fx"},{"rule_id":"osv/GHSA-33f5-2c5q-wgwj","severity":"high","message":"rmcp@0.14.0 (crates.io) is affected by GHSA-33f5-2c5q-wgwj","path":"Cargo.lock","line":null,"fingerprint":"rmcp@0.14.0 (crates.io):GHSA-33f5-2c5q-wgwj"},{"rule_id":"osv/GHSA-9pj6-vhgr-3mwh","severity":"high","message":"rmcp@0.14.0 (crates.io) is affected by GHSA-9pj6-vhgr-3mwh","path":"Cargo.lock","line":null,"fingerprint":"rmcp@0.14.0 (crates.io):GHSA-9pj6-vhgr-3mwh"},{"rule_id":"osv/RUSTSEC-2026-0190","severity":"medium","message":"anyhow@1.0.100 (crates.io) is affected by RUSTSEC-2026-0190","path":"Cargo.lock","line":null,"fingerprint":"anyhow@1.0.100 (crates.io):RUSTSEC-2026-0190"},{"rule_id":"osv/GHSA-434x-w66g-qw3r","severity":"medium","message":"bytes@1.11.0 (crates.io) is affected by RUSTSEC-2026-0007, GHSA-434x-w66g-qw3r","path":"Cargo.lock","line":null,"fingerprint":"bytes@1.11.0 (crates.io):GHSA-434x-w66g-qw3r"},{"rule_id":"osv/RUSTSEC-2026-0441","severity":"medium","message":"pin-utils@0.1.0 (crates.io) is affected by RUSTSEC-2026-0441","path":"Cargo.lock","line":null,"fingerprint":"pin-utils@0.1.0 (crates.io):RUSTSEC-2026-0441"},{"rule_id":"osv/RUSTSEC-2026-0462","severity":"medium","message":"rmcp@0.14.0 (crates.io) is affected by RUSTSEC-2026-0462","path":"Cargo.lock","line":null,"fingerprint":"rmcp@0.14.0 (crates.io):RUSTSEC-2026-0462"},{"rule_id":"osv/GHSA-9g45-5xwm-f3wc","severity":"medium","message":"rmcp@0.14.0 (crates.io) is affected by GHSA-9g45-5xwm-f3wc","path":"Cargo.lock","line":null,"fingerprint":"rmcp@0.14.0 (crates.io):GHSA-9g45-5xwm-f3wc"},{"rule_id":"osv/GHSA-c9xm-49cp-xcr9","severity":"medium","message":"rmcp@0.14.0 (crates.io) is affected by GHSA-c9xm-49cp-xcr9","path":"Cargo.lock","line":null,"fingerprint":"rmcp@0.14.0 (crates.io):GHSA-c9xm-49cp-xcr9"},{"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"},{"rule_id":"osv/RUSTSEC-2026-0386","severity":"medium","message":"tokio@1.49.0 (crates.io) is affected by RUSTSEC-2026-0386","path":"Cargo.lock","line":null,"fingerprint":"tokio@1.49.0 (crates.io):RUSTSEC-2026-0386"}],"evidence":[],"data":{"ecosystems":["crates.io"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":529.0,"function_nloc":11405.0,"mean_ccn":3.93,"p90_ccn":9.0,"complex_functions":22.0,"long_functions":20.0,"many_param_functions":0.0,"risky_nloc_share":0.2898},"findings":[],"evidence":[{"kind":"complex-function","description":"execute in src/cli/get.rs: complexity 55, 120 lines","ref":"src/cli/get.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/get.rs#L115","weight":0.9166666666666666},{"kind":"complex-function","description":"execute in src/cli/blueprint.rs: complexity 49, 113 lines","ref":"src/cli/blueprint.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/blueprint.rs#L136","weight":0.8166666666666667},{"kind":"complex-function","description":"render_ascii_map in src/cli/map.rs: complexity 38, 121 lines","ref":"src/cli/map.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/map.rs#L282","weight":0.6333333333333333},{"kind":"complex-function","description":"entity_char in src/cli/map.rs: complexity 38, 84 lines","ref":"src/cli/map.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/map.rs#L145","weight":0.6333333333333333},{"kind":"complex-function","description":"entity_size in src/world/mod.rs: complexity 33, 26 lines","ref":"src/world/mod.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/world/mod.rs#L219","weight":0.55},{"kind":"complex-function","description":"route_belt in src/bin/mcp.rs: complexity 32, 152 lines","ref":"src/bin/mcp.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/bin/mcp.rs#L1347","weight":0.5333333333333333},{"kind":"complex-function","description":"transform_direction in src/cli/clipboard.rs: complexity 31, 49 lines","ref":"src/cli/clipboard.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/clipboard.rs#L344","weight":0.5166666666666667},{"kind":"complex-function","description":"walk_to in src/client/mod.rs: complexity 30, 94 lines","ref":"src/client/mod.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/client/mod.rs#L925","weight":0.5},{"kind":"complex-function","description":"execute_paste in src/cli/clipboard.rs: complexity 27, 101 lines","ref":"src/cli/clipboard.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/clipboard.rs#L192","weight":0.45},{"kind":"complex-function","description":"main in src/main.rs: complexity 27, 36 lines","ref":"src/main.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/main.rs#L17","weight":0.45}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":12364.0,"duplicated_lines":1277.0,"duplicated_share":0.1033,"files":61.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src/analyze/belt_gaps.rs:64 and src/analyze/belt_graph.rs:142","ref":"src/analyze/belt_gaps.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/analyze/belt_gaps.rs#L64","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/analyze/belt_gaps.rs:74 and src/analyze/inserter.rs:92","ref":"src/analyze/belt_gaps.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/analyze/belt_gaps.rs#L74","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/analyze/belt_graph.rs:152 and src/analyze/belt_network.rs:87","ref":"src/analyze/belt_graph.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/analyze/belt_graph.rs#L152","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/analyze/entity_reach.rs:18 and src/analyze/entity_reach.rs:43","ref":"src/analyze/entity_reach.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/analyze/entity_reach.rs#L18","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/bin/mcp.rs:77 and src/bin/mcp.rs:91","ref":"src/bin/mcp.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/bin/mcp.rs#L77","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/bin/mcp.rs:931 and src/cli/map.rs:98","ref":"src/bin/mcp.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/bin/mcp.rs#L931","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/bin/mcp.rs:1806 and src/cli/say.rs:74","ref":"src/bin/mcp.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/bin/mcp.rs#L1806","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/cli/analyze.rs:69 and src/cli/analyze.rs:85","ref":"src/cli/analyze.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/analyze.rs#L69","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/cli/belt.rs:34 and src/cli/belt.rs:57","ref":"src/cli/belt.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/belt.rs#L34","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/cli/blueprint.rs:28 and src/cli/blueprint.rs:46","ref":"src/cli/blueprint.rs","url":"https://github.com/MarkMcCaskey/factorioctl/blob/c3abe9ea099b549e18b149d0ea483de21a73bdbe/src/cli/blueprint.rs#L28","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":17555.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.0964,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0702,"test_lines":846.0,"source_lines":17555.0,"test_ratio":0.0482,"ci_files":0.0,"cochange_share":0.0175,"cochange_commits":57.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":145.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":"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":17555.0,"other_lines":0.0,"files_blamed":61.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":0.0,"security:ai_findings":1.0,"security:ai_per_kloc":0.057,"security:other_findings":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":["unreviewed-ai-risk"]}