Wesker 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. wesker-0.4.0/.github/workflows/ci.yml +60 -0
  2. wesker-0.4.0/.github/workflows/spec-badges.yml +134 -0
  3. wesker-0.4.0/.gitignore +18 -0
  4. wesker-0.4.0/.lintgate/.gitignore +2 -0
  5. wesker-0.4.0/.lintgate/analysis/controlplane_apply_repairs/aa7e69b50e.json +1 -0
  6. wesker-0.4.0/.lintgate/analysis/controlplane_apply_repairs/ec7c0048a4.json +1 -0
  7. wesker-0.4.0/.lintgate/analysis/controlplane_get_details/c5be24f8a742.json +1 -0
  8. wesker-0.4.0/.lintgate/analysis/controlplane_get_details/dd942832f273.json +1 -0
  9. wesker-0.4.0/.lintgate/analysis/controlplane_run/032119ba0de7.json +1 -0
  10. wesker-0.4.0/.lintgate/analysis/controlplane_run/7ca7c2e6785d.json +1 -0
  11. wesker-0.4.0/.lintgate/analysis/controlplane_run/c5be24f8a742.json +1 -0
  12. wesker-0.4.0/.lintgate/analysis/controlplane_run/dd942832f273.json +1 -0
  13. wesker-0.4.0/.lintgate/analysis/getting_started/b1b137ea49.json +1 -0
  14. wesker-0.4.0/.lintgate/analysis/mutation_decompose/13bca1c316.json +1 -0
  15. wesker-0.4.0/.lintgate/analysis/mutation_decompose/1c34ce40e4.json +1 -0
  16. wesker-0.4.0/.lintgate/analysis/mutation_decompose/814221b86e.json +1 -0
  17. wesker-0.4.0/.lintgate/analysis/mutation_detective/89225cd39b.json +1 -0
  18. wesker-0.4.0/.lintgate/analysis/mutation_detective/8e0d79183b.json +1 -0
  19. wesker-0.4.0/.lintgate/analysis/mutation_detective/a2b87746f1.json +1 -0
  20. wesker-0.4.0/.lintgate/analysis/mutation_prescribe/86907802b0.json +1 -0
  21. wesker-0.4.0/.lintgate/analysis/mutation_prescribe/8ba1842066.json +1 -0
  22. wesker-0.4.0/.lintgate/analysis/mutation_prescribe/d8c27b6740.json +1 -0
  23. wesker-0.4.0/.lintgate/analysis/mutation_prescribe_tests/945938f342.json +1 -0
  24. wesker-0.4.0/.lintgate/analysis/mutation_prescribe_tests/e10e20f41c.json +1 -0
  25. wesker-0.4.0/.lintgate/analysis/mutation_run_full/66205a81ab.json +1 -0
  26. wesker-0.4.0/.lintgate/analysis/mutation_run_full/90a4024150.json +1 -0
  27. wesker-0.4.0/.lintgate/analysis/mutation_run_full/d96b0025df.json +1 -0
  28. wesker-0.4.0/.lintgate/analysis/posttooluse_report/01c38a22c6.json +1 -0
  29. wesker-0.4.0/.lintgate/analysis/posttooluse_report/0adb93726e.json +1 -0
  30. wesker-0.4.0/.lintgate/analysis/posttooluse_report/0d93d9c342.json +1 -0
  31. wesker-0.4.0/.lintgate/analysis/posttooluse_report/0f43097cdd.json +1 -0
  32. wesker-0.4.0/.lintgate/analysis/posttooluse_report/163592a16a.json +1 -0
  33. wesker-0.4.0/.lintgate/analysis/posttooluse_report/1d63ac7e95.json +1 -0
  34. wesker-0.4.0/.lintgate/analysis/posttooluse_report/1ff3ae74a5.json +1 -0
  35. wesker-0.4.0/.lintgate/analysis/posttooluse_report/22c211e518.json +1 -0
  36. wesker-0.4.0/.lintgate/analysis/posttooluse_report/27a2024604.json +1 -0
  37. wesker-0.4.0/.lintgate/analysis/posttooluse_report/2b3519f903.json +1 -0
  38. wesker-0.4.0/.lintgate/analysis/posttooluse_report/2c86b66e07.json +1 -0
  39. wesker-0.4.0/.lintgate/analysis/posttooluse_report/2f39b7aebf.json +1 -0
  40. wesker-0.4.0/.lintgate/analysis/posttooluse_report/3519d70f91.json +1 -0
  41. wesker-0.4.0/.lintgate/analysis/posttooluse_report/3a05249e70.json +1 -0
  42. wesker-0.4.0/.lintgate/analysis/posttooluse_report/3c09eb905b.json +1 -0
  43. wesker-0.4.0/.lintgate/analysis/posttooluse_report/3c956cfd7d.json +1 -0
  44. wesker-0.4.0/.lintgate/analysis/posttooluse_report/416865b509.json +1 -0
  45. wesker-0.4.0/.lintgate/analysis/posttooluse_report/43c40db7a4.json +1 -0
  46. wesker-0.4.0/.lintgate/analysis/posttooluse_report/44eeb7066c.json +1 -0
  47. wesker-0.4.0/.lintgate/analysis/posttooluse_report/4e4880b7ea.json +1 -0
  48. wesker-0.4.0/.lintgate/analysis/posttooluse_report/4e83855af4.json +1 -0
  49. wesker-0.4.0/.lintgate/analysis/posttooluse_report/4e9a3f215b.json +1 -0
  50. wesker-0.4.0/.lintgate/analysis/posttooluse_report/4fa5281f75.json +1 -0
  51. wesker-0.4.0/.lintgate/analysis/posttooluse_report/5872b4d3c8.json +1 -0
  52. wesker-0.4.0/.lintgate/analysis/posttooluse_report/599e7c8457.json +1 -0
  53. wesker-0.4.0/.lintgate/analysis/posttooluse_report/5a3857070e.json +1 -0
  54. wesker-0.4.0/.lintgate/analysis/posttooluse_report/5bbda62736.json +1 -0
  55. wesker-0.4.0/.lintgate/analysis/posttooluse_report/5c6405bc56.json +1 -0
  56. wesker-0.4.0/.lintgate/analysis/posttooluse_report/60647c3f74.json +1 -0
  57. wesker-0.4.0/.lintgate/analysis/posttooluse_report/651c13cb65.json +1 -0
  58. wesker-0.4.0/.lintgate/analysis/posttooluse_report/6c109d4f99.json +1 -0
  59. wesker-0.4.0/.lintgate/analysis/posttooluse_report/708692f10d.json +1 -0
  60. wesker-0.4.0/.lintgate/analysis/posttooluse_report/7581230227.json +1 -0
  61. wesker-0.4.0/.lintgate/analysis/posttooluse_report/7686e64a56.json +1 -0
  62. wesker-0.4.0/.lintgate/analysis/posttooluse_report/777cad1604.json +1 -0
  63. wesker-0.4.0/.lintgate/analysis/posttooluse_report/77d515d47d.json +1 -0
  64. wesker-0.4.0/.lintgate/analysis/posttooluse_report/7a5320e729.json +1 -0
  65. wesker-0.4.0/.lintgate/analysis/posttooluse_report/7c7580e8c5.json +1 -0
  66. wesker-0.4.0/.lintgate/analysis/posttooluse_report/7ca0ffeada.json +1 -0
  67. wesker-0.4.0/.lintgate/analysis/posttooluse_report/8644a9c9b7.json +1 -0
  68. wesker-0.4.0/.lintgate/analysis/posttooluse_report/866a858c5f.json +1 -0
  69. wesker-0.4.0/.lintgate/analysis/posttooluse_report/86ab7e02a7.json +1 -0
  70. wesker-0.4.0/.lintgate/analysis/posttooluse_report/86cbf12d59.json +1 -0
  71. wesker-0.4.0/.lintgate/analysis/posttooluse_report/87f731765a.json +1 -0
  72. wesker-0.4.0/.lintgate/analysis/posttooluse_report/88b3b87dae.json +1 -0
  73. wesker-0.4.0/.lintgate/analysis/posttooluse_report/8979d5d26d.json +1 -0
  74. wesker-0.4.0/.lintgate/analysis/posttooluse_report/8a5ccbd587.json +1 -0
  75. wesker-0.4.0/.lintgate/analysis/posttooluse_report/8ae7a65cc7.json +1 -0
  76. wesker-0.4.0/.lintgate/analysis/posttooluse_report/8b0e881b98.json +1 -0
  77. wesker-0.4.0/.lintgate/analysis/posttooluse_report/8c39739c67.json +1 -0
  78. wesker-0.4.0/.lintgate/analysis/posttooluse_report/8e8f29e106.json +1 -0
  79. wesker-0.4.0/.lintgate/analysis/posttooluse_report/9279325861.json +1 -0
  80. wesker-0.4.0/.lintgate/analysis/posttooluse_report/999c62662d.json +1 -0
  81. wesker-0.4.0/.lintgate/analysis/posttooluse_report/9bc232d10d.json +1 -0
  82. wesker-0.4.0/.lintgate/analysis/posttooluse_report/a26a066f81.json +1 -0
  83. wesker-0.4.0/.lintgate/analysis/posttooluse_report/a5847daa51.json +1 -0
  84. wesker-0.4.0/.lintgate/analysis/posttooluse_report/a5968eb56c.json +1 -0
  85. wesker-0.4.0/.lintgate/analysis/posttooluse_report/a9c9b072a5.json +1 -0
  86. wesker-0.4.0/.lintgate/analysis/posttooluse_report/ae4ec1e7bf.json +1 -0
  87. wesker-0.4.0/.lintgate/analysis/posttooluse_report/ae87d1f9f9.json +1 -0
  88. wesker-0.4.0/.lintgate/analysis/posttooluse_report/b4b29f0298.json +1 -0
  89. wesker-0.4.0/.lintgate/analysis/posttooluse_report/b4b5a64939.json +1 -0
  90. wesker-0.4.0/.lintgate/analysis/posttooluse_report/b6fc83d9d2.json +1 -0
  91. wesker-0.4.0/.lintgate/analysis/posttooluse_report/b9414d809a.json +1 -0
  92. wesker-0.4.0/.lintgate/analysis/posttooluse_report/ba2bcbd7e1.json +1 -0
  93. wesker-0.4.0/.lintgate/analysis/posttooluse_report/bcb0dd72b2.json +1 -0
  94. wesker-0.4.0/.lintgate/analysis/posttooluse_report/be6a4eb84d.json +1 -0
  95. wesker-0.4.0/.lintgate/analysis/posttooluse_report/bf694c53ab.json +1 -0
  96. wesker-0.4.0/.lintgate/analysis/posttooluse_report/c1be8d48e5.json +1 -0
  97. wesker-0.4.0/.lintgate/analysis/posttooluse_report/c1fb1856c8.json +1 -0
  98. wesker-0.4.0/.lintgate/analysis/posttooluse_report/c5a71703d0.json +1 -0
  99. wesker-0.4.0/.lintgate/analysis/posttooluse_report/c64009d9d8.json +1 -0
  100. wesker-0.4.0/.lintgate/analysis/posttooluse_report/c7590cfac9.json +1 -0
  101. wesker-0.4.0/.lintgate/analysis/posttooluse_report/c870fc7275.json +1 -0
  102. wesker-0.4.0/.lintgate/analysis/posttooluse_report/ce4cc5589c.json +1 -0
  103. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d3b48ab04e.json +1 -0
  104. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d4ebf35e81.json +1 -0
  105. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d4fa36deea.json +1 -0
  106. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d51974d055.json +1 -0
  107. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d5baef6c8f.json +1 -0
  108. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d708e40ae4.json +1 -0
  109. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d7a7a83dc9.json +1 -0
  110. wesker-0.4.0/.lintgate/analysis/posttooluse_report/d89ead8259.json +1 -0
  111. wesker-0.4.0/.lintgate/analysis/posttooluse_report/dcc845dccd.json +1 -0
  112. wesker-0.4.0/.lintgate/analysis/posttooluse_report/e01a50f092.json +1 -0
  113. wesker-0.4.0/.lintgate/analysis/posttooluse_report/e55e9da493.json +1 -0
  114. wesker-0.4.0/.lintgate/analysis/posttooluse_report/e6037666d2.json +1 -0
  115. wesker-0.4.0/.lintgate/analysis/posttooluse_report/e92edd8d9b.json +1 -0
  116. wesker-0.4.0/.lintgate/analysis/posttooluse_report/ec994a91b1.json +1 -0
  117. wesker-0.4.0/.lintgate/analysis/posttooluse_report/f2b894b13f.json +1 -0
  118. wesker-0.4.0/.lintgate/analysis/posttooluse_report/f5e2a8af7c.json +1 -0
  119. wesker-0.4.0/.lintgate/analysis/posttooluse_report/f6888201b9.json +1 -0
  120. wesker-0.4.0/.lintgate/analysis/posttooluse_report/f7832be64e.json +1 -0
  121. wesker-0.4.0/.lintgate/analysis/posttooluse_report/faf10ea74b.json +1 -0
  122. wesker-0.4.0/.lintgate/analysis/posttooluse_report/fcd67f6ac2.json +1 -0
  123. wesker-0.4.0/.lintgate/analysis/posttooluse_report/fcdb2aab30.json +1 -0
  124. wesker-0.4.0/.lintgate/analysis/posttooluse_report/ff744cd186.json +1 -0
  125. wesker-0.4.0/.lintgate/analysis/posttooluse_report/ff74f35fbf.json +1 -0
  126. wesker-0.4.0/.lintgate/analysis/refactor_extract_method/49c9e054f6.json +1 -0
  127. wesker-0.4.0/.lintgate/analysis/refactor_extract_method/999bb017d7.json +1 -0
  128. wesker-0.4.0/.lintgate/analysis/refactor_extract_method/a05461bd0f.json +1 -0
  129. wesker-0.4.0/.lintgate/analysis/refactor_extract_method/e0b0e37670.json +1 -0
  130. wesker-0.4.0/.lintgate/analysis/spec_file_analyze/644338ef0a.json +1 -0
  131. wesker-0.4.0/.lintgate/analysis/spec_file_analyze/a87b9b1669.json +1 -0
  132. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743424.json +1 -0
  133. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743447.json +1 -0
  134. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743504.json +1 -0
  135. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743519.json +1 -0
  136. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743534.json +1 -0
  137. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743545.json +1 -0
  138. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743553.json +1 -0
  139. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743569.json +1 -0
  140. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743577.json +1 -0
  141. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743665.json +1 -0
  142. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743679.json +1 -0
  143. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743693.json +1 -0
  144. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743710.json +1 -0
  145. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743730.json +1 -0
  146. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743740.json +1 -0
  147. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743763.json +1 -0
  148. wesker-0.4.0/.lintgate/hooks/posttooluse/1783743803.json +1 -0
  149. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744159.json +1 -0
  150. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744273.json +1 -0
  151. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744290.json +1 -0
  152. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744298.json +1 -0
  153. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744342.json +1 -0
  154. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744399.json +1 -0
  155. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744414.json +1 -0
  156. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744497.json +1 -0
  157. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744521.json +1 -0
  158. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744531.json +1 -0
  159. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744539.json +1 -0
  160. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744669.json +1 -0
  161. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744680.json +1 -0
  162. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744697.json +1 -0
  163. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744723.json +1 -0
  164. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744742.json +1 -0
  165. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744819.json +1 -0
  166. wesker-0.4.0/.lintgate/hooks/posttooluse/1783744830.json +1 -0
  167. wesker-0.4.0/.lintgate/hooks/posttooluse/1783745307.json +1 -0
  168. wesker-0.4.0/.lintgate/hooks/posttooluse/1783745398.json +1 -0
  169. wesker-0.4.0/.lintgate/hooks/posttooluse/1783745823.json +1 -0
  170. wesker-0.4.0/.lintgate/hooks/posttooluse/1783745954.json +1 -0
  171. wesker-0.4.0/.lintgate/hooks/posttooluse/1783746681.json +1 -0
  172. wesker-0.4.0/.lintgate/hooks/posttooluse/1783747170.json +1 -0
  173. wesker-0.4.0/.lintgate/hooks/posttooluse/1783747179.json +1 -0
  174. wesker-0.4.0/.lintgate/hooks/posttooluse/1783747886.json +1 -0
  175. wesker-0.4.0/.lintgate/hooks/posttooluse/1783747965.json +1 -0
  176. wesker-0.4.0/.lintgate/hooks/posttooluse/1783747993.json +1 -0
  177. wesker-0.4.0/.lintgate/hooks/posttooluse/1783748006.json +1 -0
  178. wesker-0.4.0/.lintgate/hooks/posttooluse/1783748051.json +1 -0
  179. wesker-0.4.0/.lintgate/hooks/posttooluse/1783748120.json +1 -0
  180. wesker-0.4.0/.lintgate/hooks/posttooluse/1783748244.json +1 -0
  181. wesker-0.4.0/.lintgate/hooks/posttooluse/1783748308.json +1 -0
  182. wesker-0.4.0/.lintgate/hooks/posttooluse/1783749045.json +1 -0
  183. wesker-0.4.0/.lintgate/hooks/posttooluse/1783749077.json +1 -0
  184. wesker-0.4.0/.lintgate/hooks/posttooluse/1783749146.json +1 -0
  185. wesker-0.4.0/.lintgate/hooks/posttooluse/1783749537.json +1 -0
  186. wesker-0.4.0/.lintgate/hooks/posttooluse/1783749548.json +1 -0
  187. wesker-0.4.0/.lintgate/hooks/posttooluse/1783749761.json +1 -0
  188. wesker-0.4.0/.lintgate/hooks/posttooluse/1783749927.json +1 -0
  189. wesker-0.4.0/.lintgate/hooks/posttooluse/1783750117.json +1 -0
  190. wesker-0.4.0/.lintgate/hooks/posttooluse/1784071987.json +1 -0
  191. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072537.json +1 -0
  192. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072563.json +1 -0
  193. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072870.json +1 -0
  194. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072895.json +1 -0
  195. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072911.json +1 -0
  196. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072929.json +1 -0
  197. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072947.json +1 -0
  198. wesker-0.4.0/.lintgate/hooks/posttooluse/1784072973.json +1 -0
  199. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073003.json +1 -0
  200. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073034.json +1 -0
  201. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073049.json +1 -0
  202. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073071.json +1 -0
  203. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073095.json +1 -0
  204. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073107.json +1 -0
  205. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073120.json +1 -0
  206. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073132.json +1 -0
  207. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073175.json +1 -0
  208. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073191.json +1 -0
  209. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073202.json +1 -0
  210. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073215.json +1 -0
  211. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073229.json +1 -0
  212. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073243.json +1 -0
  213. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073262.json +1 -0
  214. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073278.json +1 -0
  215. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073300.json +1 -0
  216. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073312.json +1 -0
  217. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073328.json +1 -0
  218. wesker-0.4.0/.lintgate/hooks/posttooluse/1784073683.json +1 -0
  219. wesker-0.4.0/.lintgate/hooks/posttooluse/1784074454.json +1 -0
  220. wesker-0.4.0/.lintgate/hooks/posttooluse/1784074471.json +1 -0
  221. wesker-0.4.0/.lintgate/hooks/posttooluse/1784074640.json +1 -0
  222. wesker-0.4.0/.lintgate/hooks/posttooluse/1784074670.json +1 -0
  223. wesker-0.4.0/.lintgate/hooks/posttooluse/1784074697.json +1 -0
  224. wesker-0.4.0/.lintgate/hooks/posttooluse/1784074945.json +1 -0
  225. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075245.json +1 -0
  226. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075271.json +1 -0
  227. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075306.json +1 -0
  228. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075377.json +1 -0
  229. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075395.json +1 -0
  230. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075410.json +1 -0
  231. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075442.json +1 -0
  232. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075458.json +1 -0
  233. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075472.json +1 -0
  234. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075700.json +1 -0
  235. wesker-0.4.0/.lintgate/hooks/posttooluse/1784075714.json +1 -0
  236. wesker-0.4.0/.lintgate/hooks/posttooluse/1784076744.json +1 -0
  237. wesker-0.4.0/.lintgate/hooks/posttooluse/1784076774.json +1 -0
  238. wesker-0.4.0/.lintgate/hooks/posttooluse/1784078898.json +1 -0
  239. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079212.json +1 -0
  240. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079225.json +1 -0
  241. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079496.json +1 -0
  242. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079535.json +1 -0
  243. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079760.json +1 -0
  244. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079773.json +1 -0
  245. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079807.json +1 -0
  246. wesker-0.4.0/.lintgate/hooks/posttooluse/1784079859.json +1 -0
  247. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___build_static_impact_map.json +1 -0
  248. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___code_hash.json +1 -0
  249. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___discover_all_test_files.json +1 -0
  250. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___discover_by_convention.json +1 -0
  251. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___load_cached_state.json +1 -0
  252. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___load_function_cache.json +1 -0
  253. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___pct_color.json +1 -0
  254. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py___save_function_cache.json +1 -0
  255. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py__discover_tests.json +1 -0
  256. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py__load_test_callables.json +1 -0
  257. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py__profile_codebase.json +1 -0
  258. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py__profile_file.json +1 -0
  259. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py__profile_function.json +1 -0
  260. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py__profile_function_cached.json +1 -0
  261. wesker-0.4.0/.lintgate/mutation/Wesker_ci.py__walk_functions.json +1 -0
  262. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__CategoryResult.survival_rate.json +1 -0
  263. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__ProfilingResult.to_dict.json +1 -0
  264. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__SamplingResult.to_dict.json +1 -0
  265. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___ArithmeticMutator.visit_BinOp.json +1 -0
  266. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___ArithmeticMutator.visit_UnaryOp.json +1 -0
  267. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___BaseMutator.__init__.json +1 -0
  268. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___BaseMutator._note.json +1 -0
  269. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___BoundaryMutator.visit_Compare.json +1 -0
  270. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___LogicalMutator.visit_BoolOp.json +1 -0
  271. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___LogicalMutator.visit_UnaryOp.json +1 -0
  272. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___StateMutator.__init__.json +1 -0
  273. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___StateMutator.visit_Assign.json +1 -0
  274. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___StateMutator.visit_Return.json +1 -0
  275. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___SwapMutator.visit_Call.json +1 -0
  276. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___TypeMutator.visit_Call.json +1 -0
  277. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___ValueMutator.__init__.json +1 -0
  278. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___ValueMutator._mutate_constant.json +1 -0
  279. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___ValueMutator.visit_Constant.json +1 -0
  280. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___callee_name.json +1 -0
  281. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_arithmetic_target.json +1 -0
  282. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_boundary_target.json +1 -0
  283. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_logical_target.json +1 -0
  284. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_state_assign_target.json +1 -0
  285. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_state_return_target.json +1 -0
  286. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_state_target.json +1 -0
  287. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_stmt_target.json +1 -0
  288. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_swap_target.json +1 -0
  289. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_targets.json +1 -0
  290. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_type_target.json +1 -0
  291. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___count_value_target.json +1 -0
  292. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___docstring_positions.json +1 -0
  293. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___elapsed.json +1 -0
  294. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___extract_compare_parts.json +1 -0
  295. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___find_closure_cell.json +1 -0
  296. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___generate_boundary_inputs.json +1 -0
  297. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___generate_state_mutants.json +1 -0
  298. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___get_closure_bindings.json +1 -0
  299. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___get_raw_attr.json +1 -0
  300. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___greedy_dimension_order.json +1 -0
  301. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___is_dead.json +1 -0
  302. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___is_self_assign.json +1 -0
  303. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___isinstance_type_name.json +1 -0
  304. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___make_transformer.json +1 -0
  305. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___patch_mutant_into_test.json +1 -0
  306. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___preserve_closure_binding_shape.json +1 -0
  307. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___preserve_descriptor_shape.json +1 -0
  308. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___record_dimensions.json +1 -0
  309. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___record_state_dimensions.json +1 -0
  310. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___resolve_qualified_owner.json +1 -0
  311. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___run_test_with_timeout.json +1 -0
  312. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___select_greedy.json +1 -0
  313. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___stable_target_key.json +1 -0
  314. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___stable_target_order.json +1 -0
  315. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___stmt_label.json +1 -0
  316. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___unpatch_mutant.json +1 -0
  317. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py___unwrap_descriptor.json +1 -0
  318. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__check_equivalent.json +1 -0
  319. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__estimate_universe_size.json +1 -0
  320. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__evaluate_mutant.json +1 -0
  321. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__extract_boundary_inputs.json +1 -0
  322. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__generate_mutants.json +1 -0
  323. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__run_function_converged.json +1 -0
  324. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__run_function_profiling.json +1 -0
  325. wesker-0.4.0/.lintgate/mutation/Wesker_engine.py__run_function_sampling.json +1 -0
  326. wesker-0.4.0/.lintgate/mutation/Wesker_filter.py___classify_signal_node.json +1 -0
  327. wesker-0.4.0/.lintgate/mutation/Wesker_filter.py___collect_signals.json +1 -0
  328. wesker-0.4.0/.lintgate/mutation/Wesker_filter.py__filter_categories.json +1 -0
  329. wesker-0.4.0/.lintgate/mutation/Wesker_filter.py__prioritize_categories.json +1 -0
  330. wesker-0.4.0/.lintgate/runtime_state.json +1 -0
  331. wesker-0.4.0/.lintgate/runtime_state.lock +0 -0
  332. wesker-0.4.0/.lintgate/skeletons/prescribe_engine.py +10 -0
  333. wesker-0.4.0/.lintgate/spec_cache/prescriptive_projection.json +530 -0
  334. wesker-0.4.0/.lintgate/test_discovery_embeddings.json +1 -0
  335. wesker-0.4.0/.python-version +1 -0
  336. wesker-0.4.0/LICENSE +21 -0
  337. wesker-0.4.0/PKG-INFO +347 -0
  338. wesker-0.4.0/README.md +322 -0
  339. wesker-0.4.0/README_Wesker.md +322 -0
  340. wesker-0.4.0/Wesker/__init__.py +56 -0
  341. wesker-0.4.0/Wesker/__main__.py +5 -0
  342. wesker-0.4.0/Wesker/ci.py +927 -0
  343. wesker-0.4.0/Wesker/cli.py +188 -0
  344. wesker-0.4.0/Wesker/engine.py +2804 -0
  345. wesker-0.4.0/Wesker/filter.py +181 -0
  346. wesker-0.4.0/Wesker/line_coverage.py +159 -0
  347. wesker-0.4.0/Wesker/memory_guard.py +220 -0
  348. wesker-0.4.0/Wesker/metrics.py +612 -0
  349. wesker-0.4.0/Wesker/py.typed +0 -0
  350. wesker-0.4.0/Wesker/pytest_discovery.py +183 -0
  351. wesker-0.4.0/action.yml +106 -0
  352. wesker-0.4.0/conftest.py +12 -0
  353. wesker-0.4.0/pyproject.toml +64 -0
  354. wesker-0.4.0/sonar-project.properties +52 -0
  355. wesker-0.4.0/tests/test__baseline_failures_synth.py +19 -0
  356. wesker-0.4.0/tests/test_ci.py +254 -0
  357. wesker-0.4.0/tests/test_coverage_floor_synth.py +30 -0
  358. wesker-0.4.0/tests/test_diff_summary.py +41 -0
  359. wesker-0.4.0/tests/test_dimension_budget_synth.py +14 -0
  360. wesker-0.4.0/tests/test_dof_budget.py +140 -0
  361. wesker-0.4.0/tests/test_engine.py +488 -0
  362. wesker-0.4.0/tests/test_filter.py +235 -0
  363. wesker-0.4.0/tests/test_kill_attribution.py +94 -0
  364. wesker-0.4.0/tests/test_mutant_namespace.py +55 -0
  365. wesker-0.4.0/tests/test_pytest_discovery.py +78 -0
  366. wesker-0.4.0/tests/test_scope_tests_verdict_exact.py +165 -0
  367. wesker-0.4.0/uv.lock +312 -0
@@ -0,0 +1,60 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ types: [opened, synchronize, reopened]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0
16
+
17
+ - uses: astral-sh/setup-uv@v4
18
+ with:
19
+ version: "latest"
20
+
21
+ - name: Install dependencies
22
+ run: uv sync
23
+
24
+ - name: Lint
25
+ run: uv run ruff check Wesker/ tests/
26
+
27
+ - name: Format check
28
+ run: uv run ruff format --check Wesker/ tests/
29
+
30
+ - name: Test with coverage
31
+ run: uv run pytest tests/ --cov=Wesker --cov-report=xml:coverage.xml -q
32
+
33
+ - name: Upload coverage report
34
+ uses: actions/upload-artifact@v4
35
+ with:
36
+ name: coverage-report
37
+ path: coverage.xml
38
+
39
+ sonarcloud:
40
+ name: SonarCloud
41
+ runs-on: ubuntu-latest
42
+ needs: test
43
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
44
+ env:
45
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+ with:
49
+ fetch-depth: 0
50
+
51
+ - name: Download coverage report
52
+ uses: actions/download-artifact@v4
53
+ with:
54
+ name: coverage-report
55
+
56
+ # Skips (keeping CI green) until SONAR_TOKEN is set; activates the
57
+ # Quality Gate + Coverage badges the moment the secret is added.
58
+ - name: SonarQube Scan
59
+ if: env.SONAR_TOKEN != ''
60
+ uses: SonarSource/sonarqube-scan-action@v6
@@ -0,0 +1,134 @@
1
+ name: Specification Badges
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ spec_badges:
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ contents: write
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: astral-sh/setup-uv@v4
20
+ with:
21
+ version: "latest"
22
+
23
+ - name: Install dependencies
24
+ run: uv sync
25
+
26
+ # ── Wesker specification metrics — the tool profiling itself ──
27
+ #
28
+ # `python -m Wesker.metrics` runs in-process multi-pass mutation
29
+ # profiling over Wesker's own library core (engine, ci, filter),
30
+ # then MC/DC verification (GITHUB_ACTIONS auto-enables it), and emits
31
+ # MUTATION_KILL_PCT / MEAN_SIGMA / TEST_COUNT / MCDC_* to GITHUB_ENV.
32
+ #
33
+ # MC/DC methodology: ROR (Relational Operator Replacement) mutation.
34
+ # Offutt & Voas (1996) prove mutation testing subsumes MC/DC; Kaminski,
35
+ # Ammann & Offutt (2013) show ROR mutation is strictly stronger than
36
+ # MC/DC in fault-detection power. Targets are auto-discovered by AST
37
+ # scan — every function with relational operators, no hand-curation.
38
+ - name: Run Wesker specification metrics
39
+ run: uv run python -m Wesker.metrics
40
+ env:
41
+ WESKER_COLOR: "1"
42
+
43
+ - name: Create badges directory
44
+ run: mkdir -p .github/badges
45
+
46
+ # ── Badge generation ──────────────────────────────────────────
47
+
48
+ - name: Generate Mutation Kill Rate Badge
49
+ uses: emibcn/badge-action@v2.0.2
50
+ with:
51
+ label: "Mutation Kill Rate"
52
+ label-color: "333"
53
+ status: "${{ env.MUTATION_KILL_PCT }}%"
54
+ color: ${{ env.MUTATION_KILL_PCT == '100' && '2ea043' || 'e5534b' }}
55
+ path: ".github/badges/mutation-kill-rate.svg"
56
+
57
+ - name: "Generate Mean σ Badge"
58
+ uses: emibcn/badge-action@v2.0.2
59
+ with:
60
+ label: "Mean σ"
61
+ label-color: "333"
62
+ status: "${{ env.MEAN_SIGMA }}"
63
+ color: "8b5cf6"
64
+ path: ".github/badges/sigma.svg"
65
+
66
+ - name: Generate Test Count Badge
67
+ uses: emibcn/badge-action@v2.0.2
68
+ with:
69
+ label: "Tests"
70
+ label-color: "333"
71
+ status: "${{ env.TEST_COUNT }} (${{ env.TEST_RATIO }})"
72
+ color: "555"
73
+ path: ".github/badges/test-count.svg"
74
+
75
+ - name: Compute sampling ratio
76
+ run: |
77
+ python3 -c "
78
+ tested = ${{ env.MUTATION_TOTAL }}
79
+ universe = ${{ env.MUTATION_UNIVERSE }}
80
+ if universe and universe > 0:
81
+ pct = round(100 * tested / universe, 1)
82
+ print(f'SAMPLING_RATIO={tested}/{universe} ({pct}%)')
83
+ else:
84
+ print(f'SAMPLING_RATIO={tested}/{tested} (100%)')
85
+ " | while read line; do echo "$line" >> "$GITHUB_ENV"; done
86
+
87
+ - name: Generate Mutation Sampling Badge
88
+ uses: emibcn/badge-action@v2.0.2
89
+ with:
90
+ label: "Mutation Sampling"
91
+ label-color: "333"
92
+ status: "${{ env.SAMPLING_RATIO }}"
93
+ color: "555"
94
+ path: ".github/badges/mutation-sampling.svg"
95
+
96
+ - name: "Generate MC/DC Badge"
97
+ uses: emibcn/badge-action@v2.0.2
98
+ with:
99
+ label: "MC/DC"
100
+ label-color: "333"
101
+ status: "${{ env.MCDC_STATUS }} (${{ env.MCDC_COVERED }}/${{ env.MCDC_TOTAL }})"
102
+ color: ${{ env.MCDC_STATUS == 'Verified' && '0ea5e9' || 'e5534b' }}
103
+ path: ".github/badges/mcdc.svg"
104
+
105
+ # ── Push to badges branch ────────────────────────────────────
106
+
107
+ - name: Push badges to badges branch
108
+ if: github.ref == 'refs/heads/main'
109
+ run: |
110
+ cp .github/badges/*.svg /tmp/
111
+ rm -rf .github/badges
112
+
113
+ git config user.name "github-actions[bot]"
114
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
115
+
116
+ if git ls-remote --exit-code --heads origin badges >/dev/null 2>&1; then
117
+ git fetch origin badges:badges
118
+ git switch badges
119
+ else
120
+ git switch --orphan badges
121
+ git rm -rf . >/dev/null 2>&1 || true
122
+ fi
123
+
124
+ mkdir -p .github/badges
125
+ cp /tmp/*.svg .github/badges/
126
+ git add .github/badges/*.svg
127
+
128
+ if git diff --cached --quiet; then
129
+ echo "No badge changes"
130
+ exit 0
131
+ fi
132
+
133
+ git commit -m "Update spec badges (kill=${{ env.MUTATION_KILL_PCT }}%, σ̄=${{ env.MEAN_SIGMA }}, tests=${{ env.TEST_COUNT }}, ratio=${{ env.TEST_RATIO }})"
134
+ git push origin badges
@@ -0,0 +1,18 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .wesker/
7
+ .wesker-report.json
8
+ # Detective's analysis artifacts — Wesker is dogfooded with it (ARCHITECTURE §11),
9
+ # which drops reports/caches here. Regeneratable; never part of the package.
10
+ .detective/
11
+ .coverage
12
+ coverage.xml
13
+ .venv/
14
+
15
+ # Dev tooling caches (not part of the package)
16
+ .serena/
17
+ .claude/
18
+ .DS_Store
@@ -0,0 +1,2 @@
1
+ # LintGate tool state — auto-generated, do not commit.
2
+ *
@@ -0,0 +1 @@
1
+ {"_envelope":"v1","_meta":{"tool":"controlplane_apply_repairs","timestamp":1783745594.216842,"project":"/Users/rohanvinaik/tools/Wesker"},"_sections":{"meta":["run_id"],"findings":["repairs_executed","results"],"data":["pending_remaining"]},"run_id":"dd942832f273","summary":{"total_proposed":1,"collected":1,"succeeded":1,"failed":0,"skipped":0},"repairs_executed":1,"results":[{"action_id":"bd4f0431","command":"ruff check --fix .","status":"ok","returncode":0,"stderr":null}],"pending_remaining":0}
@@ -0,0 +1 @@
1
+ {"_envelope":"v1","_meta":{"tool":"controlplane_apply_repairs","timestamp":1783745062.9444742,"project":"/Users/rohanvinaik/tools/Wesker"},"_sections":{"meta":["run_id"],"findings":["repairs_executed","results"],"data":["pending_remaining"]},"run_id":"c5be24f8a742","summary":{"total_proposed":2,"collected":2,"succeeded":1,"failed":1,"skipped":0},"repairs_executed":2,"results":[{"action_id":"7e0a22ed","command":"Create .python-version with your target version (e.g., '3.11')","status":"error","error":"[Errno 2] No such file or directory: 'Create'"},{"action_id":"4ffb3bfb","command":"ruff check --fix .","status":"ok","returncode":0,"stderr":null}],"pending_remaining":0}
@@ -0,0 +1 @@
1
+ {"_envelope":"v1","_meta":{"tool":"controlplane_get_details","timestamp":1783745052.9902341,"project":"/Users/rohanvinaik/tools/Wesker"},"_sections":{"meta":["run_id"],"status":["coherence"],"metrics":["duration_ms","total_matching"],"findings":["findings","repairs"],"actions":["next_actions"],"data":["finding_summary","channel_details","evidence"]},"run_id":"c5be24f8a742","duration_ms":16769.2,"coherence":{"state":"systemic","summary":"Multiple system failures: deps, git, specification, tests, lint, coherence. This suggests a structural problem, not isolated issues.","recommended_action":"Review overall approach. Failing channels: deps: 1 finding (top: python_version_file); git: 1 finding (top: missing_quality_infra); specification: 26 findings (top: SPEC012); tests: 4 findings (top: missing_test); lint: 71 findings (top: PERF011); coherence: 73 findings (top: COH101). Note: coherence findings are pre-existing and unrelated to your edit.","silent_channels":["behavior","structure","test_hygiene","test_effectiveness","performance"],"loud_channels":["deps","git","specification","tests","lint","coherence"]},"total_matching":5,"findings":[{"linter":"radon","kind":"complexity","message":"function '_discover_by_convention' has cyclomatic complexity 34 (grade E, threshold=25)","file":"/Users/rohanvinaik/tools/Wesker/Wesker/ci.py","line":53,"severity":"blocking","confidence":1.0,"fixable":false,"evidence":{"complexity":34,"grade":"E","threshold":25,"scope":"committed"},"suggestions":["CC=34 is very high. Extract each independent branch in '_discover_by_convention' into its own helper function with a descriptive name.","If the function validates multiple conditions, extract a _validate_*() helper for each concern.","Each early-return guard clause removes one branch from CC count."],"estimated_effort_minutes":15.0,"issue_id":"798c039f6da7","channel":"lint","delegation_suitability":{"score":0.2,"category":"low","reason":"2 downstream dependents. blocking severity","requires_context":["import patterns from prior fixes"]}},{"linter":"structure","kind":"file-too-long","message":"File has 1787 lines (limit: 600). Consider splitting into focused modules.","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","severity":"blocking","confidence":1.0,"fixable":false,"evidence":{"lines":1787,"threshold":600,"cohesion":{"score":0.058,"components":[["BoundaryInput","CategoryResult","Mutant","MutantResult","MutationCategory","ProfilingResult","SamplingResult","_ArithmeticMutator","_BaseMutator","_BoundaryMutator","_LogicalMutator","_StateMutator","_SwapMutator","_TypeMutator","_ValueMutator","_callee_name","_count_arithmetic_target","_count_boundary_target","_count_logical_target","_count_state_assign_target","_count_state_return_target","_count_state_target","_count_targets","_count_value_target","_docstring_positions","_elapsed","_extract_compare_parts","_find_closure_cell","_generate_boundary_inputs","_generate_state_mutants","_get_closure_bindings","_get_raw_attr","_greedy_dimension_order","_is_dead","_is_self_assign","_isinstance_type_name","_make_transformer","_patch_mutant_into_test","_preserve_closure_binding_shape","_preserve_descriptor_shape","_record_dimensions","_record_state_dimensions","_resolve_qualified_owner","_run_test_with_timeout","_select_greedy","_stable_target_key","_stable_target_order","_unpatch_mutant","_unwrap_descriptor","check_equivalent","estimate_universe_size","evaluate_mutant","extract_boundary_inputs","generate_mutants","run_function_converged","run_function_profiling","run_function_sampling"],["_count_swap_target"],["_count_type_target"]],"component_count":3,"is_cli_mixed":false},"split_proposals":[{"kind":"split_file","target":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","action":"Extract component 1 (BoundaryInput, CategoryResult, Mutant, MutantResult, +53 more) into a separate module","source":"static","confidence":0.55,"basis":["cohesion_analysis","connected_components"],"inputs":["BoundaryInput","CategoryResult","Mutant","MutantResult","MutationCategory","ProfilingResult","SamplingResult","_ArithmeticMutator","_BaseMutator","_BoundaryMutator","_LogicalMutator","_StateMutator","_SwapMutator","_TypeMutator","_ValueMutator","_callee_name","_count_arithmetic_target","_count_boundary_target","_count_logical_target","_count_state_assign_target","_count_state_return_target","_count_state_target","_count_targets","_count_value_target","_docstring_positions","_elapsed","_extract_compare_parts","_find_closure_cell","_generate_boundary_inputs","_generate_state_mutants","_get_closure_bindings","_get_raw_attr","_greedy_dimension_order","_is_dead","_is_self_assign","_isinstance_type_name","_make_transformer","_patch_mutant_into_test","_preserve_closure_binding_shape","_preserve_descriptor_shape","_record_dimensions","_record_state_dimensions","_resolve_qualified_owner","_run_test_with_timeout","_select_greedy","_stable_target_key","_stable_target_order","_unpatch_mutant","_unwrap_descriptor","check_equivalent","estimate_universe_size","evaluate_mutant","extract_boundary_inputs","generate_mutants","run_function_converged","run_function_profiling","run_function_sampling"],"expected_delta":{"component_separation":3},"cochange_annotation":{"status":"no_data","reason":"No co-change data available for this file."}}],"scope":"committed"},"suggestions":["Extract component 1 (BoundaryInput, CategoryResult, Mutant, MutantResult, +53 more) into a separate module","Extract related functions into a separate module","Group by responsibility: data, logic, I/O"],"estimated_effort_minutes":15.0,"issue_id":"f6ea54150d23","channel":"lint","delegation_suitability":{"score":0.1,"category":"low","reason":"3 downstream dependents. blocking severity","requires_context":["import patterns from prior fixes"]}},{"linter":"radon","kind":"maintainability","message":"Maintainability index 0.0 (grade C, threshold=5)","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","severity":"blocking","confidence":1.0,"fixable":false,"evidence":{"mi_score":0.0,"grade":"C","scope":"committed"},"suggestions":["File is difficult to maintain. Consider breaking into smaller modules."],"estimated_effort_minutes":15.0,"issue_id":"565b66f383e8","channel":"lint","delegation_suitability":{"score":0.1,"category":"low","reason":"3 downstream dependents. blocking severity","requires_context":["import patterns from prior fixes"]}},{"linter":"structure","kind":"deep-nesting","message":"Function '_collect_signals' has nesting depth 9 (limit: 6). Deeply nested code is hard to understand and maintain.","file":"/Users/rohanvinaik/tools/Wesker/Wesker/filter.py","line":41,"severity":"blocking","confidence":1.0,"fixable":false,"evidence":{"depth":9,"threshold":6,"scope":"committed"},"suggestions":["Use early returns (guard clauses) to flatten nesting","Extract nested blocks into named helper functions","Consider whether the logic can be simplified"],"estimated_effort_minutes":15.0,"issue_id":"60c9fc78a087","channel":"lint","delegation_suitability":{"score":0.3,"category":"low","reason":"1 downstream dependents. blocking severity","requires_context":["import patterns from prior fixes"]}},{"linter":"ty","kind":"unresolved-import","message":"unresolved-import: Cannot resolve imported module `pytest`","file":"tests/test_engine.py","line":18,"severity":"blocking","confidence":1.0,"fixable":false,"evidence":{"check_name":"unresolved-import","ty_severity":"major","sys_path_dynamic_import":false,"scope":"committed"},"estimated_effort_minutes":10.0,"issue_id":"2fc765f0c8ba","channel":"lint","delegation_suitability":{"score":0.4,"category":"medium","reason":"blocking severity","requires_context":[]}}],"finding_summary":{"domains":{"code":{"total":5,"blocking":5,"warning":0,"informational":0},"environment":{"total":0,"blocking":0,"warning":0,"informational":0}},"channels":{"lint":5}},"channel_details":{"deps":{"status":"fail","severity":"warning","finding_count":1,"duration_ms":12.4,"error":null},"behavior":{"status":"pass","severity":"none","finding_count":0,"duration_ms":11.6,"error":null},"git":{"status":"fail","severity":"warning","finding_count":1,"duration_ms":145.6,"error":null},"structure":{"status":"pass","severity":"none","finding_count":0,"duration_ms":252.4,"error":null},"test_effectiveness":{"status":"fail","severity":"informational","finding_count":1,"duration_ms":275.8,"error":null},"performance":{"status":"fail","severity":"informational","finding_count":2,"duration_ms":1574.5,"error":null},"test_hygiene":{"status":"pass","severity":"none","finding_count":0,"duration_ms":46.9,"error":null},"specification":{"status":"fail","severity":"warning","finding_count":26,"duration_ms":1348.4,"error":null},"tests":{"status":"fail","severity":"informational","finding_count":4,"duration_ms":3752.5,"error":null},"lint":{"status":"fail","severity":"blocking","finding_count":71,"duration_ms":16619.5,"error":null},"coherence":{"status":"fail","severity":"warning","finding_count":73,"duration_ms":0,"error":null}},"repairs":[{"action_id":"7e0a22ed","kind":"command","summary":"Create .python-version with your target version (e.g., '3.11')","safe":true,"payload":{"command":"Create .python-version with your target version (e.g., '3.11')","cwd":"/Users/rohanvinaik/tools/Wesker"}},{"action_id":"e3d9be71","kind":"command","summary":"Deploy missing quality infrastructure","safe":true,"payload":{"tool":"setup_github_quality","args":{"path":"/Users/rohanvinaik/tools/Wesker","write":true}}},{"action_id":"76d64b35","kind":"create_test_skeleton","summary":"Create test skeleton for ci.py (error_handling)","safe":true,"payload":{"source_file":"/Users/rohanvinaik/tools/Wesker/Wesker/ci.py","archetypes":["error_handling","round_trip","mock_isolation","input_validation","regression"]}},{"action_id":"1665a1b0","kind":"create_test_skeleton","summary":"Create test skeleton for cli.py (round_trip)","safe":true,"payload":{"source_file":"/Users/rohanvinaik/tools/Wesker/Wesker/cli.py","archetypes":["round_trip","input_validation"]}},{"action_id":"8b526c7f","kind":"create_test_skeleton","summary":"Create test skeleton for filter.py (configuration)","safe":true,"payload":{"source_file":"/Users/rohanvinaik/tools/Wesker/Wesker/filter.py","archetypes":["configuration","input_validation","regression"]}},{"action_id":"a1751f13","kind":"create_test_skeleton","summary":"Create test skeleton for metrics.py (mock_isolation)","safe":true,"payload":{"source_file":"/Users/rohanvinaik/tools/Wesker/Wesker/metrics.py","archetypes":["mock_isolation","error_handling","configuration","round_trip","input_validation"]}},{"action_id":"4ffb3bfb","kind":"command","summary":"Auto-fix 7 safe lint issues","safe":true,"payload":{"command":"ruff check --fix ."}}],"evidence":{"deps":{"issue_count":1,"repair_count":1,"surface":"mcp"},"behavior":{"alert_count":0,"hard_alerts":0,"soft_alerts":0,"next_actions":[],"compass_summary":{"hypotheses_active":0,"approaches_total":0,"prediction_recall":0.0},"behavior_compass_delta":{"last_fired":{},"signal_fire_counts":{},"early_nudge_emitted":false,"pending_nudge_signals":[],"pending_nudge_constraint_check_count":0,"nudge_outcomes":{},"_theory_recent_codas":{}},"intent_summary":{"window":0,"intent_counts":{}},"global_profile_delta":{"signal_fire_counts":{},"intent_summary":{},"nudge_outcomes":{}},"suppressed_nudges":0},"git":{"checks_run":6,"issue_count":1,"secrets_found":0,"quality_infra_findings":1},"structure":{"file_count":8,"total_loc":2412,"median_module_loc":134,"largest_modules":[{"file":"Wesker/engine.py","loc":1243},{"file":"Wesker/ci.py","loc":428},{"file":"Wesker/metrics.py","loc":346}],"package_count":3,"packages":{"<top-level>":1,"Wesker":6,"tests":1},"import_cycle_count":0,"orphan_count":0,"low_cohesion_packages":0,"checks_run":4,"zero_fan_in_count":3,"high_fan_in_modules":[{"module":"Wesker.engine","fan_in":3},{"module":"Wesker.ci","fan_in":2}],"_import_graph":{"Wesker.__main__":["Wesker.cli"],"Wesker.ci":["Wesker.engine","Wesker.filter"],"Wesker.cli":["Wesker.ci","Wesker.metrics"],"Wesker.filter":["Wesker.engine"],"Wesker.metrics":["Wesker.ci"],"tests.test_engine":["Wesker.engine"]},"_file_map":{"Wesker":"/Users/rohanvinaik/tools/Wesker/Wesker/__init__.py","Wesker.__main__":"/Users/rohanvinaik/tools/Wesker/Wesker/__main__.py","Wesker.ci":"/Users/rohanvinaik/tools/Wesker/Wesker/ci.py","Wesker.cli":"/Users/rohanvinaik/tools/Wesker/Wesker/cli.py","Wesker.engine":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","Wesker.filter":"/Users/rohanvinaik/tools/Wesker/Wesker/filter.py","Wesker.metrics":"/Users/rohanvinaik/tools/Wesker/Wesker/metrics.py","tests.test_engine":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py"},"_module_fan_in":{"Wesker":0,"Wesker.__main__":0,"Wesker.ci":2,"Wesker.cli":1,"Wesker.engine":3,"Wesker.filter":1,"Wesker.metrics":1,"tests.test_engine":0},"_file_cohesion":{"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py":{"score":0.058,"component_count":3,"split_proposals":[{"kind":"split_file","target":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","action":"Extract component 1 (BoundaryInput, CategoryResult, Mutant, MutantResult, +53 more) into a separate module","confidence":0.55}]}},"file_convergence":{"total_files":7,"actionable_split":0,"actionable_investigate":7,"top_files":[{"target":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","support_prob":1.0,"oppose_prob":0.0,"net_confidence":1.0,"supporting_lenses":["cohesion"],"opposing_lenses":[],"actionability":"investigate","evidence_count":1,"target_type":"file","split_proposals":[{"kind":"split_file","target":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","action":"Extract component 1 (BoundaryInput, CategoryResult, Mutant, MutantResult, +53 more) into a separate module","confidence":0.55}]},{"target":"Wesker","support_prob":0.6,"oppose_prob":0.0,"net_confidence":0.6,"supporting_lenses":["fan_in"],"opposing_lenses":[],"actionability":"investigate","evidence_count":1,"target_type":"file"},{"target":"Wesker.__main__","support_prob":0.6,"oppose_prob":0.0,"net_confidence":0.6,"supporting_lenses":["fan_in"],"opposing_lenses":[],"actionability":"investigate","evidence_count":1,"target_type":"file"},{"target":"Wesker.cli","support_prob":0.6,"oppose_prob":0.0,"net_confidence":0.6,"supporting_lenses":["fan_in"],"opposing_lenses":[],"actionability":"investigate","evidence_count":1,"target_type":"file"},{"target":"Wesker.filter","support_prob":0.6,"oppose_prob":0.0,"net_confidence":0.6,"supporting_lenses":["fan_in"],"opposing_lenses":[],"actionability":"investigate","evidence_count":1,"target_type":"file"}]}},"test_effectiveness":{"project_effectiveness_score":0.029,"semantic_ratio":1.0,"functions_analyzed":59,"mutation_vulnerable_count":57},"performance":{"pure_functions":65,"impure_functions":57,"purity_ratio":0.533,"purity_tiers":{"pure":65,"stable_read":37,"stateful":20},"properties_detected":{"pure":65,"bounded":2,"monotonic":1,"idempotent":0,"commutative":0,"associative":0},"optimization_opportunities":65,"pure_function_list":[{"name":"Wesker/ci.py::_pct_color","file":"/Users/rohanvinaik/tools/Wesker/Wesker/ci.py","hints":["cacheable"]},{"name":"Wesker/ci.py::walk_functions","file":"/Users/rohanvinaik/tools/Wesker/Wesker/ci.py","hints":["cacheable"]},{"name":"Wesker/ci.py::_code_hash","file":"/Users/rohanvinaik/tools/Wesker/Wesker/ci.py","hints":["cacheable"]},{"name":"Wesker/cli.py::_parse_mcdc_targets","file":"/Users/rohanvinaik/tools/Wesker/Wesker/cli.py","hints":["cacheable"]},{"name":"Wesker/engine.py::CategoryResult.survival_rate","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::SamplingResult.to_dict","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::ProfilingResult.to_dict","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_BaseMutator.__init__","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_ValueMutator.__init__","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_StateMutator.__init__","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_docstring_positions","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_value_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_boundary_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_swap_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_is_self_assign","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["overflow-safe","cacheable"]},{"name":"Wesker/engine.py::_count_state_assign_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_state_return_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_state_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_type_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_arithmetic_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_count_logical_target","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_is_dead","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["overflow-safe","cacheable"]},{"name":"Wesker/engine.py::_callee_name","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_isinstance_type_name","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_greedy_dimension_order","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_select_greedy","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_stable_target_order","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_stable_target_key","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_extract_compare_parts","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_resolve_qualified_owner","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_get_closure_bindings","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_find_closure_cell","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_get_raw_attr","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_unwrap_descriptor","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_preserve_descriptor_shape","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_unpatch_mutant","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/engine.py::_generate_boundary_inputs","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","hints":["cacheable"]},{"name":"Wesker/metrics.py::_mutate_line","file":"/Users/rohanvinaik/tools/Wesker/Wesker/metrics.py","hints":["cacheable"]},{"name":"Wesker/metrics.py::_check_equivalent","file":"/Users/rohanvinaik/tools/Wesker/Wesker/metrics.py","hints":["cacheable"]},{"name":"tests/test_engine.py::_fn","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::_selected_indices","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_is_dead_only_true_for_sentinel","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_record_dimensions_aligns_with_universe_count","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_record_dimensions_keys_carry_construct_kind","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_record_dimensions_marks_non_swappable_ops_dead","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_record_dimensions_value_keys_by_python_type","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_record_dimensions_unknown_category_is_empty","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_greedy_order_covers_distinct_dimensions_first","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_greedy_order_round_robins_by_depth","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_greedy_order_sinks_dead_keys_to_end","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_greedy_order_is_deterministic","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_greedy_order_empty","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_greedy_coverage_is_optimal_for_singleton_covers","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_select_greedy_windows_are_disjoint_and_cover","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_select_greedy_first_window_maximizes_coverage","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_select_greedy_exhausted_pass_falls_back_to_top_window","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_select_greedy_covers_all_indices_when_keys_short","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_generate_mutants_greedy_spans_dimensions_under_budget","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_generate_mutants_passes_are_disjoint","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_generate_mutants_greedy_false_uses_ast_order","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_generate_mutants_exhaustive_ignores_selection","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_state_greedy_spreads_across_attributes","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_converged_union_grows_with_passes","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_callee_name_variants","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]},{"name":"tests/test_engine.py::test_isinstance_type_name_variants","file":"/Users/rohanvinaik/tools/Wesker/tests/test_engine.py","hints":["cacheable"]}]},"test_hygiene":{"test_files_scanned":1,"stub_tests":0,"weak_only_tests":0,"duplicate_tests":0,"subsumed_files":0,"total_findings":0,"safe_delete_proposals":0},"specification":{"specification_coverage":0.0,"regime_distribution":{"A":83,"B":39,"unknown":0},"pure_underspecified_count":65,"total_estimated_sigma":1578,"risk_distribution":{"P0":7,"P1":36,"P2":79},"mean_testability":0.775,"stop_criteria_met_count":0,"sheaf_obstruction":267.0,"specification_function_list":{"Wesker/ci.py::_pct_color":{"spec_level":0.0,"regime":"A","sigma":6,"phase":"bulk","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::_discover_by_convention":{"spec_level":0.0,"regime":"B","sigma":38,"phase":"bulk","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::_build_static_impact_map":{"spec_level":0.0,"regime":"B","sigma":23,"phase":"bulk","is_pure":false,"risk_score":0.5,"priority_band":"P1","testability_score":0.4,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::_discover_all_test_files":{"spec_level":0.0,"regime":"A","sigma":20,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::discover_tests":{"spec_level":0.0,"regime":"B","sigma":20,"phase":"bulk","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.9,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::load_test_callables":{"spec_level":0.0,"regime":"B","sigma":32,"phase":"bulk","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::walk_functions":{"spec_level":0.0,"regime":"A","sigma":6,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::_load_cached_state":{"spec_level":0.0,"regime":"A","sigma":16,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::profile_file":{"spec_level":0.0,"regime":"B","sigma":32,"phase":"bulk","is_pure":false,"risk_score":0.8,"priority_band":"P0","testability_score":0.5,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::profile_function":{"spec_level":0.0,"regime":"B","sigma":36,"phase":"bulk","is_pure":false,"risk_score":0.8,"priority_band":"P0","testability_score":0.5,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::_code_hash":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::_load_function_cache":{"spec_level":0.0,"regime":"A","sigma":16,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::_save_function_cache":{"spec_level":0.0,"regime":"A","sigma":10,"phase":"bulk","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.4,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::profile_function_cached":{"spec_level":0.0,"regime":"B","sigma":39,"phase":"bulk","is_pure":false,"risk_score":0.8,"priority_band":"P0","testability_score":0.4,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/ci.py::profile_codebase":{"spec_level":0.0,"regime":"B","sigma":38,"phase":"bulk","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/cli.py::_discover_python_files":{"spec_level":0.0,"regime":"B","sigma":21,"phase":"bulk","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/cli.py::_parse_mcdc_targets":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"bulk","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/cli.py::main":{"spec_level":0.0,"regime":"B","sigma":34,"phase":"bulk","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::CategoryResult.survival_rate":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::SamplingResult.to_dict":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::ProfilingResult.to_dict":{"spec_level":0.0,"regime":"A","sigma":6,"phase":"tail","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_BaseMutator.__init__":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.6,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_BaseMutator._note":{"spec_level":0.0,"regime":"A","sigma":10,"phase":"tail","is_pure":false,"risk_score":0.5,"priority_band":"P1","testability_score":0.9,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_ValueMutator.__init__":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_ValueMutator.visit_Constant":{"spec_level":0.0,"regime":"B","sigma":26,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_ValueMutator._mutate_constant":{"spec_level":0.0,"regime":"A","sigma":18,"phase":"tail","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.9,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_BoundaryMutator.visit_Compare":{"spec_level":0.0,"regime":"B","sigma":22,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_SwapMutator.visit_Call":{"spec_level":0.0,"regime":"B","sigma":18,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_StateMutator.__init__":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.6,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_StateMutator.visit_Assign":{"spec_level":0.0,"regime":"B","sigma":22,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_StateMutator.visit_Return":{"spec_level":0.0,"regime":"B","sigma":19,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_TypeMutator.visit_Call":{"spec_level":0.0,"regime":"B","sigma":19,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_ArithmeticMutator.visit_BinOp":{"spec_level":0.0,"regime":"B","sigma":17,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_ArithmeticMutator.visit_UnaryOp":{"spec_level":0.0,"regime":"B","sigma":16,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_LogicalMutator.visit_BoolOp":{"spec_level":0.0,"regime":"B","sigma":17,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_LogicalMutator.visit_UnaryOp":{"spec_level":0.0,"regime":"B","sigma":16,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_docstring_positions":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_targets":{"spec_level":0.0,"regime":"A","sigma":16,"phase":"tail","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_count_value_target":{"spec_level":0.0,"regime":"A","sigma":5,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_boundary_target":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_swap_target":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_is_self_assign":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["overflow-safe","cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_state_assign_target":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_state_return_target":{"spec_level":0.0,"regime":"A","sigma":3,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_state_target":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_type_target":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_arithmetic_target":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_count_logical_target":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_generate_state_mutants":{"spec_level":0.0,"regime":"B","sigma":24,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_is_dead":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["overflow-safe","cacheable"],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_callee_name":{"spec_level":0.0,"regime":"A","sigma":5,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_isinstance_type_name":{"spec_level":0.0,"regime":"A","sigma":8,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_record_dimensions":{"spec_level":0.0,"regime":"A","sigma":16,"phase":"tail","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_record_state_dimensions":{"spec_level":0.0,"regime":"A","sigma":12,"phase":"tail","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.9,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_greedy_dimension_order":{"spec_level":0.0,"regime":"A","sigma":11,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_select_greedy":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::generate_mutants":{"spec_level":0.0,"regime":"B","sigma":38,"phase":"tail","is_pure":false,"risk_score":0.7,"priority_band":"P0","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":1},"Wesker/engine.py::_stable_target_order":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_stable_target_key":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_make_transformer":{"spec_level":0.0,"regime":"B","sigma":27,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::extract_boundary_inputs":{"spec_level":0.0,"regime":"B","sigma":26,"phase":"tail","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_extract_compare_parts":{"spec_level":0.0,"regime":"A","sigma":8,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_patch_mutant_into_test":{"spec_level":0.0,"regime":"B","sigma":30,"phase":"tail","is_pure":false,"risk_score":0.5,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_resolve_qualified_owner":{"spec_level":0.0,"regime":"A","sigma":28,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_get_closure_bindings":{"spec_level":0.0,"regime":"A","sigma":6,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_find_closure_cell":{"spec_level":0.0,"regime":"A","sigma":6,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_get_raw_attr":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_unwrap_descriptor":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_preserve_descriptor_shape":{"spec_level":0.0,"regime":"A","sigma":10,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_preserve_closure_binding_shape":{"spec_level":0.0,"regime":"A","sigma":10,"phase":"tail","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_unpatch_mutant":{"spec_level":0.0,"regime":"A","sigma":8,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::evaluate_mutant":{"spec_level":0.0,"regime":"B","sigma":32,"phase":"tail","is_pure":false,"risk_score":0.7,"priority_band":"P0","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_run_test_with_timeout":{"spec_level":0.0,"regime":"B","sigma":28,"phase":"tail","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_elapsed":{"spec_level":0.0,"regime":"A","sigma":8,"phase":"tail","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.9,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::run_function_sampling":{"spec_level":0.0,"regime":"B","sigma":34,"phase":"tail","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::run_function_profiling":{"spec_level":0.0,"regime":"B","sigma":36,"phase":"tail","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::estimate_universe_size":{"spec_level":0.0,"regime":"A","sigma":10,"phase":"tail","is_pure":false,"risk_score":0.5,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::_generate_boundary_inputs":{"spec_level":0.0,"regime":"A","sigma":11,"phase":"tail","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.6,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::check_equivalent":{"spec_level":0.0,"regime":"B","sigma":36,"phase":"tail","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/engine.py::run_function_converged":{"spec_level":0.0,"regime":"B","sigma":52,"phase":"tail","is_pure":false,"risk_score":0.7,"priority_band":"P0","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":1},"Wesker/filter.py::_collect_signals":{"spec_level":0.0,"regime":"B","sigma":28,"phase":"bulk","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.9,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/filter.py::filter_categories":{"spec_level":0.0,"regime":"B","sigma":22,"phase":"bulk","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/filter.py::prioritize_categories":{"spec_level":0.0,"regime":"B","sigma":26,"phase":"bulk","is_pure":false,"risk_score":0.6,"priority_band":"P1","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_load_config":{"spec_level":0.0,"regime":"B","sigma":34,"phase":"bulk","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_discover_targets":{"spec_level":0.0,"regime":"B","sigma":21,"phase":"bulk","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_count_functions":{"spec_level":0.0,"regime":"A","sigma":16,"phase":"bulk","is_pure":false,"risk_score":0.4,"priority_band":"P1","testability_score":0.4,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_compute_sigma":{"spec_level":0.0,"regime":"A","sigma":16,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_count_tests":{"spec_level":0.0,"regime":"A","sigma":10,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_count_source_loc":{"spec_level":0.0,"regime":"A","sigma":15,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.8,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_mutate_line":{"spec_level":0.0,"regime":"A","sigma":8,"phase":"bulk","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_check_equivalent":{"spec_level":0.0,"regime":"A","sigma":4,"phase":"bulk","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.7,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_verify_mcdc_single":{"spec_level":0.0,"regime":"B","sigma":42,"phase":"bulk","is_pure":false,"risk_score":0.5,"priority_band":"P1","testability_score":0.4,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_discover_mcdc_targets":{"spec_level":0.0,"regime":"B","sigma":23,"phase":"bulk","is_pure":false,"risk_score":0.5,"priority_band":"P1","testability_score":0.4,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_verify_mcdc":{"spec_level":0.0,"regime":"A","sigma":19,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.7,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::_write_metrics":{"spec_level":0.0,"regime":"A","sigma":15,"phase":"bulk","is_pure":false,"risk_score":0.3,"priority_band":"P2","testability_score":0.6,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"Wesker/metrics.py::main":{"spec_level":0.0,"regime":"B","sigma":20,"phase":"bulk","is_pure":false,"risk_score":0.8,"priority_band":"P0","testability_score":0.5,"optimization_hints":[],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::_fn":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":1},"tests/test_engine.py::_selected_indices":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.0,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":1},"tests/test_engine.py::test_is_dead_only_true_for_sentinel":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_record_dimensions_aligns_with_universe_count":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_record_dimensions_keys_carry_construct_kind":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_record_dimensions_marks_non_swappable_ops_dead":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_record_dimensions_value_keys_by_python_type":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_record_dimensions_unknown_category_is_empty":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_greedy_order_covers_distinct_dimensions_first":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_greedy_order_round_robins_by_depth":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_greedy_order_sinks_dead_keys_to_end":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_greedy_order_is_deterministic":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_greedy_order_empty":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_greedy_coverage_is_optimal_for_singleton_covers":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.9,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_select_greedy_windows_are_disjoint_and_cover":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_select_greedy_first_window_maximizes_coverage":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_select_greedy_exhausted_pass_falls_back_to_top_window":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_select_greedy_covers_all_indices_when_keys_short":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_generate_mutants_greedy_spans_dimensions_under_budget":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_generate_mutants_passes_are_disjoint":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_generate_mutants_greedy_false_uses_ast_order":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_generate_mutants_exhaustive_ignores_selection":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_state_greedy_spreads_across_attributes":{"spec_level":0.0,"regime":"A","sigma":2,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_converged_union_grows_with_passes":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":0.8,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_callee_name_variants":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0},"tests/test_engine.py::test_isinstance_type_name_variants":{"spec_level":0.0,"regime":"A","sigma":1,"phase":"bulk","is_pure":true,"risk_score":0.2,"priority_band":"P2","testability_score":1.0,"optimization_hints":["cacheable"],"stop_criteria_met":false,"coupling_surface":0}},"composition_gaps":{"Wesker/ci.py::profile_file::Wesker/filter.py::prioritize_categories":{"gamma":4.0,"integration_surface":4.0,"spec_independent":false},"Wesker/ci.py::profile_file::Wesker/engine.py::run_function_converged":{"gamma":100.0,"integration_surface":100.0,"spec_independent":false},"Wesker/ci.py::profile_file::Wesker/filter.py::filter_categories":{"gamma":4.0,"integration_surface":4.0,"spec_independent":false},"Wesker/ci.py::profile_function::Wesker/filter.py::prioritize_categories":{"gamma":4.0,"integration_surface":4.0,"spec_independent":false},"Wesker/ci.py::profile_function::Wesker/engine.py::run_function_converged":{"gamma":100.0,"integration_surface":100.0,"spec_independent":false},"Wesker/ci.py::profile_function::Wesker/filter.py::filter_categories":{"gamma":4.0,"integration_surface":4.0,"spec_independent":false},"Wesker/cli.py::main::Wesker/metrics.py::_verify_mcdc":{"gamma":1.0,"integration_surface":1.0,"spec_independent":false},"Wesker/cli.py::main::Wesker/ci.py::profile_codebase":{"gamma":25.0,"integration_surface":25.0,"spec_independent":false},"Wesker/metrics.py::main::Wesker/ci.py::profile_codebase":{"gamma":25.0,"integration_surface":25.0,"spec_independent":false}}},"tests":{"impacted_tests_found":1,"missing_test_count":4,"test_failure_count":0},"lint":{"total_issues":71,"blocking_count":5,"warning_count":30,"info_count":36,"tuned_count":0,"fixable_count":7,"linters_run":12,"linters_skipped":0,"linters_errored":1,"recurrence":{"repeated_issue_count":38,"unique_signatures_tracked":750,"top_repeated":[{"count":21,"last_seen":1783745024.425185,"linter":"structure","kind":"file-too-long","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","line":null,"message":"File has 1787 lines (limit: 600). Consider splitting into focused modules."},{"count":21,"last_seen":1783745024.425185,"linter":"radon","kind":"maintainability","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","line":null,"message":"Maintainability index 0.0 (grade C, threshold=5)"},{"count":21,"last_seen":1783745024.425185,"linter":"structure","kind":"too-many-classes","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","line":null,"message":"File has 15 classes (limit: 6). This suggests mixed responsibilities."},{"count":21,"last_seen":1783745024.425185,"linter":"structure","kind":"too-many-attributes","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","line":130,"message":"Class 'ProfilingResult' has 16 attributes (limit: 15). This suggests the class has too many responsibilities."},{"count":21,"last_seen":1783745024.425185,"linter":"structure","kind":"too-many-functions","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","line":null,"message":"File has 44 top-level functions (limit: 20). Consider grouping into classes or modules."},{"count":21,"last_seen":1783745024.425185,"linter":"ruff_format","kind":"format","file":"Wesker/engine.py","line":null,"message":"File needs formatting"},{"count":6,"last_seen":1783745024.425185,"linter":"mypy","kind":"arg-type","file":"Wesker/ci.py","line":337,"message":"Argument 1 to \"filter_categories\" has incompatible type \"FunctionDef | AsyncFunctionDef\"; expected \"FunctionDef\""},{"count":6,"last_seen":1783745024.425185,"linter":"performance_checker","kind":"PERF011","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","line":636,"message":"Uncached pure call in loop. 'getattr' is called with loop-invariant arguments. Hoist this call before the loop or use @lru_cache to prevent redundant computation."},{"count":6,"last_seen":1783745024.425185,"linter":"performance_checker","kind":"PERF011","file":"/Users/rohanvinaik/tools/Wesker/Wesker/engine.py","line":952,"message":"Uncached pure call in loop. 'type' is called with loop-invariant arguments. Hoist this call before the loop or use @lru_cache to prevent redundant computation."},{"count":5,"last_seen":1783745024.425185,"linter":"ruff_format","kind":"format","file":"Wesker/ci.py","line":null,"message":"File needs formatting"}]},"pattern_alerts":[{"linter":"performance_checker","kind":"PERF011","count_this_run":20,"files_this_run":4,"recent_run_count":3,"total_count":178,"alert_reason":"recurring_across_runs"},{"linter":"ruff_format","kind":"format","count_this_run":7,"files_this_run":7,"recent_run_count":5,"total_count":37,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"cognitive-complexity","count_this_run":6,"files_this_run":4,"recent_run_count":3,"total_count":115,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"too-many-locals","count_this_run":3,"files_this_run":3,"recent_run_count":3,"total_count":57,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"file-too-long","count_this_run":2,"files_this_run":2,"recent_run_count":3,"total_count":25,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"too-many-args","count_this_run":2,"files_this_run":1,"recent_run_count":3,"total_count":69,"alert_reason":"recurring_across_runs"},{"linter":"mypy","kind":"assignment","count_this_run":2,"files_this_run":1,"recent_run_count":3,"total_count":44,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"too-many-functions","count_this_run":2,"files_this_run":2,"recent_run_count":4,"total_count":23,"alert_reason":"recurring_across_runs"},{"linter":"radon","kind":"maintainability","count_this_run":1,"files_this_run":1,"recent_run_count":3,"total_count":21,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"too-many-classes","count_this_run":1,"files_this_run":1,"recent_run_count":3,"total_count":21,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"too-many-attributes","count_this_run":1,"files_this_run":1,"recent_run_count":3,"total_count":40,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"too-many-statements","count_this_run":1,"files_this_run":1,"recent_run_count":3,"total_count":40,"alert_reason":"recurring_across_runs"},{"linter":"structure","kind":"too-many-returns","count_this_run":1,"files_this_run":1,"recent_run_count":3,"total_count":59,"alert_reason":"recurring_across_runs"},{"linter":"ty","kind":"unused-type-ignore-comment","count_this_run":1,"files_this_run":1,"recent_run_count":3,"total_count":21,"alert_reason":"recurring_across_runs"},{"linter":"ty","kind":"unresolved-attribute","count_this_run":6,"files_this_run":1,"recent_run_count":2,"total_count":12,"alert_reason":"single_run_volume"},{"linter":"mypy","kind":"arg-type","count_this_run":3,"files_this_run":2,"recent_run_count":2,"total_count":30,"alert_reason":"single_run_volume"}],"tier_used":"tier_2_structural","tier_reason":"Structural change (function/class modified)","tier_strictness":"relaxed","linter_statuses":{"ruff_format":"ok","ruff_check":"ok","ty":"ok","secret_checker":"ok","bandit_fast":"ok","structure_checker":"ok","complexity_checker":"ok","context_rule_checker":"ok","redefinition_checker":"ok","version_checker":"ok","performance_checker":"ok","mypy":"ok","pip_audit":"timeout"},"files_linted":["Wesker/__main__.py","Wesker/ci.py","Wesker/cli.py","Wesker/engine.py","Wesker/filter.py","Wesker/metrics.py","tests/test_engine.py"],"lint_timeout_ms":8448},"coherence":{"cross_channel_findings":73,"convergence":{"total_targets":134,"actionable_extract":0,"actionable_split":112,"top_targets":[{"target":"Wesker/ci.py::_discover_by_convention","support_prob":1.0,"oppose_prob":0.0,"net_confidence":1.0,"supporting_lenses":["contract_coverage","specification"],"opposing_lenses":[],"actionability":"split","evidence_count":2,"target_type":"function"},{"target":"Wesker/ci.py::_build_static_impact_map","support_prob":1.0,"oppose_prob":0.0,"net_confidence":1.0,"supporting_lenses":["contract_coverage","specification"],"opposing_lenses":[],"actionability":"split","evidence_count":2,"target_type":"function"},{"target":"Wesker/ci.py::discover_tests","support_prob":1.0,"oppose_prob":0.0,"net_confidence":1.0,"supporting_lenses":["contract_coverage","specification"],"opposing_lenses":[],"actionability":"split","evidence_count":2,"target_type":"function"},{"target":"Wesker/ci.py::load_test_callables","support_prob":1.0,"oppose_prob":0.0,"net_confidence":1.0,"supporting_lenses":["contract_coverage","specification"],"opposing_lenses":[],"actionability":"split","evidence_count":2,"target_type":"function"},{"target":"Wesker/ci.py::profile_file","support_prob":1.0,"oppose_prob":0.0,"net_confidence":1.0,"supporting_lenses":["contract_coverage","specification"],"opposing_lenses":[],"actionability":"split","evidence_count":2,"target_type":"function"}]}}},"next_actions":[{"tool":"controlplane_apply_repairs","args":{"path":".","run_id":"c5be24f8a742","safe_only":true},"reason":"Apply 7 safe auto-repairs found in these details.","priority":1},{"tool":"Bash / your file edit tools","reason":"Address the findings listed above by editing the corresponding files.","priority":2}]}