{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:08.239459Z","repo":{"ref":{"host":"github.com","owner":"unconst","name":"ninja"},"default_branch":"main","clone_url":"https://github.com/unconst/ninja.git","html_url":"https://github.com/unconst/ninja","description":"Coding agent project","stars":1,"forks":1,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":2405,"primary_language":"Python","license_spdx":null,"created_at":"2026-03-10T08:00:26Z","pushed_at":"2026-03-13T02:27:34Z","security_policy_url":null,"distribution":{"owner_created_at":"2017-10-03T15:49:08Z","owner_type":"User","release_assets":[]}},"commit_sha":"245d502a1ffff8706c90c82a9eec335a55f1f592","profile":{"lines_by_language":{"Python":16539,"Rust":7985,"C":58},"files_by_category":{"config":1146,"source":43,"binary":6,"docs":2,"test":2,"other":1},"source_lines":24518,"test_lines":64},"pillars":{"ai_provenance":{"score":75.7,"confidence":0.95,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.7568,"suspected_share":0.2275,"estimated_share":0.7568,"ai_artifacts":0.0,"flagged_work_units":5.0,"flagged_releases":null,"style_index":0.122},"summary":"Explicit AI attribution on 76% of first-party code added; an estimated 76% including velocity signals."},"quality":{"score":41.1,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":11.5,"duplication":59.4,"lint":98.0,"testing":20.4,"docs":40.0,"type_safety":40.0,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 72% of function code in complex or long functions; 9% duplicated lines. Weakest area: complexity."},"security":{"score":74.3,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":79.4,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 12 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":12.0,"checked":12.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":262.0,"attributed_commits":212.0,"attributed_commit_share":0.8091603053435115,"effective_loc":26508.0,"attributed_loc":20060.0,"attributed_loc_share":0.7567526784366984,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 212 attributed commits, 20,060 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"245d502a1ffff8706c90c82a9eec335a55f1f592","url":"https://github.com/unconst/ninja/commit/245d502a1ffff8706c90c82a9eec335a55f1f592","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7185d56a500da6b600a53d706743ba62a206cef2","url":"https://github.com/unconst/ninja/commit/7185d56a500da6b600a53d706743ba62a206cef2","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f2c37b059c248840f8c2d6f3f710f53bf1a4ad27","url":"https://github.com/unconst/ninja/commit/f2c37b059c248840f8c2d6f3f710f53bf1a4ad27","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c70f427b52c9d978eaa6f2bd0bf87ce4686570f6","url":"https://github.com/unconst/ninja/commit/c70f427b52c9d978eaa6f2bd0bf87ce4686570f6","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"437a7acff3e43ceb6328e0fc98ff2d3a8f4833b5","url":"https://github.com/unconst/ninja/commit/437a7acff3e43ceb6328e0fc98ff2d3a8f4833b5","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c941fa08ade501a34fbbea27450cf042c2178d84","url":"https://github.com/unconst/ninja/commit/c941fa08ade501a34fbbea27450cf042c2178d84","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"249d3498c6774ec41f4e3fdcc3cb6aa394422cee","url":"https://github.com/unconst/ninja/commit/249d3498c6774ec41f4e3fdcc3cb6aa394422cee","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"6f039e269079078c6e4815e8ef52dcced6a40115","url":"https://github.com/unconst/ninja/commit/6f039e269079078c6e4815e8ef52dcced6a40115","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"6f50301fde84a88f0ec66ec3b385618b48d1ef78","url":"https://github.com/unconst/ninja/commit/6f50301fde84a88f0ec66ec3b385618b48d1ef78","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d3ae6c8554c163e5e1077872714257e442a62752","url":"https://github.com/unconst/ninja/commit/d3ae6c8554c163e5e1077872714257e442a62752","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f858bab20913bea4a3e523aff0c98bbaada09c2b","url":"https://github.com/unconst/ninja/commit/f858bab20913bea4a3e523aff0c98bbaada09c2b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"20774f28fe03ee6b09de46539777b0ef43c0404d","url":"https://github.com/unconst/ninja/commit/20774f28fe03ee6b09de46539777b0ef43c0404d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"65bade333b691d99f47ed16ab438f97ce96c1db4","url":"https://github.com/unconst/ninja/commit/65bade333b691d99f47ed16ab438f97ce96c1db4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e45b2a8e92d1f6b233221566427ce09843214a22","url":"https://github.com/unconst/ninja/commit/e45b2a8e92d1f6b233221566427ce09843214a22","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"bb12ee67f791cfadfb37cb54ecbe4fd02b6c162d","url":"https://github.com/unconst/ninja/commit/bb12ee67f791cfadfb37cb54ecbe4fd02b6c162d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1170d06b177096d1af169bb97132777ef6582e38","url":"https://github.com/unconst/ninja/commit/1170d06b177096d1af169bb97132777ef6582e38","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7a2e81bfd265928dc8148d04feeb0f09b9316695","url":"https://github.com/unconst/ninja/commit/7a2e81bfd265928dc8148d04feeb0f09b9316695","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a2fc39b63ae6696881eda3372aec2517f8389c9d","url":"https://github.com/unconst/ninja/commit/a2fc39b63ae6696881eda3372aec2517f8389c9d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a948460b551d43c424f0106ee15228e6ad740a32","url":"https://github.com/unconst/ninja/commit/a948460b551d43c424f0106ee15228e6ad740a32","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a06cac8e80b04ebf68448cc3c2a268fa3dd535be","url":"https://github.com/unconst/ninja/commit/a06cac8e80b04ebf68448cc3c2a268fa3dd535be","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3de5bd345037f84eb78b4267852e119ec0478fce","url":"https://github.com/unconst/ninja/commit/3de5bd345037f84eb78b4267852e119ec0478fce","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"70576b48296f451bc4216f646846ed1db714b7e5","url":"https://github.com/unconst/ninja/commit/70576b48296f451bc4216f646846ed1db714b7e5","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3071496735deb90843c48495f75660e65aa47eeb","url":"https://github.com/unconst/ninja/commit/3071496735deb90843c48495f75660e65aa47eeb","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"49861f36f63501eb739e37005dad7cad301f585f","url":"https://github.com/unconst/ninja/commit/49861f36f63501eb739e37005dad7cad301f585f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"fc7df09bc3ee2b459e6f17c1b4702b36619bc86f","url":"https://github.com/unconst/ninja/commit/fc7df09bc3ee2b459e6f17c1b4702b36619bc86f","weight":0.9}],"data":{"attributed_loc_by_commit":{"7bbec6782f28311e699be603fb5d6b7a97efb51a":39,"740faf0c2a596583abe4115d4244d65b60354f6b":97,"3445bd0a079d2bcb390762b28b368ca653980587":366,"6c94f3e5c0da3ff050c47280770db1b9dffb4386":232,"c1f82ac270865bc7722627bd1084c8948d79eb8f":7,"e42cae44f26841fe934694650e82d696051a3fae":57,"363da41ede092c6aa2397adf6a852f740814ab39":70,"50a8f11d821ef8122dd876f8a65fe50be13f147d":11,"e34a9a97f94447350d2beb7cae24dd6e908d9c81":9,"f174ff99fb6f99bfdf3de4efebef82913a6fb65f":24,"a14b2310cae2dc0fca15658cffb2d572ae21f00d":29,"51ff3d7223ae6206730481993b9dcc65f1e8e4be":11,"cb431f9b7feae82cba17980c8ea12642a5af7522":3,"5a9b7a3868fc0286a057a46cdba1f4bf74ff60b3":36,"160731110a37905075d0777ceeadb9c94f397544":6,"bd5c18f2f264209560d5c0dcee89e4d7b22a7a7d":519,"e6a495f0f991ce0120f0ee2be68a14a344dde0a3":98,"eb2eaec1c673dfdfb5a77f52b03c388fb08f9f73":22,"5352d187710b1a24efb8a7a50bdfe6b9550f1505":31,"3ad0f12ba4c5d6c18c0ed7a427021e740334a972":74,"3713c74e71bbd6edce90c28bac6133e8dee654e6":12,"0c150df5724d944acd2cad0e5ea7c5869d0e18fa":133,"c2ca18e9c105eaa23d2c118396c86af06ca0b8be":16,"2bc219e9cb458c69368bb02cc693eba4f269e7dc":116,"012ef93b156fb188006713a7db4d364c97401ad3":99,"bd049b5d6c08d7e5d6ec42e6c1340aaf2370e9c5":398,"bc6855072bea3d4a9054be1aa490dc22e2b79f3a":5,"729f10b3b70417b638f22d828bb7072d80182c19":3,"cf964c765be81a12c64ed9ac5085b3cf138d3cae":210,"eac10d6884de693f502d94bc3ae59b47f276c954":2,"5d5082b64d0fdad1c8648b21ee4c1e736d1f17f3":26,"6014bfed70be624b0d331167e173000b52ce1806":108,"990af14d9b5cb166e9007990c7ffb17ff31e2b76":35,"62be1d919854ea1ec071db07f8f0dd65f5e0bfac":36,"3a29fea3a1f405470102960e53fa4599244f6e30":68,"330c7c332858dd9343ae487cdeb84fa6c1d785f6":19,"43f294d81cd102502e4d3adada37e3d7d21c4ff6":13,"880e542256956e3fb7746f77453e92c4812331ad":36,"1552d804df59d496516d72d6e624f6ba8db0a5f6":100,"0df4e5ab82e2e6a87e6893b4d1f2813e7e066574":3,"9c6a28e2a32ac601edea42c3842e3a2faeccc88b":23,"05a22b49e9c11eddbeb01cd16c260bba901b6d71":130,"05dfc19f3289ad763b032972b8e81a989f74613c":135,"8bfe177f12e09f3b8c327ecf7cdad8c6fca2f1da":17,"ed3d58f8d2ff19b48c497d7342159f141e390de5":144,"456900cfe29e3117e97f75469017729787c64fe2":61,"91b57684851b0e60604f6e2f78ebdefff800a653":2351,"00e65c800f03c35f438d0d41ee7f7f629e007157":23,"5a162af0df22bd751607206d526df7aff509d79e":1317,"527634b887ee651617b12e88dfb1ebc6146975f8":746,"2c2ef39dd2365b609b0e0da32818db78a09e17bc":1,"0d0d65d050e4a226e744fea5f7c9028a4e9968e2":6,"8bfc2928e61be1ea230d6812b93370f54afd1726":128,"0710a17f111af5dae5edba0070c4c45b652385a9":0,"3de54f062f580a8bddb77e924bae7001df501f57":3,"426db7238e7d5010d1606cf8d13f806f8fa0e8d9":0,"21e8f07c7b541b96489dcc87c734aeefd38942f4":0,"7a7dc20e8bb624579cb5fce664e2b2f2fab573b5":2622,"15e281f710aaf3f7741012398450191fe8802679":2028,"b7911d9e3e54420fc152c7c30bbf3de7b7e3cf94":0,"1147f7de48c90972eeb30849fd77cf0e88c0aacf":2,"54358fea099fa16d76ee01e69ab2edbb00b8cab2":14,"6a8ee91542c1963324beb1a2cb14768e8e75e88c":51,"0933ed52c106a3aa3da9dd37a261620db96c7be6":14,"7cc277c37980a348cfa915b58f08364931b18ccb":3,"f2bab37aadf6bf0e8321bfd375cd6bf64a026885":8,"8a0bafc45b1aed7f973c03c149e2b62e6501c98a":4,"629a8ba79f062c30685da7d469c932d08d1473c5":736,"330b58cb8b243a863958b452aeaaf256067af1bf":5,"e4dcf7b51fca3377de3d4cd7e38565a7a6b996d4":1506,"e61475be142ba96bcf51cccb7cbb5200e7836ee8":6,"80a784b1f16e366e4e1530fadde996a089436657":8,"b2a37f229dce800243c919e7a10f362dd98cef8b":697,"0d2f5a3232ea4126bb2ae7df209f8c7750f8c9f0":8,"21735c63ec2887f97936bd2de9e5045cd7418324":4,"dc2e860db0b304cd81fcecd118f38fa6d0167fa5":1262,"2d9bab3960ce628520e0c054b98887229ae5c229":662,"82d57454d2be2df4b048928a47c09eb8584bda90":19,"1b881709980804bc9e9c54cdb2da28c5fba6945f":34,"83b0c76b13602ff8d873d93d54f4dfc5e82a33f0":0,"6335a78ae7b244026cb7d89b57f0e574ce7581e5":0,"fe290f8fd2fb36ba5f4987db4aec4cdd0a4e7d57":0,"58cf9f7e30864e0faa380b33f131e3bada914a97":0,"59aadf9834638c8e149d351830f0cffe4fb07bed":20,"75556002adfe5ff0413ee0357f60c62c542a6207":0,"759291df7e8d6b7ff840e73ccc4610e2cdeb05f1":0,"80356d3bfa9bfc0ce0ae05baaefeb071f484c115":46,"d29021c75d8258ce9fbd3491a22308bf055a9a88":0,"00df5c19c8cfc2ff0104aca9194e38f5420511ea":0,"74974ec9089e45370570e34d12037300923f6e50":0,"c6d7e7ba603553aabe2e9eff8bf292561f7a2c8b":44,"2cae95b83ef60d1295c907c016e38c5e651a7707":11,"bfe6ef6ec1766e5cae6ccc9a636cf72c1474e125":129,"068ad500acc95307fde4512382a311f01aa9db16":4,"40d86c995f005855692d02d309e7bb052bbf8545":0,"ce6a85a38d4ec9a4e3ce9429831b9f85affde058":0,"2ed1b3d1acee9cab5b253c805ce66bc85588ba29":0,"4ee762cd01970ccbac22018b3976de2a76622af7":0,"3815b8d702424bf2c90fcee3de194b261bb4f2c4":11,"b0b559f649421b55486598d8d7ef3ac446ff1f55":3,"ccb067601e3c57bb4d649a288f630611b62e29d5":0,"747100d3909287253efca22e3013b469e48bb903":0,"94958fc5cbfb1a4004d5b557ca675db1e9c9bb85":11,"15c286f0fe525f74589e27c5e1d0c16d491fd512":0,"6ea3434e84b790f3a6088952fcc814cc6f3024ee":0,"1de0422062c4f3f40fd272d0330f1ef0d555b149":0,"1635aa660e7d1a62dde0605872296395ffbe9fa0":0,"d0bb7e993ea2fc26b3eaa96ecb3631ce181db88d":0,"ee51414f49ab74564734d7106b39f04680e7c735":0,"c970c9c9e16834ccd6050fd70732ba4298e62d6f":3,"c9fa3bfe54628e9168b0d77103111e44a9f66b79":1,"6a250264e97515cbf4521db3531728ab3bc0e859":19,"7f803ab9e3c99b04a48e21ee7e92d518aac8757a":0,"337f4fe7e7d3844c1776ff09c89932340c0e9cb8":0,"d69e6a74ba465a132cc2f1944fe6a4dcd34e1bc8":12,"9f378d9368c46d737f1f9543b63da6afd736be47":0,"00628b10080cab35a712676672bc8dac0b88a6bb":0,"c72c9015bc8d122cf98bb998e73c2ddfe4bc7e60":0,"67db341d3a0eeac5e7488337546682d56a148eac":0,"a6ae15eef5c663ea4b4214f7272b21717d357c1c":0,"cf4b85a2816ce9b6098f691fd20221c9365dd6bc":0,"e7a327eca2470530e36bbc8b9e26b5d671e5251e":40,"7acdb3a838a4f95ea77df6fd9d73511ca9bb4b9e":0,"52c6ebd3ba3d0b783ad41d97c74d2febc756747e":0,"0de601204e2d149d7bbde1d1ad94be4207963b50":0,"271ef857fe091a1bc55ad64f9185fd3dfd6c3fd0":0,"c6e2688bc2b755911491b3c309497d3123d4041c":0,"3981658bf15c3001bcd39a92bf5485a7b79c323b":0,"a4e3dcf587ac84f79180d165e78d6e5278b0129a":0,"6c2b0e4aa604560663b24ba2c2ecb9231a1eaf08":0,"620adeabfcdf634daae22c5bb30309a1d42e086f":0,"8a0f4520a1c9ba836f4f179705b1edd3326ff1f4":0,"46da13413c818212d63c1bc79e8ca6e39443a4a7":0,"046edaa3be151dfa681a23e5b50902881bdb4fb7":0,"ca85276c7e61dc347a295d3f8e683271147de426":0,"c5de3da270ad82e9447d4ebf97acb4d53a8d22e7":0,"a9d5bd70d5d92a26080e5e01f7962a482a1c9f15":0,"31ab0487cb4a99d8a1648d112633190222a7b674":0,"6ab9fd159c515be7f53a732843ee283e33ebdee1":0,"56281406a1ce0733ff234d2f6ff8cf316b4e11bb":0,"fb887a15d4e8dce3e64aea0b4221ced3f4cca4ee":0,"9211f77398286eaf6f520d0bc89ed52872985fae":0,"9f425f70b8c781903b15b1b04a75560e965fc788":0,"5f6e4862d56ed8f223780f52152724df3f019c12":0,"9f593eb5c9f75f340ff9ad3d43d07eb4de83d580":0,"d91bcda8f691bba2f89dee64feb786a3483eaa1c":0,"86416e167cc79005c5bd7191621ad12cd5ef1f71":0,"cbebb96200564f693e3802119afb05ccf9d81316":0,"710db844f4ab33ee5301f22f14469af9ebed43a8":0,"668ec0c856827ca7e60670a517c2cbbf847a7372":0,"ce4666e7fbe112f750e7fe5d63bc19d3e066ca45":0,"af3cb98093dfd254b1581c13ec8b549ec05dc716":0,"6a9b612ed6c8c377ac6bada6e00672e380fc6a4e":0,"5c5a39f4e81238c997f85cd7d51e94c112417b66":0,"fcd6c025a5deaef8eaa0c7614e7a379bfd4e832b":0,"e8250b79eb055cbc50a35f7b998ca33d4108dcf6":0,"49b24884eb4bf8a38a1b314d8d62834230e52139":0,"2374f012cd16faf2152632e8868e450d0f2a564a":0,"61fabc2d09b423c0f4dd1a03db021e678869b77c":0,"6da4b3d7f25304b4d2d54b4fb6f76d9f3c9f7397":0,"d36d7b2864d435ccace3551bb3ac246e9adcd1b9":0,"1049a3df03e2dc374661ab8379d5b75a36f93ef1":0,"0df2ac1aa90815c67cb488f989b009399299f8d6":0,"2d1cc72403f4c24a9792fdc71b2a697e72f4e566":0,"76fa82131bb2a77f43bd7b353f60cc4c27331f15":0,"7b3e6deba16b5730d67d87bb3bf3efe36443db9a":0,"28161045a6d49bafbeac08bc4e1ac43c82df207e":0,"42a473759b1453d2b8925b1812fab3d311ecdafb":0,"d39daf81f3151aefc9b64af49423e3a981da4d08":8,"93d73b6a731e86b55bc77392092e93f9442bb43f":0,"176314da4979d8cbbbffec5a10a469c12188e412":0,"9d5355b224d62a94482fe0e3bda5582ac0abf922":0,"5da578c7ace586758c8381d20b29819190c6b50e":0,"ba00683974540c519891e53e1101eef91e20a683":0,"a6a9fb21efed1e5880f49c3d96276a6febe1d037":0,"866cb3e61abad3508f5e6cc6de500f5298ccfb41":0,"082b78ad33a1d8c68391a49488cb44fffa36a26e":0,"83f84ce324c13cc45785ff4bf8744df02a5f4550":0,"5fe00a6e5e51b905ae2fb17aa15473d0bb97cc44":0,"e73355e242cd86842080459393d7e0765ac2e3a3":0,"48d0c842e3e6d941eebc2a93987b6a8296f299c4":0,"68433f7720abe3502044807f7e9d132c5b360f82":5,"6e8c1f401f50584fb38047a53191d5354a86d794":0,"f279e1f6610aa76b859b5980e98c4427c282bb10":0,"de5d3ae7ebcf53fdb84623ecc8c326a0aa0d551d":0,"c1658789a6e19bf9a03e089939ecfa52ad4c8c2a":0,"5f0b9eb24023137b6e366a7dabd908c33d35a84d":0,"fc7df09bc3ee2b459e6f17c1b4702b36619bc86f":0,"49861f36f63501eb739e37005dad7cad301f585f":0,"3071496735deb90843c48495f75660e65aa47eeb":132,"70576b48296f451bc4216f646846ed1db714b7e5":123,"3de5bd345037f84eb78b4267852e119ec0478fce":96,"a06cac8e80b04ebf68448cc3c2a268fa3dd535be":65,"a948460b551d43c424f0106ee15228e6ad740a32":21,"a2fc39b63ae6696881eda3372aec2517f8389c9d":0,"7a2e81bfd265928dc8148d04feeb0f09b9316695":116,"1170d06b177096d1af169bb97132777ef6582e38":4,"bb12ee67f791cfadfb37cb54ecbe4fd02b6c162d":13,"e45b2a8e92d1f6b233221566427ce09843214a22":2,"65bade333b691d99f47ed16ab438f97ce96c1db4":0,"20774f28fe03ee6b09de46539777b0ef43c0404d":14,"f858bab20913bea4a3e523aff0c98bbaada09c2b":5,"d3ae6c8554c163e5e1077872714257e442a62752":197,"6f50301fde84a88f0ec66ec3b385618b48d1ef78":34,"6f039e269079078c6e4815e8ef52dcced6a40115":138,"249d3498c6774ec41f4e3fdcc3cb6aa394422cee":24,"c941fa08ade501a34fbbea27450cf042c2178d84":536,"437a7acff3e43ceb6328e0fc98ff2d3a8f4833b5":18,"c70f427b52c9d978eaa6f2bd0bf87ce4686570f6":110,"f2c37b059c248840f8c2d6f3f710f53bf1a4ad27":8,"7185d56a500da6b600a53d706743ba62a206cef2":0,"245d502a1ffff8706c90c82a9eec335a55f1f592":80},"tools":{"claude-code":{"name":"Claude Code","commits":212,"loc":20060,"first_seen":1773151965,"last_seen":1773368848}},"monthly":{"2026-03":{"loc":26508,"attributed_loc":20060}}},"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":22.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":26508.0,"flagged_loc":23854.0,"flagged_loc_share":0.8998792817262713,"max_loc_per_hour":3085.8255788790307,"median_loc_per_hour":161.75988766674467,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"7,922 lines of first-party code in ~2.6h (3,086 lines/hour, 13 commit session)","ref":"330b58cb8b243a863958b452aeaaf256067af1bf","url":"https://github.com/unconst/ninja/commit/330b58cb8b243a863958b452aeaaf256067af1bf","weight":0.6},{"kind":"velocity-burst","description":"5,021 lines of first-party code in ~4.3h (1,164 lines/hour, 13 commit session)","ref":"3de54f062f580a8bddb77e924bae7001df501f57","url":"https://github.com/unconst/ninja/commit/3de54f062f580a8bddb77e924bae7001df501f57","weight":0.34933195902853825},{"kind":"velocity-burst","description":"4,622 lines of first-party code in ~4.1h (1,120 lines/hour, 17 commit session)","ref":"068ad500acc95307fde4512382a311f01aa9db16","url":"https://github.com/unconst/ninja/commit/068ad500acc95307fde4512382a311f01aa9db16","weight":0.33591924629878867},{"kind":"velocity-burst","description":"3,992 lines of first-party code in ~6.1h (653 lines/hour, 22 commit session)","ref":"3aba58bafd3d9143215ead239402092ebf9c8806","url":"https://github.com/unconst/ninja/commit/3aba58bafd3d9143215ead239402092ebf9c8806","weight":0.19577513395695212},{"kind":"velocity-burst","description":"2,297 lines of first-party code in ~4.4h (519 lines/hour, 29 commit session)","ref":"239964c16ec6376d4af5f782a60edc26d8362743","url":"https://github.com/unconst/ninja/commit/239964c16ec6376d4af5f782a60edc26d8362743","weight":0.15573858999309437}],"data":{"flagged_loc_by_commit":{"2b1636d54a123a2fcfcd84aab91f78be2cfbbb39":1111,"e6226eafc8c6db9c1161cd90d0af34a029dffec8":410,"5b96b5b4b7fbc1ea58c29d461f3a1588acc25d46":110,"ce30377c932505dce832cbc6173d0315138004e1":15,"c78e50ce2ce185ea7aebf3a17267fc9cb68ac879":29,"ed56cf8e719ddff68634c7f74cf63727f895e950":14,"e5a9a022e7ccfbef35346c05de7e85a8026120d8":28,"c57b21cbfe3f444848e3b0ee7f52d3bfd1af09ae":10,"734c9a7e0e38273510db7d11d52568059e120043":27,"7bbec6782f28311e699be603fb5d6b7a97efb51a":39,"740faf0c2a596583abe4115d4244d65b60354f6b":97,"3445bd0a079d2bcb390762b28b368ca653980587":366,"6c94f3e5c0da3ff050c47280770db1b9dffb4386":232,"69488d9f4119e7d936d32413a6f1dbf8b34cf8d1":104,"c319fac31f896518f78fe2922248f1b95c6837ca":103,"ca0ea4a7ffb297da9fd8511f0eb398ad0483fc33":226,"ac46914141bd409127e1b222fad18f82322dbf54":212,"f5dd8d7878a669a59ac0b796f3017f83ac020e59":189,"a0dc3ff3ea3efb1b4c9b4489975f2c71b4061afc":67,"6e416c4bfac53f5f5cc15e2a375154d1f9ad7963":143,"b6e3dabd4fbc02ab2fb31fdcef26d45f183834d4":154,"3aba58bafd3d9143215ead239402092ebf9c8806":306,"160731110a37905075d0777ceeadb9c94f397544":6,"bd5c18f2f264209560d5c0dcee89e4d7b22a7a7d":519,"e6a495f0f991ce0120f0ee2be68a14a344dde0a3":98,"eb2eaec1c673dfdfb5a77f52b03c388fb08f9f73":22,"5352d187710b1a24efb8a7a50bdfe6b9550f1505":31,"3ad0f12ba4c5d6c18c0ed7a427021e740334a972":74,"3713c74e71bbd6edce90c28bac6133e8dee654e6":12,"0c150df5724d944acd2cad0e5ea7c5869d0e18fa":133,"c2ca18e9c105eaa23d2c118396c86af06ca0b8be":16,"2bc219e9cb458c69368bb02cc693eba4f269e7dc":116,"012ef93b156fb188006713a7db4d364c97401ad3":99,"bd049b5d6c08d7e5d6ec42e6c1340aaf2370e9c5":398,"bc6855072bea3d4a9054be1aa490dc22e2b79f3a":5,"729f10b3b70417b638f22d828bb7072d80182c19":3,"cf964c765be81a12c64ed9ac5085b3cf138d3cae":210,"eac10d6884de693f502d94bc3ae59b47f276c954":2,"5d5082b64d0fdad1c8648b21ee4c1e736d1f17f3":26,"6014bfed70be624b0d331167e173000b52ce1806":108,"990af14d9b5cb166e9007990c7ffb17ff31e2b76":35,"62be1d919854ea1ec071db07f8f0dd65f5e0bfac":36,"3a29fea3a1f405470102960e53fa4599244f6e30":68,"330c7c332858dd9343ae487cdeb84fa6c1d785f6":19,"43f294d81cd102502e4d3adada37e3d7d21c4ff6":13,"880e542256956e3fb7746f77453e92c4812331ad":36,"1552d804df59d496516d72d6e624f6ba8db0a5f6":100,"0df4e5ab82e2e6a87e6893b4d1f2813e7e066574":3,"9c6a28e2a32ac601edea42c3842e3a2faeccc88b":23,"936e90b6f25ff1af356412bcbe6d2d14141b824b":81,"239964c16ec6376d4af5f782a60edc26d8362743":5,"05dfc19f3289ad763b032972b8e81a989f74613c":135,"8bfe177f12e09f3b8c327ecf7cdad8c6fca2f1da":17,"ed3d58f8d2ff19b48c497d7342159f141e390de5":144,"b8a94377a4a3d9fd208a74c7500452a904edb3c3":89,"456900cfe29e3117e97f75469017729787c64fe2":61,"91b57684851b0e60604f6e2f78ebdefff800a653":2351,"00e65c800f03c35f438d0d41ee7f7f629e007157":23,"5a162af0df22bd751607206d526df7aff509d79e":1317,"527634b887ee651617b12e88dfb1ebc6146975f8":746,"2c2ef39dd2365b609b0e0da32818db78a09e17bc":1,"0d0d65d050e4a226e744fea5f7c9028a4e9968e2":6,"8bfc2928e61be1ea230d6812b93370f54afd1726":128,"3de54f062f580a8bddb77e924bae7001df501f57":3,"2fb807610f94877b402563847454792baea7b14b":67,"7a7dc20e8bb624579cb5fce664e2b2f2fab573b5":2622,"4312784d50393807aefbbab0fd9353cd2ed0c819":2368,"15e281f710aaf3f7741012398450191fe8802679":2028,"1147f7de48c90972eeb30849fd77cf0e88c0aacf":2,"54358fea099fa16d76ee01e69ab2edbb00b8cab2":14,"6a8ee91542c1963324beb1a2cb14768e8e75e88c":51,"0933ed52c106a3aa3da9dd37a261620db96c7be6":14,"7cc277c37980a348cfa915b58f08364931b18ccb":3,"f2bab37aadf6bf0e8321bfd375cd6bf64a026885":8,"8a0bafc45b1aed7f973c03c149e2b62e6501c98a":4,"629a8ba79f062c30685da7d469c932d08d1473c5":736,"330b58cb8b243a863958b452aeaaf256067af1bf":5,"e4dcf7b51fca3377de3d4cd7e38565a7a6b996d4":1506,"e61475be142ba96bcf51cccb7cbb5200e7836ee8":6,"80a784b1f16e366e4e1530fadde996a089436657":8,"b2a37f229dce800243c919e7a10f362dd98cef8b":697,"0d2f5a3232ea4126bb2ae7df209f8c7750f8c9f0":8,"21735c63ec2887f97936bd2de9e5045cd7418324":4,"dc2e860db0b304cd81fcecd118f38fa6d0167fa5":1262,"2d9bab3960ce628520e0c054b98887229ae5c229":662,"82d57454d2be2df4b048928a47c09eb8584bda90":19,"1b881709980804bc9e9c54cdb2da28c5fba6945f":34,"7d54757fdf09fae080274ad615e602b06b3b176a":162,"59aadf9834638c8e149d351830f0cffe4fb07bed":20,"80356d3bfa9bfc0ce0ae05baaefeb071f484c115":46,"c6d7e7ba603553aabe2e9eff8bf292561f7a2c8b":44,"2cae95b83ef60d1295c907c016e38c5e651a7707":11,"bfe6ef6ec1766e5cae6ccc9a636cf72c1474e125":129,"068ad500acc95307fde4512382a311f01aa9db16":4},"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":24518.0,"index":0.122,"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":2.0,"per_kloc:emoji_in_code":0.082,"files:emoji_in_code":1.0,"count:assistant_voice":1.0,"per_kloc:assistant_voice":0.041,"files:assistant_voice":1.0},"findings":[],"evidence":[{"kind":"stylometry:assistant_voice","description":"assistant-style phrasing left in code: Key features:\\n\\","ref":"src/tools/subagent.rs:15","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/subagent.rs#L15","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":17.0,"findings_high":12.0,"findings_medium":2.0,"findings_low":3.0,"weighted_findings":16.2,"scanned_lines":24518.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":"tasks/evaluators/evaluate.py","line":146,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:tasks/evaluators/evaluate.py:146"},{"rule_id":"opengrep/python.lang.security.audit.subprocess-shell-true","severity":"high","message":"Found 'subprocess' function 'run' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead. [confidence medium]","path":"tasks/evaluators/evaluate.py","line":147,"fingerprint":"python.lang.security.audit.subprocess-shell-true:tasks/evaluators/evaluate.py:147"},{"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":"tasks/evaluators/evaluate.py","line":204,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:tasks/evaluators/evaluate.py:204"},{"rule_id":"opengrep/python.lang.security.audit.subprocess-shell-true","severity":"high","message":"Found 'subprocess' function 'run' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead. [confidence medium]","path":"tasks/evaluators/evaluate.py","line":205,"fingerprint":"python.lang.security.audit.subprocess-shell-true:tasks/evaluators/evaluate.py:205"},{"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":"tasks/runner.py","line":111,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:tasks/runner.py:111"},{"rule_id":"opengrep/python.lang.security.audit.subprocess-shell-true","severity":"high","message":"Found 'subprocess' function 'run' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead. [confidence medium]","path":"tasks/runner.py","line":111,"fingerprint":"python.lang.security.audit.subprocess-shell-true:tasks/runner.py:111"},{"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":"tasks/runner.py","line":158,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:tasks/runner.py:158"},{"rule_id":"opengrep/python.lang.security.audit.subprocess-shell-true","severity":"high","message":"Found 'subprocess' function 'run' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead. [confidence medium]","path":"tasks/runner.py","line":158,"fingerprint":"python.lang.security.audit.subprocess-shell-true:tasks/runner.py:158"},{"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":"tasks/runner.py","line":181,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:tasks/runner.py:181"},{"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":"tasks/runner.py","line":260,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:tasks/runner.py:260"},{"rule_id":"opengrep/python.lang.security.audit.subprocess-shell-true","severity":"high","message":"Found 'subprocess' function 'run' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead. [confidence medium]","path":"tasks/runner.py","line":260,"fingerprint":"python.lang.security.audit.subprocess-shell-true:tasks/runner.py:260"},{"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":"tasks/runner.py","line":277,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:tasks/runner.py:277"},{"rule_id":"opengrep/python.lang.security.audit.insecure-file-permissions","severity":"medium","message":"These permissions `0o755` are widely permissive and grant access to more people than may be necessary. A good default is `0o644` which gives read and write access to yourself and read access to everyone else. [confidence medium]","path":"tasks/evaluators/evaluate.py","line":237,"fingerprint":"python.lang.security.audit.insecure-file-permissions:tasks/evaluators/evaluate.py:237"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-md5","severity":"medium","message":"Detected MD5 hash algorithm which is considered insecure. MD5 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":"tasks/schema.py","line":185,"fingerprint":"python.lang.security.insecure-hash-algorithm-md5:tasks/schema.py:185"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src/tools/file_ops.rs","line":159,"fingerprint":"rust.lang.security.unsafe-usage:src/tools/file_ops.rs:159"},{"rule_id":"opengrep/rust.lang.security.current-exe","severity":"low","message":"current_exe should not be used for security operations. From the docs: \"The output of this function should not be trusted for anything that might have security implications. Basically, if users can run the executable, they can change the output arbitrarily.\" [confidence high]","path":"src/tools/subagent.rs","line":167,"fingerprint":"rust.lang.security.current-exe:src/tools/subagent.rs:167"},{"rule_id":"opengrep/rust.lang.security.current-exe","severity":"low","message":"current_exe should not be used for security operations. From the docs: \"The output of this function should not be trusted for anything that might have security implications. Basically, if users can run the executable, they can change the output arbitrarily.\" [confidence high]","path":"src/tools/subagent.rs","line":281,"fingerprint":"rust.lang.security.current-exe:src/tools/subagent.rs:281"}],"evidence":[],"data":{"rulesets":["python","rust","c"]},"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":1.0},"findings":[],"evidence":[{"kind":"posture","description":"Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"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":284.0,"function_nloc":21713.0,"mean_ccn":5.59,"p90_ccn":13.0,"complex_functions":24.0,"long_functions":66.0,"many_param_functions":0.0,"risky_nloc_share":0.7197},"findings":[],"evidence":[{"kind":"complex-function","description":"run in src/agent/runner.rs: complexity 181, 846 lines","ref":"src/agent/runner.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/runner.rs#L657","weight":1.0},{"kind":"complex-function","description":"run_turn in src/agent/runner.rs: complexity 85, 450 lines","ref":"src/agent/runner.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/runner.rs#L151","weight":1.0},{"kind":"complex-function","description":"execute_tool_with_recovery in src/agent/runner.rs: complexity 43, 159 lines","ref":"src/agent/runner.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/runner.rs#L2228","weight":0.7166666666666667},{"kind":"complex-function","description":"html_to_text in src/tools/web.rs: complexity 41, 121 lines","ref":"src/tools/web.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/web.rs#L247","weight":0.6833333333333333},{"kind":"complex-function","description":"edit_file in src/tools/file_ops.rs: complexity 31, 121 lines","ref":"src/tools/file_ops.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/file_ops.rs#L230","weight":0.5166666666666667},{"kind":"complex-function","description":"stream_anthropic in src/agent/api_client.rs: complexity 27, 131 lines","ref":"src/agent/api_client.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/api_client.rs#L681","weight":0.45},{"kind":"complex-function","description":"execute_tool in src/tools/mod.rs: complexity 26, 30 lines","ref":"src/tools/mod.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/mod.rs#L41","weight":0.43333333333333335},{"kind":"complex-function","description":"run_tests in src/tools/testing.rs: complexity 25, 87 lines","ref":"src/tools/testing.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/testing.rs#L35","weight":0.4166666666666667},{"kind":"complex-function","description":"stream_openai in src/agent/api_client.rs: complexity 24, 103 lines","ref":"src/agent/api_client.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/api_client.rs#L825","weight":0.4},{"kind":"complex-function","description":"validate_initial_environment in src/agent/runner.rs: complexity 24, 81 lines","ref":"src/agent/runner.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/runner.rs#L2134","weight":0.4}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":18604.0,"duplicated_lines":1616.0,"duplicated_share":0.0869,"files":43.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src/agent/api_client.rs:429 and src/agent/api_client.rs:559","ref":"src/agent/api_client.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/api_client.rs#L429","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/agent/runner.rs:181 and src/agent/runner.rs:690","ref":"src/agent/runner.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/agent/runner.rs#L181","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/main.rs:117 and src/main.rs:341","ref":"src/main.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/main.rs#L117","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/tools/file_ops.rs:12 and src/tools/file_ops.rs:35","ref":"src/tools/file_ops.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/file_ops.rs#L12","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/tools/git.rs:12 and src/tools/state.rs:15","ref":"src/tools/git.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/git.rs#L12","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/tools/navigate.rs:14 and src/tools/navigate.rs:38","ref":"src/tools/navigate.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/navigate.rs#L14","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/tools/search.rs:12 and src/tools/search.rs:33","ref":"src/tools/search.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/search.rs#L12","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/tools/subagent.rs:99 and src/tools/subagent.rs:269","ref":"src/tools/subagent.rs","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/src/tools/subagent.rs#L99","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: tasks/generators/ambiguous.py:35 and tasks/generators/boundary.py:35","ref":"tasks/generators/ambiguous.py","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/tasks/generators/ambiguous.py#L35","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: tasks/generators/ambiguous.py:342 and tasks/generators/repo_debug.py:275","ref":"tasks/generators/ambiguous.py","url":"https://github.com/unconst/ninja/blob/245d502a1ffff8706c90c82a9eec335a55f1f592/tasks/generators/ambiguous.py#L342","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":2.0,"weighted_findings":2.0,"scanned_lines":24518.0,"category:maintainability":2.0},"findings":[{"rule_id":"opengrep/python.lang.maintainability.useless-literal","severity":"medium","message":"key `\".env.example\"` is uselessly assigned twice","path":"tasks/generators/local_ops.py","line":649,"fingerprint":"python.lang.maintainability.useless-literal:tasks/generators/local_ops.py:649"},{"rule_id":"opengrep/python.lang.maintainability.useless-literal","severity":"medium","message":"key `\".env.example\"` is uselessly assigned twice","path":"tasks/generators/local_ops.py","line":650,"fingerprint":"python.lang.maintainability.useless-literal:tasks/generators/local_ops.py:650"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0052,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0268,"test_lines":64.0,"source_lines":24518.0,"test_ratio":0.0026,"ci_files":0.0,"cochange_share":0.0067,"cochange_commits":149.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":240.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":65.0,"escapes_per_kloc":3.945},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":18926.0,"other_lines":5592.0,"files_blamed":43.0,"blame_failures":0.0,"quality:ai_findings":2.0,"quality:ai_per_kloc":0.106,"quality:other_findings":0.0,"quality:other_per_kloc":0.0,"security:ai_findings":17.0,"security:ai_per_kloc":0.898,"security:other_findings":0.0,"security:other_per_kloc":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":["unreviewed-ai-risk"]}