fensu-cli 0.3.0__tar.gz → 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 (472) hide show
  1. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/Cargo.lock +270 -6
  2. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/Cargo.toml +2 -0
  3. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/PKG-INFO +1 -1
  4. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/Cargo.toml +3 -1
  5. fensu_cli-0.4.0/crates/fensu-cli/assets/catalogue.json +1 -0
  6. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/run_cli.rs +28 -13
  7. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/helpers/parsing.rs +19 -1
  8. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/helpers/validation.rs +74 -1
  9. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/constants.rs +2 -0
  10. fensu_cli-0.4.0/crates/fensu-cli/src/helpers/check_cleanup.rs +240 -0
  11. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/check_evaluation.rs +3 -2
  12. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/check_execution.rs +2 -0
  13. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/check_policy.rs +77 -13
  14. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/init.rs +1 -1
  15. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/mod.rs +1 -0
  16. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/rule.rs +22 -0
  17. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/models.rs +8 -0
  18. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/content/fingerprint.rs +3 -0
  19. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/content/rendering.rs +2 -2
  20. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/content/sections.rs +19 -0
  21. fensu_cli-0.4.0/crates/fensu-cli/tests/command/check_cleanup.rs +310 -0
  22. fensu_cli-0.4.0/crates/fensu-cli/tests/command/check_policy.rs +219 -0
  23. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/command/helpers.rs +23 -0
  24. fensu_cli-0.4.0/crates/fensu-cli/tests/command/test_types.rs +58 -0
  25. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/command.rs +4 -0
  26. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/skills/commands.inc +52 -12
  27. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/Cargo.toml +4 -0
  28. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/mod.rs +3 -0
  29. fensu_cli-0.4.0/crates/fensu-native/src/cache/tests/helpers.rs +54 -0
  30. fensu_cli-0.4.0/crates/fensu-native/src/cache/tests/records.rs +151 -0
  31. fensu_cli-0.4.0/crates/fensu-native/src/cache/tests/storage.rs +257 -0
  32. fensu_cli-0.4.0/crates/fensu-native/src/cache/tests/test_types.rs +58 -0
  33. fensu_cli-0.4.0/crates/fensu-native/src/cache/tests.rs +8 -0
  34. fensu_cli-0.4.0/crates/fensu-native/tests/rules/contracts.rs +21 -0
  35. fensu_cli-0.4.0/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +531 -0
  36. fensu_cli-0.4.0/crates/fensu-native/tests/rules/helpers.rs +137 -0
  37. fensu_cli-0.4.0/crates/fensu-native/tests/rules/test_types.rs +79 -0
  38. fensu_cli-0.4.0/crates/fensu-native/tests/rules.rs +6 -0
  39. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/pyproject.toml +1 -1
  40. fensu_cli-0.3.0/crates/fensu-cli/assets/catalogue.json +0 -1
  41. fensu_cli-0.3.0/crates/fensu-cli/tests/command/test_types.rs +0 -12
  42. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/README.md +0 -0
  43. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/assets/python.gitignore +0 -0
  44. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/assets/skills_invariant.json +0 -0
  45. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/build.rs +0 -0
  46. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/constants.rs +0 -0
  47. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/map_parsing.rs +0 -0
  48. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/memory_execution.rs +0 -0
  49. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/memory_graph_rendering.rs +0 -0
  50. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/memory_help.rs +0 -0
  51. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/memory_human_rendering.rs +0 -0
  52. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/memory_parsing.rs +0 -0
  53. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/memory_structured_rendering.rs +0 -0
  54. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/memory_values.rs +0 -0
  55. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/helpers/mod.rs +0 -0
  56. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/check.rs +0 -0
  57. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/help.rs +0 -0
  58. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/init.rs +0 -0
  59. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/map.rs +0 -0
  60. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/memory.rs +0 -0
  61. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
  62. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/rule.rs +0 -0
  63. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/main/skills.rs +0 -0
  64. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/mod.rs +0 -0
  65. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/command/models.rs +0 -0
  66. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/helpers/discovery.rs +0 -0
  67. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/helpers/exceptions.rs +0 -0
  68. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/helpers/loading.rs +0 -0
  69. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/helpers/mod.rs +0 -0
  70. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
  71. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
  72. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
  73. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
  74. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
  75. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/cache.rs +0 -0
  76. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/check_project.rs +0 -0
  77. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/process.rs +0 -0
  78. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/helpers/render.rs +0 -0
  79. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/lib.rs +0 -0
  80. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/main.rs +0 -0
  81. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/constants.rs +0 -0
  82. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/cache.rs +0 -0
  83. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/decoding.rs +0 -0
  84. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/execution.rs +0 -0
  85. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/identity.rs +0 -0
  86. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/index.rs +0 -0
  87. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/mod.rs +0 -0
  88. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/project.rs +0 -0
  89. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/render.rs +0 -0
  90. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/tree.rs +0 -0
  91. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/helpers/tree_policy.inc +0 -0
  92. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
  93. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
  94. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
  95. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/mapping/models.rs +0 -0
  96. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/command/execution.rs +0 -0
  97. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/command/mod.rs +0 -0
  98. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/content/discovery.rs +0 -0
  99. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/content/mod.rs +0 -0
  100. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/context/build.rs +0 -0
  101. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/context/exceptions.rs +0 -0
  102. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/context/identity.rs +0 -0
  103. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/context/mod.rs +0 -0
  104. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/context/options.rs +0 -0
  105. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/context/selection.rs +0 -0
  106. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/installation/filesystem.rs +0 -0
  107. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/installation/freshness.rs +0 -0
  108. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/installation/install.rs +0 -0
  109. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/installation/mod.rs +0 -0
  110. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/installation/plan.rs +0 -0
  111. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/installation/publication.rs +0 -0
  112. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/installation/transaction.rs +0 -0
  113. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/helpers/mod.rs +0 -0
  114. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
  115. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
  116. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
  117. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
  118. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
  119. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
  120. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/src/skills/models.rs +0 -0
  121. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/command/commands.rs +0 -0
  122. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
  123. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/mapping/commands.rs +0 -0
  124. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
  125. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/mapping.rs +0 -0
  126. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/skills/commands.rs +0 -0
  127. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
  128. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
  129. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-cli/tests/skills.rs +0 -0
  130. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/Cargo.toml +0 -0
  131. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/constants.rs +0 -0
  132. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/annotations.rs +0 -0
  133. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/contracts.rs +0 -0
  134. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/declarations.rs +0 -0
  135. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/functions.rs +0 -0
  136. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/harness.rs +0 -0
  137. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/hygiene.rs +0 -0
  138. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/mapping.rs +0 -0
  139. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/mod.rs +0 -0
  140. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/references.rs +0 -0
  141. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/rule_authoring.rs +0 -0
  142. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/conversion/state.rs +0 -0
  143. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/gateway/bindings.rs +0 -0
  144. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/gateway/mod.rs +0 -0
  145. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/gateway/model_types.rs +0 -0
  146. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/gateway/repository_bindings.rs +0 -0
  147. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/gateway/rule_authoring_bindings.rs +0 -0
  148. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/helpers/mod.rs +0 -0
  149. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
  150. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
  151. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
  152. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/extension/models.rs +0 -0
  153. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/annotations/mod.rs +0 -0
  154. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/annotations/visitor.rs +0 -0
  155. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/contracts/category.rs +0 -0
  156. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/contracts/display.rs +0 -0
  157. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/contracts/mod.rs +0 -0
  158. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/contracts/returns.rs +0 -0
  159. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/contracts/rows.rs +0 -0
  160. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/control/conditionals.rs +0 -0
  161. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/control/mod.rs +0 -0
  162. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/declarations/mod.rs +0 -0
  163. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/declarations/rows.rs +0 -0
  164. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/harness/calls.rs +0 -0
  165. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/harness/dimensions.rs +0 -0
  166. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/harness/functions.rs +0 -0
  167. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/harness/imports.rs +0 -0
  168. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/harness/mod.rs +0 -0
  169. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/hygiene/checks.rs +0 -0
  170. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/hygiene/mod.rs +0 -0
  171. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/metrics/functions.rs +0 -0
  172. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/metrics/lookups.rs +0 -0
  173. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/metrics/mod.rs +0 -0
  174. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/metrics/mutations.rs +0 -0
  175. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/mod.rs +0 -0
  176. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/naming/mod.rs +0 -0
  177. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/naming/names.rs +0 -0
  178. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/project/calls.rs +0 -0
  179. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/project/mod.rs +0 -0
  180. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/references/events.rs +0 -0
  181. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/references/mod.rs +0 -0
  182. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/references/test_shape.rs +0 -0
  183. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/literals.rs +0 -0
  184. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mod.rs +0 -0
  185. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mutations.rs +0 -0
  186. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/ownership.rs +0 -0
  187. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/references.rs +0 -0
  188. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/shape/breadth.rs +0 -0
  189. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/shape/children.rs +0 -0
  190. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/shape/expression_children.rs +0 -0
  191. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/shape/mod.rs +0 -0
  192. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/shape/nodes.rs +0 -0
  193. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/shape/spans.rs +0 -0
  194. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/shape/statement_children.rs +0 -0
  195. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/state/mod.rs +0 -0
  196. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/state/resolution.rs +0 -0
  197. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/state/scopes.rs +0 -0
  198. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/wording/mod.rs +0 -0
  199. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/helpers/wording/text.rs +0 -0
  200. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
  201. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
  202. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
  203. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
  204. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
  205. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
  206. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
  207. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
  208. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
  209. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
  210. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
  211. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
  212. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
  213. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
  214. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
  215. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
  216. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
  217. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
  218. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
  219. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
  220. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
  221. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/constants.rs +0 -0
  222. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/helpers/classes.rs +0 -0
  223. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/helpers/expressions.rs +0 -0
  224. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/helpers/extraction.rs +0 -0
  225. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/helpers/functions.rs +0 -0
  226. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/helpers/imports.rs +0 -0
  227. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/helpers/mod.rs +0 -0
  228. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_declarations.rs +0 -0
  229. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_facts.rs +0 -0
  230. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/main/mod.rs +0 -0
  231. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/mod.rs +0 -0
  232. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mapping/models.rs +0 -0
  233. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
  234. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/models.rs +0 -0
  235. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/facts/types.rs +0 -0
  236. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/lib.rs +0 -0
  237. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/parsing/helpers/failures.rs +0 -0
  238. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/parsing/helpers/mod.rs +0 -0
  239. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
  240. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
  241. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
  242. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
  243. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
  244. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/positions/helpers/line_index.rs +0 -0
  245. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/positions/helpers/mod.rs +0 -0
  246. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
  247. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
  248. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
  249. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
  250. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/positions/models.rs +0 -0
  251. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
  252. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/helpers/matching.rs +0 -0
  253. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/helpers/mod.rs +0 -0
  254. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/helpers/observation_index.rs +0 -0
  255. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/helpers/repository_observation_index.rs +0 -0
  256. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/helpers/repository_paths.rs +0 -0
  257. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
  258. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
  259. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
  260. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
  261. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
  262. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
  263. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/facts/enumerate.rs +0 -0
  264. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/facts/mapping.rs +0 -0
  265. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/facts/rule_authoring.rs +0 -0
  266. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
  267. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/facts.rs +0 -0
  268. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/parsing/strict.rs +0 -0
  269. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
  270. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/parsing.rs +0 -0
  271. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/positions/locate.rs +0 -0
  272. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
  273. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/positions.rs +0 -0
  274. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/snapshot/hashing.rs +0 -0
  275. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
  276. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/snapshot/observations.rs +0 -0
  277. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
  278. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/snapshot/walk.rs +0 -0
  279. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
  280. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/Cargo.toml +0 -0
  281. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/helpers/loading.rs +0 -0
  282. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/helpers/mod.rs +0 -0
  283. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
  284. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
  285. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
  286. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/mod.rs +0 -0
  287. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/models.rs +0 -0
  288. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/corpus/types.rs +0 -0
  289. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/constants.rs +0 -0
  290. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/errors.rs +0 -0
  291. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/archival/archive.rs +0 -0
  292. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/archival/mod.rs +0 -0
  293. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/mod.rs +0 -0
  294. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/database.rs +0 -0
  295. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/documents.rs +0 -0
  296. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/lists.rs +0 -0
  297. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/mod.rs +0 -0
  298. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/references.rs +0 -0
  299. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/sections.rs +0 -0
  300. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/skills.rs +0 -0
  301. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/streaming.rs +0 -0
  302. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/publication/values.rs +0 -0
  303. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/querying/graph_loading.rs +0 -0
  304. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/querying/graphs.rs +0 -0
  305. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/querying/mod.rs +0 -0
  306. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/querying/overviews.rs +0 -0
  307. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/querying/queries.rs +0 -0
  308. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/querying/query_values.rs +0 -0
  309. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/diagnostics.rs +0 -0
  310. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/mod.rs +0 -0
  311. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_core.rs +0 -0
  312. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_markdown.rs +0 -0
  313. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_metadata.rs +0 -0
  314. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_skill_view.rs +0 -0
  315. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_views.rs +0 -0
  316. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/summaries.rs +0 -0
  317. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/helpers/reporting/synchronization.rs +0 -0
  318. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
  319. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
  320. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
  321. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
  322. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
  323. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
  324. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
  325. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
  326. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
  327. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
  328. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
  329. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
  330. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
  331. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/mod.rs +0 -0
  332. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/engine/models.rs +0 -0
  333. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/helpers/cycles.rs +0 -0
  334. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/helpers/dependencies.rs +0 -0
  335. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/helpers/document_targets.rs +0 -0
  336. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/helpers/heading_targets.rs +0 -0
  337. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/helpers/link_resolution.rs +0 -0
  338. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/helpers/mod.rs +0 -0
  339. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
  340. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
  341. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/mod.rs +0 -0
  342. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/models.rs +0 -0
  343. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/graph/types.rs +0 -0
  344. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/lib.rs +0 -0
  345. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/constants.rs +0 -0
  346. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/assembly.rs +0 -0
  347. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/blocks.rs +0 -0
  348. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/headings.rs +0 -0
  349. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/line_index.rs +0 -0
  350. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/links.rs +0 -0
  351. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/lists.rs +0 -0
  352. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/mod.rs +0 -0
  353. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/obsidian.rs +0 -0
  354. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/helpers/text.rs +0 -0
  355. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
  356. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
  357. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/mod.rs +0 -0
  358. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/models.rs +0 -0
  359. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/markdown/types.rs +0 -0
  360. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/constants.rs +0 -0
  361. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/bootstrap.rs +0 -0
  362. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/collisions.rs +0 -0
  363. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/discovery.rs +0 -0
  364. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/documents.rs +0 -0
  365. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/filesystem.rs +0 -0
  366. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/git_tracking.rs +0 -0
  367. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/mod.rs +0 -0
  368. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/skills.rs +0 -0
  369. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/tree.rs +0 -0
  370. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/helpers/validation.rs +0 -0
  371. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
  372. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
  373. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/main/mod.rs +0 -0
  374. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/mod.rs +0 -0
  375. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/models.rs +0 -0
  376. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/src/source/types.rs +0 -0
  377. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
  378. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/corpus/loading.rs +0 -0
  379. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
  380. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/corpus.rs +0 -0
  381. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/archive.rs +0 -0
  382. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/bootstrap.rs +0 -0
  383. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/check.rs +0 -0
  384. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/dependencies.rs +0 -0
  385. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/graph_query.rs +0 -0
  386. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
  387. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/list_batch/list_batches.rs +0 -0
  388. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
  389. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/overview.rs +0 -0
  390. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/performance.rs +0 -0
  391. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/query.rs +0 -0
  392. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/schema.rs +0 -0
  393. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
  394. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/streaming.rs +0 -0
  395. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/summary.rs +0 -0
  396. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/sync.rs +0 -0
  397. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
  398. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/engine.rs +0 -0
  399. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/graph/dependencies.rs +0 -0
  400. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
  401. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/graph/resolution.rs +0 -0
  402. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
  403. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/graph.rs +0 -0
  404. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/markdown/code_blocks.rs +0 -0
  405. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/markdown/links.rs +0 -0
  406. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/markdown/lists.rs +0 -0
  407. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/markdown/structure.rs +0 -0
  408. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
  409. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/markdown.rs +0 -0
  410. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/source/collisions.rs +0 -0
  411. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/source/discovery.rs +0 -0
  412. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/source/git_worktrees.rs +0 -0
  413. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/source/helpers.rs +0 -0
  414. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/source/symlinks.rs +0 -0
  415. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/source/test_types.rs +0 -0
  416. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-memory/tests/source.rs +0 -0
  417. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/constants.rs +0 -0
  418. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/bindings.rs +0 -0
  419. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/database.rs +0 -0
  420. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/generation.rs +0 -0
  421. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/mod.rs +0 -0
  422. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/publication.rs +0 -0
  423. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/publication_merge.rs +0 -0
  424. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/records.rs +0 -0
  425. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/replay.rs +0 -0
  426. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/schema.rs +0 -0
  427. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/schema_values.rs +0 -0
  428. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/helpers/storage.rs +0 -0
  429. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
  430. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
  431. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
  432. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/models.rs +0 -0
  433. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/cache/types.rs +0 -0
  434. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/constants.rs +0 -0
  435. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/helpers/core_rule_bindings.rs +0 -0
  436. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/helpers/execution_planning.rs +0 -0
  437. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/helpers/memory_bindings.rs +0 -0
  438. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/helpers/memory_conversion.rs +0 -0
  439. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/helpers/memory_registration.rs +0 -0
  440. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/helpers/mod.rs +0 -0
  441. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
  442. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
  443. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/extension/mod.rs +0 -0
  444. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/lib.rs +0 -0
  445. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/constants.rs +0 -0
  446. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/annotations/annotations.rs +0 -0
  447. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/hygiene/hygiene.rs +0 -0
  448. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/layers/layers.rs +0 -0
  449. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/layers/local.rs +0 -0
  450. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/layers/project.rs +0 -0
  451. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/mod.rs +0 -0
  452. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/naming/naming.rs +0 -0
  453. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/naming_globs/naming_globs.rs +0 -0
  454. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/project_queries/project_queries.rs +0 -0
  455. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/roles/declarations.rs +0 -0
  456. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/roles/paths.rs +0 -0
  457. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/roles/project_layout.rs +0 -0
  458. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_paths.rs +0 -0
  459. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_queries.rs +0 -0
  460. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/roles/roles.rs +0 -0
  461. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/roles/surfaces.rs +0 -0
  462. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/shape/shape.rs +0 -0
  463. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/tests/layout.rs +0 -0
  464. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/tests/names.rs +0 -0
  465. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/helpers/tests/tests.rs +0 -0
  466. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +0 -0
  467. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
  468. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
  469. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/mod.rs +0 -0
  470. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/src/rules/models.rs +0 -0
  471. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/tests/extension/memory_conversion.rs +0 -0
  472. {fensu_cli-0.3.0 → fensu_cli-0.4.0}/crates/fensu-native/tests/extension/test_types.rs +0 -0
@@ -23,6 +23,12 @@ version = "0.2.21"
23
23
  source = "registry+https://github.com/rust-lang/crates.io-index"
24
24
  checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
25
25
 
26
+ [[package]]
27
+ name = "ambient-authority"
28
+ version = "0.0.2"
29
+ source = "registry+https://github.com/rust-lang/crates.io-index"
30
+ checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b"
31
+
26
32
  [[package]]
27
33
  name = "arc-swap"
28
34
  version = "1.9.2"
@@ -118,6 +124,48 @@ version = "1.12.1"
118
124
  source = "registry+https://github.com/rust-lang/crates.io-index"
119
125
  checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
120
126
 
127
+ [[package]]
128
+ name = "cap-fs-ext"
129
+ version = "4.0.2"
130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
131
+ checksum = "d78e5a3368ae89b7cb68186411452b4b9fac8b41be9c19bf3f47c2d2c8e36e6b"
132
+ dependencies = [
133
+ "cap-primitives",
134
+ "cap-std",
135
+ "io-lifetimes 3.0.1",
136
+ "windows-sys 0.61.2",
137
+ ]
138
+
139
+ [[package]]
140
+ name = "cap-primitives"
141
+ version = "4.0.2"
142
+ source = "registry+https://github.com/rust-lang/crates.io-index"
143
+ checksum = "cdadbd7c002d3a484b35243669abdae85a0ebaded5a61117169dc3400f9a7ff0"
144
+ dependencies = [
145
+ "ambient-authority",
146
+ "fs-set-times",
147
+ "io-extras",
148
+ "io-lifetimes 3.0.1",
149
+ "ipnet",
150
+ "maybe-owned",
151
+ "rustix",
152
+ "rustix-linux-procfs",
153
+ "windows-sys 0.61.2",
154
+ "winx",
155
+ ]
156
+
157
+ [[package]]
158
+ name = "cap-std"
159
+ version = "4.0.2"
160
+ source = "registry+https://github.com/rust-lang/crates.io-index"
161
+ checksum = "7281235d6e96d3544ca18bba9049be92f4190f8d923e3caef1b5f66cfa752608"
162
+ dependencies = [
163
+ "cap-primitives",
164
+ "io-extras",
165
+ "io-lifetimes 3.0.1",
166
+ "rustix",
167
+ ]
168
+
121
169
  [[package]]
122
170
  name = "castaway"
123
171
  version = "0.2.4"
@@ -311,7 +359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
311
359
  checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
312
360
  dependencies = [
313
361
  "libc",
314
- "windows-sys",
362
+ "windows-sys 0.61.2",
315
363
  ]
316
364
 
317
365
  [[package]]
@@ -344,8 +392,10 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
344
392
 
345
393
  [[package]]
346
394
  name = "fensu-cli"
347
- version = "0.3.0"
395
+ version = "0.4.0"
348
396
  dependencies = [
397
+ "cap-fs-ext",
398
+ "cap-std",
349
399
  "dunce",
350
400
  "encoding_rs",
351
401
  "fensu-facts",
@@ -406,8 +456,10 @@ dependencies = [
406
456
  "rayon",
407
457
  "ruff_python_ast",
408
458
  "rusqlite",
459
+ "serde",
409
460
  "serde_json",
410
461
  "sha2",
462
+ "tempfile",
411
463
  "unicode-ident",
412
464
  ]
413
465
 
@@ -461,6 +513,17 @@ version = "0.2.0"
461
513
  source = "registry+https://github.com/rust-lang/crates.io-index"
462
514
  checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
463
515
 
516
+ [[package]]
517
+ name = "fs-set-times"
518
+ version = "0.20.3"
519
+ source = "registry+https://github.com/rust-lang/crates.io-index"
520
+ checksum = "94e7099f6313ecacbe1256e8ff9d617b75d1bcb16a6fddef94866d225a01a14a"
521
+ dependencies = [
522
+ "io-lifetimes 2.0.4",
523
+ "rustix",
524
+ "windows-sys 0.59.0",
525
+ ]
526
+
464
527
  [[package]]
465
528
  name = "generic-array"
466
529
  version = "0.14.7"
@@ -1055,7 +1118,7 @@ dependencies = [
1055
1118
  "bitflags 2.13.0",
1056
1119
  "gix-path",
1057
1120
  "libc",
1058
- "windows-sys",
1121
+ "windows-sys 0.61.2",
1059
1122
  ]
1060
1123
 
1061
1124
  [[package]]
@@ -1279,6 +1342,34 @@ version = "0.5.0"
1279
1342
  source = "registry+https://github.com/rust-lang/crates.io-index"
1280
1343
  checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8"
1281
1344
 
1345
+ [[package]]
1346
+ name = "io-extras"
1347
+ version = "0.19.0"
1348
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1349
+ checksum = "20fd6de4ccfcc187e38bc21cfa543cb5a302cb86a8b114eb7f0bf0dc9f8ac00f"
1350
+ dependencies = [
1351
+ "io-lifetimes 3.0.1",
1352
+ "windows-sys 0.60.2",
1353
+ ]
1354
+
1355
+ [[package]]
1356
+ name = "io-lifetimes"
1357
+ version = "2.0.4"
1358
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1359
+ checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983"
1360
+
1361
+ [[package]]
1362
+ name = "io-lifetimes"
1363
+ version = "3.0.1"
1364
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1365
+ checksum = "2f0fb0570afe1fed943c5c3d4102d5358592d8625fda6a0007fdbe65a92fba96"
1366
+
1367
+ [[package]]
1368
+ name = "ipnet"
1369
+ version = "2.12.0"
1370
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1371
+ checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
1372
+
1282
1373
  [[package]]
1283
1374
  name = "is-macro"
1284
1375
  version = "0.3.7"
@@ -1450,6 +1541,12 @@ dependencies = [
1450
1541
  "syn",
1451
1542
  ]
1452
1543
 
1544
+ [[package]]
1545
+ name = "maybe-owned"
1546
+ version = "0.3.4"
1547
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1548
+ checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4"
1549
+
1453
1550
  [[package]]
1454
1551
  name = "memchr"
1455
1552
  version = "2.8.3"
@@ -1919,7 +2016,17 @@ dependencies = [
1919
2016
  "errno",
1920
2017
  "libc",
1921
2018
  "linux-raw-sys",
1922
- "windows-sys",
2019
+ "windows-sys 0.61.2",
2020
+ ]
2021
+
2022
+ [[package]]
2023
+ name = "rustix-linux-procfs"
2024
+ version = "0.1.1"
2025
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2026
+ checksum = "2fc84bf7e9aa16c4f2c758f27412dc9841341e16aa682d9c7ac308fe3ee12056"
2027
+ dependencies = [
2028
+ "once_cell",
2029
+ "rustix",
1923
2030
  ]
1924
2031
 
1925
2032
  [[package]]
@@ -2115,7 +2222,7 @@ dependencies = [
2115
2222
  "getrandom 0.4.3",
2116
2223
  "once_cell",
2117
2224
  "rustix",
2118
- "windows-sys",
2225
+ "windows-sys 0.61.2",
2119
2226
  ]
2120
2227
 
2121
2228
  [[package]]
@@ -2338,7 +2445,7 @@ version = "0.1.11"
2338
2445
  source = "registry+https://github.com/rust-lang/crates.io-index"
2339
2446
  checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
2340
2447
  dependencies = [
2341
- "windows-sys",
2448
+ "windows-sys 0.61.2",
2342
2449
  ]
2343
2450
 
2344
2451
  [[package]]
@@ -2347,6 +2454,24 @@ version = "0.2.1"
2347
2454
  source = "registry+https://github.com/rust-lang/crates.io-index"
2348
2455
  checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
2349
2456
 
2457
+ [[package]]
2458
+ name = "windows-sys"
2459
+ version = "0.59.0"
2460
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2461
+ checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
2462
+ dependencies = [
2463
+ "windows-targets 0.52.6",
2464
+ ]
2465
+
2466
+ [[package]]
2467
+ name = "windows-sys"
2468
+ version = "0.60.2"
2469
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2470
+ checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
2471
+ dependencies = [
2472
+ "windows-targets 0.53.5",
2473
+ ]
2474
+
2350
2475
  [[package]]
2351
2476
  name = "windows-sys"
2352
2477
  version = "0.61.2"
@@ -2356,6 +2481,135 @@ dependencies = [
2356
2481
  "windows-link",
2357
2482
  ]
2358
2483
 
2484
+ [[package]]
2485
+ name = "windows-targets"
2486
+ version = "0.52.6"
2487
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2488
+ checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
2489
+ dependencies = [
2490
+ "windows_aarch64_gnullvm 0.52.6",
2491
+ "windows_aarch64_msvc 0.52.6",
2492
+ "windows_i686_gnu 0.52.6",
2493
+ "windows_i686_gnullvm 0.52.6",
2494
+ "windows_i686_msvc 0.52.6",
2495
+ "windows_x86_64_gnu 0.52.6",
2496
+ "windows_x86_64_gnullvm 0.52.6",
2497
+ "windows_x86_64_msvc 0.52.6",
2498
+ ]
2499
+
2500
+ [[package]]
2501
+ name = "windows-targets"
2502
+ version = "0.53.5"
2503
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2504
+ checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
2505
+ dependencies = [
2506
+ "windows-link",
2507
+ "windows_aarch64_gnullvm 0.53.1",
2508
+ "windows_aarch64_msvc 0.53.1",
2509
+ "windows_i686_gnu 0.53.1",
2510
+ "windows_i686_gnullvm 0.53.1",
2511
+ "windows_i686_msvc 0.53.1",
2512
+ "windows_x86_64_gnu 0.53.1",
2513
+ "windows_x86_64_gnullvm 0.53.1",
2514
+ "windows_x86_64_msvc 0.53.1",
2515
+ ]
2516
+
2517
+ [[package]]
2518
+ name = "windows_aarch64_gnullvm"
2519
+ version = "0.52.6"
2520
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2521
+ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
2522
+
2523
+ [[package]]
2524
+ name = "windows_aarch64_gnullvm"
2525
+ version = "0.53.1"
2526
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2527
+ checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
2528
+
2529
+ [[package]]
2530
+ name = "windows_aarch64_msvc"
2531
+ version = "0.52.6"
2532
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2533
+ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
2534
+
2535
+ [[package]]
2536
+ name = "windows_aarch64_msvc"
2537
+ version = "0.53.1"
2538
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2539
+ checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
2540
+
2541
+ [[package]]
2542
+ name = "windows_i686_gnu"
2543
+ version = "0.52.6"
2544
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2545
+ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
2546
+
2547
+ [[package]]
2548
+ name = "windows_i686_gnu"
2549
+ version = "0.53.1"
2550
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2551
+ checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
2552
+
2553
+ [[package]]
2554
+ name = "windows_i686_gnullvm"
2555
+ version = "0.52.6"
2556
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2557
+ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
2558
+
2559
+ [[package]]
2560
+ name = "windows_i686_gnullvm"
2561
+ version = "0.53.1"
2562
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2563
+ checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
2564
+
2565
+ [[package]]
2566
+ name = "windows_i686_msvc"
2567
+ version = "0.52.6"
2568
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2569
+ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
2570
+
2571
+ [[package]]
2572
+ name = "windows_i686_msvc"
2573
+ version = "0.53.1"
2574
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2575
+ checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
2576
+
2577
+ [[package]]
2578
+ name = "windows_x86_64_gnu"
2579
+ version = "0.52.6"
2580
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2581
+ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
2582
+
2583
+ [[package]]
2584
+ name = "windows_x86_64_gnu"
2585
+ version = "0.53.1"
2586
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2587
+ checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
2588
+
2589
+ [[package]]
2590
+ name = "windows_x86_64_gnullvm"
2591
+ version = "0.52.6"
2592
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2593
+ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
2594
+
2595
+ [[package]]
2596
+ name = "windows_x86_64_gnullvm"
2597
+ version = "0.53.1"
2598
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2599
+ checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
2600
+
2601
+ [[package]]
2602
+ name = "windows_x86_64_msvc"
2603
+ version = "0.52.6"
2604
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2605
+ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
2606
+
2607
+ [[package]]
2608
+ name = "windows_x86_64_msvc"
2609
+ version = "0.53.1"
2610
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2611
+ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
2612
+
2359
2613
  [[package]]
2360
2614
  name = "winnow"
2361
2615
  version = "0.7.15"
@@ -2368,6 +2622,16 @@ version = "1.0.4"
2368
2622
  source = "registry+https://github.com/rust-lang/crates.io-index"
2369
2623
  checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81"
2370
2624
 
2625
+ [[package]]
2626
+ name = "winx"
2627
+ version = "0.36.4"
2628
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2629
+ checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d"
2630
+ dependencies = [
2631
+ "bitflags 2.13.0",
2632
+ "windows-sys 0.59.0",
2633
+ ]
2634
+
2371
2635
  [[package]]
2372
2636
  name = "zerocopy"
2373
2637
  version = "0.8.54"
@@ -8,6 +8,8 @@ license = "Apache-2.0"
8
8
  publish = false
9
9
 
10
10
  [workspace.dependencies]
11
+ cap-fs-ext = "4"
12
+ cap-std = "4"
11
13
  dunce = "1.0"
12
14
  encoding_rs = "0.8"
13
15
  flate2 = { version = "1", default-features = false, features = ["zlib"] }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fensu-cli
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "fensu-cli"
3
- version = "0.3.0" # x-release-please-version
3
+ version = "0.4.0" # x-release-please-version
4
4
  edition.workspace = true
5
5
  license.workspace = true
6
6
  publish = false
@@ -14,6 +14,8 @@ name = "fensu"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
+ cap-fs-ext.workspace = true
18
+ cap-std.workspace = true
17
19
  dunce.workspace = true
18
20
  encoding_rs.workspace = true
19
21
  globset.workspace = true
@@ -0,0 +1 @@
1
+ [{"code":"FFA001","family":"annotations","slug":"parameter-annotation","message":"function parameters must define type annotations","remediation":"Annotate every parameter with the value type accepted by the function.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFA002","family":"annotations","slug":"return-annotation","message":"functions must define return type annotations","remediation":"Declare the returned value type, using None when the function returns no value.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFA101","family":"annotations","slug":"module-variable-annotation","message":"module-level variables must define type annotations","remediation":"Add an explicit annotation to the first module-level assignment.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFA102","family":"annotations","slug":"class-attribute-annotation","message":"class attributes must define type annotations","remediation":"Annotate the class attribute where it is first assigned.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFA103","family":"annotations","slug":"local-variable-annotation","message":"local variables must define type annotations on first binding unless assigned a scalar literal","remediation":"Annotate first bindings whose type is not evident from a number, string, bool, bytes, or f-string literal.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL001","family":"layers","slug":"absolute-imports-only","message":"use absolute imports; relative imports hide package boundaries","remediation":"Replace relative imports with an absolute import path.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL002","family":"layers","slug":"no-star-imports","message":"star imports hide names from dependency-boundary analysis","remediation":"Import each required name explicitly.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL101","family":"layers","slug":"no-sibling-package-internals","message":"subpackage code must not import sibling internals","remediation":"Publish the dependency through the owning sibling's main/ entry or role files.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL102","family":"layers","slug":"no-cross-package-internals","message":"cross-package imports must use public surfaces, not helpers or internals","remediation":"Import from classes, models, types, constants, exceptions, or a thin main/ entry.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL103","family":"layers","slug":"no-internal-public-surface-imports","message":"internal code must import from the owning module, not the bare package","remediation":"Import from the concrete owning module below the package surface.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL104","family":"layers","slug":"no-cross-domain-private-main-imports","message":"domain-private main entries may only be imported within their owning domain","remediation":"Remove the leading underscore to publish the main entry, or route the caller through a public main entry owned by the target domain.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL105","family":"layers","slug":"public-main-entry-external-use","message":"public main entries must have an importer outside their owning domain","remediation":"Prefix the entry module filename with '_' until another domain or tooling imports it.","severity":"error","enabled_by_default":true,"execution_owner":"project"},{"code":"FFL110","family":"layers","slug":"no-cross-file-use-of-helper-private-class","message":"helper-private classes are file-local details; move shared classes to classes/","remediation":"If another module needs this class, move it to the owning classes/ package.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFL301","family":"layers","slug":"no-runtime-imports-from-tooling","message":"runtime code must not import from tooling modules","remediation":"Move reusable logic into the runtime package or keep the dependency inside tooling.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH001","family":"hygiene","slug":"single-line-docstrings","message":"docstrings must be a single line; move extended explanation into docs or tests","remediation":"Keep one concise summary line and move extended rationale into documentation or tests.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH002","family":"hygiene","slug":"no-standalone-comments","message":"standalone comments are not allowed; prefer clear names or docs/tests","remediation":"Replace the comment with clearer names or move lasting explanation into documentation or tests.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH003","family":"hygiene","slug":"no-raw-builtin-raise","message":"runtime code must raise structured errors instead of raw built-in exceptions","remediation":"Raise a domain-specific exception from exceptions.py with a stable actionable message.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH004","family":"hygiene","slug":"no-assert-in-runtime","message":"runtime code must not use assert for invariants; raise a structured error","remediation":"Replace assert with an explicit guard that raises a domain-specific exception.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH005","family":"hygiene","slug":"no-swallowed-exception-probe","message":"runtime code must not swallow broad exceptions as existence probe answers","remediation":"Use an explicit metadata or existence check, or catch only the expected exception and preserve failures.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH006","family":"hygiene","slug":"no-complex-comprehensions-in-tooling","message":"nested or multi-generator comprehensions hide control flow and data shapes","remediation":"Extract a named helper when the transformation has a coherent purpose. For one-off local logic, use simple statements with named intermediate values instead of nested comprehension control flow.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH007","family":"hygiene","slug":"no-unnamed-string-decisions","message":"string literals must not directly control comparison behavior","remediation":"Name the decision value in constants.py or compare against an enum member so the branch expresses the concept it represents.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH008","family":"hygiene","slug":"no-magic-numeric-comparisons","message":"non-canonical numeric literals must not directly control comparisons","remediation":"Name the threshold or sentinel in constants.py and compare against that name; only -1, 0, and 1 are self-explanatory comparison values.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFH009","family":"hygiene","slug":"no-import-time-side-effects","message":"runtime and tooling modules must not execute standalone calls during import","remediation":"Move the operation into an explicit function or assign a pure constructor result.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS001","family":"shape","slug":"too-many-statements","message":"main functions must stay phase-shaped and below the statement limit","remediation":"Extract cohesive phases into helpers that return explicit result models.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS002","family":"shape","slug":"too-many-distinct-calls","message":"main functions must not coordinate too many distinct callees","remediation":"Group related work into named phase helpers and keep main/ as a short ordered flow.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS003","family":"shape","slug":"too-many-locals","message":"main functions must not juggle too many local variables","remediation":"Let each extracted phase own its intermediates and return one structured result.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS010","family":"shape","slug":"max-arguments","message":"functions must stay below the configured argument limit","remediation":"Reduce the function's responsibility or group cohesive inputs into a typed model.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS011","family":"shape","slug":"max-statements-global","message":"functions must stay below the global statement limit","remediation":"Split the function at a meaningful phase boundary with explicit inputs and outputs.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS101","family":"shape","slug":"meaningful-project-result-discarded","message":"main orchestrators must consume meaningful project-local call results","remediation":"Assign, return, or explicitly discard the phase result with _ = call(...).","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS102","family":"shape","slug":"parameter-mutation-in-phase-helpers","message":"helpers must return values instead of mutating parameters","remediation":"Return a new or updated value so dataflow remains visible to the caller.","severity":"error","enabled_by_default":false,"execution_owner":"file"},{"code":"FFS110","family":"shape","slug":"default-mutation-return","message":"functions that mutate parameters must return every mutated parameter","remediation":"Return each mutated parameter explicitly, or avoid parameter mutation and return a new value.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS120","family":"shape","slug":"keyword-only-arguments","message":"functions beyond the parameter threshold must be entirely keyword-only","remediation":"Insert * before the first non-receiver parameter so every call argument names its meaning.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS130","family":"shape","slug":"no-outer-state-mutation","message":"functions must not mutate module-global or closure-captured state","remediation":"Pass state explicitly and return the updated value instead of mutating outer scope.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS131","family":"shape","slug":"no-complex-comprehensions","message":"nested or multi-generator comprehensions hide control flow and data shapes","remediation":"Extract a named helper when the transformation has a coherent purpose. For one-off local logic, use simple statements with named intermediate values instead of nested comprehension control flow.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFS201","family":"shape","slug":"mutable-result-model","message":"dataclass result models must be frozen","remediation":"Declare the shared result model with @dataclass(frozen=True).","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT001","family":"tests","slug":"test-layout","message":"tests must live under a configured test root and supported scope","remediation":"Move the test beneath a configured test root and unit, integration, or e2e scope.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT002","family":"tests","slug":"test-scope","message":"test scope must be unit, integration, or e2e","remediation":"Move the test under tests/unit, tests/integration, or tests/e2e.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT003","family":"tests","slug":"test-mirrored-root","message":"test directories must mirror a configured runtime or tooling root","remediation":"Mirror the complete configured source or tooling path beneath the test scope.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT004","family":"tests","slug":"src-mirror-depth","message":"runtime tests must include an area beneath the configured source root","remediation":"Move the test beneath the package and source area it exercises.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT005","family":"tests","slug":"src-package-exists","message":"runtime tests must mirror a configured source package","remediation":"Correct the mirrored package name or move the test to the package it exercises.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT006","family":"tests","slug":"src-area-exists","message":"runtime tests must mirror an existing source package area","remediation":"Correct the mirrored area path so it matches the runtime module location.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT007","family":"tests","slug":"scripts-mirror-depth","message":"tooling tests must include an area beneath the configured tooling root","remediation":"Move the test beneath the configured tooling area it exercises.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT008","family":"tests","slug":"scripts-area-exists","message":"tooling tests must mirror an existing configured tooling area","remediation":"Correct the mirrored area path so it matches the tooling location.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT101","family":"tests","slug":"init-module-empty","message":"test package __init__.py files must be empty or docstring-only","remediation":"Remove runtime declarations from __init__.py and import them from their owning module.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT102","family":"tests","slug":"absolute-imports","message":"tests must use absolute imports","remediation":"Replace the relative import with the full tests or application package path.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT103","family":"tests","slug":"no-top-level-helpers","message":"test modules may contain only tests, imports, and declarations","remediation":"Move reusable functions into the local helpers.py module.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT104","family":"tests","slug":"no-if-in-tests","message":"tests and local test helpers must not contain conditional control flow","remediation":"Use parametrized cases when setup and assertions remain branch-free; otherwise split the behavior into separate test functions. Keep local test helpers deterministic with per-variant functions or dataclass-driven case data.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT105","family":"tests","slug":"private-constant-order","message":"private test constants must appear before test functions","remediation":"Move the private constant above the first test so module setup is visible before behavior.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT106","family":"tests","slug":"no-complex-comprehensions","message":"nested or multi-generator comprehensions hide control flow and data shapes","remediation":"Extract a named helper when the transformation has a coherent purpose. For one-off local logic, use simple statements with named intermediate values instead of nested comprehension control flow.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT201","family":"tests","slug":"test-types-description","message":"test-case dataclasses must define a description field","remediation":"Add description: str so parametrized cases explain the behavior they represent.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT202","family":"tests","slug":"test-types-expected-field","message":"test-case dataclasses must define at least one expected_ field","remediation":"Name expected outcomes with an expected_ prefix and assert against them in the test.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT203","family":"tests","slug":"local-test-types-import","message":"tests must import test-case types from their local _test_types.py","remediation":"Move the dataclass beside the test and import it through the mirrored absolute path.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT204","family":"tests","slug":"local-test-types-file","message":"test directories must provide a local _test_types.py","remediation":"Create _test_types.py beside the test. Custom-rule tests should define a local wrapper dataclass there rather than parametrizing directly with RuleCase.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT301","family":"tests","slug":"test-file-name","message":"test modules must use a test_ filename","remediation":"Rename the module to test_<behavior>.py.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT302","family":"tests","slug":"test-function-name","message":"test functions must use test_given_<state>_when_<action>_then_<outcome>","remediation":"Rename the test so its precondition, action, and expected behavior are explicit.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT401","family":"tests","slug":"dataclass-parametrize","message":"tests must use dataclass-backed pytest parameterization","remediation":"Add @pytest.mark.parametrize with local test_case dataclass instances.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT402","family":"tests","slug":"accepts-test-case","message":"parametrized tests must accept a test_case argument","remediation":"Name the parameter test_case and read inputs and expectations from that object.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT403","family":"tests","slug":"test-case-annotation","message":"test_case parameters must use a local test-case dataclass annotation","remediation":"Annotate test_case with a dataclass imported from the local _test_types.py.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT404","family":"tests","slug":"expected-field-assertion","message":"tests must assert against an expected_ field from test_case","remediation":"Store the expected outcome on test_case and reference it in a behavior assertion.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT405","family":"tests","slug":"parametrize-arguments","message":"pytest parametrize decorators must define parameter names and values","remediation":"Pass both the parameter-name string and the case sequence to parametrize.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT406","family":"tests","slug":"parametrize-test-case","message":"pytest parametrize must expose cases through the test_case parameter","remediation":"Use \"test_case\" as the parametrize parameter name.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT407","family":"tests","slug":"parametrize-ids","message":"pytest parametrize decorators must define readable case ids","remediation":"Set ids to the case descriptions, normally with ids=lambda case: case.description.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT408","family":"tests","slug":"inline-parametrize-values","message":"pytest parametrize values must be a visible list, tuple, or local comprehension","remediation":"Inline the case sequence in @pytest.mark.parametrize so its cases are visible beside the test.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT411","family":"tests","slug":"nonempty-parametrize-values","message":"pytest parametrize case sequences must not be empty","remediation":"Add at least one behavior case or remove the test until a real case exists.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT412","family":"tests","slug":"no-dict-test-cases","message":"pytest cases must use typed dataclasses instead of dictionaries","remediation":"Define a local frozen test-case dataclass and construct one instance per case.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT413","family":"tests","slug":"local-test-case-constructors","message":"pytest cases must construct dataclasses from the local _test_types.py","remediation":"Parametrize using a dataclass imported from local _test_types.py. For framework harness inputs such as RuleCase, store their fields in the local dataclass and construct the framework object inside the test.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFT414","family":"tests","slug":"description-lambda-ids","message":"pytest case ids must come from each test case description","remediation":"Use ids=lambda case: case.description so failures identify the behavior clearly.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR001","family":"roles","slug":"models-only-models","message":"models role files may contain only structured runtime models","remediation":"Move functions and non-model declarations to their owning role module.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR002","family":"roles","slug":"types-only-types","message":"types role files may contain only type-layer declarations","remediation":"Move runtime values and functions out of types.py into their owning runtime role.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR003","family":"roles","slug":"constants-only-constants","message":"constants role files may contain only assignments and imports","remediation":"Move functions and classes out of constants.py into their owning role module.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR004","family":"roles","slug":"exceptions-only-exceptions","message":"exceptions role files may contain only custom exceptions","remediation":"Move non-exception declarations out of exceptions.py into their owning role.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR101","family":"roles","slug":"model-declaration-outside-models","message":"structured runtime models must be defined in the models role","remediation":"Move the dataclass or structured model into models.py or a models/ package.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR102","family":"roles","slug":"type-declaration-outside-types","message":"type-layer declarations must be defined in the types role","remediation":"Move the protocol, enum, TypedDict, or public type alias into types.py.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR103","family":"roles","slug":"constant-outside-constants","message":"public uppercase constants must be defined in the constants role","remediation":"Move the public constant into constants.py and import it from there.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR104","family":"roles","slug":"exception-declaration-outside-exceptions","message":"custom exceptions must be defined in the exceptions role","remediation":"Move the exception class into exceptions.py or an exceptions/ package.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR201","family":"roles","slug":"banned-generic-filename","message":"generic filenames hide module ownership","remediation":"Rename the module after the domain concept or operation it owns.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR202","family":"roles","slug":"helpers-module-name","message":"use an _helpers package instead of helpers.py","remediation":"Replace helpers.py with an _helpers/ package of specifically named modules.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR203","family":"roles","slug":"classes-module-name","message":"use a classes package instead of classes.py","remediation":"Replace classes.py with a classes/ package containing one class per module.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR204","family":"roles","slug":"banned-generic-package-name","message":"runtime package directories must identify an owner","remediation":"Rename the package after the business domain or technical capability it owns.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR205","family":"roles","slug":"helpers-classes-file-private","message":"plain classes in _helpers modules must be file-private","remediation":"Prefix a file-local helper class with _, or move a shared class into classes/.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR301","family":"roles","slug":"helpers-package-layout","message":"_helpers/ packages must use bounded flat-or-grouped containers","remediation":"Keep _helpers/ flat or group every module into bounded shallow buckets; do not mix modules and Python-containing buckets in one container.","severity":"error","enabled_by_default":true,"execution_owner":"package"},{"code":"FFR302","family":"roles","slug":"main-package-layout","message":"main/ packages must use bounded flat-or-grouped orchestration containers","remediation":"Keep main/ flat or group every entry into bounded shallow buckets; do not mix modules and Python-containing buckets in one container.","severity":"error","enabled_by_default":true,"execution_owner":"package"},{"code":"FFR303","family":"roles","slug":"helpers-reserved-role-filenames","message":"_helpers/ packages must not contain reserved role filenames","remediation":"Rename the helper module after its specific operation, or move role-owned declarations to the corresponding sibling models, types, constants, or exceptions role.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR304","family":"roles","slug":"nested-direct-modules","message":"nested runtime packages may contain only role-oriented direct modules","remediation":"Move additional implementation modules under the package's _helpers/ boundary.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR305","family":"roles","slug":"nested-direct-subpackages","message":"nested runtime packages must use explicit role boundaries","remediation":"Move feature subpackages under _helpers/ or use a supported role such as main/ or classes/.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR306","family":"roles","slug":"top-level-domain-shape","message":"top-level domains must be either role leaves or subdomain branches","remediation":"Keep direct role content in a leaf domain, or move it into a named subdomain when the domain contains subdomains.","severity":"error","enabled_by_default":true,"execution_owner":"domain"},{"code":"FFR307","family":"roles","slug":"top-level-direct-modules","message":"top-level domains must not contain ad hoc direct modules","remediation":"Move the module under a direct role boundary or into an owning named subdomain.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR308","family":"roles","slug":"shared-domain-prefix","message":"sibling domains must not encode one parent domain through a shared name prefix","remediation":"Create one parent domain from the shared prefix and move each remaining suffix beneath it as a named subdomain.","severity":"error","enabled_by_default":true,"execution_owner":"scope"},{"code":"FFR309","family":"roles","slug":"leaf-main-boundary","message":"leaf runtime domains and subdomains must expose meaningful behavior through main/","remediation":"Add a focused main/ entry module only when the leaf owns behavior; otherwise move passive declarations into the closest domain or subdomain whose main/ behavior owns and uses them.","severity":"error","enabled_by_default":true,"execution_owner":"leaf"},{"code":"FFR401","family":"roles","slug":"entry-module-shape","message":"main/ entry modules must expose one focused public function","remediation":"Keep only imports, one public entry function, and at most two small private glue functions; move phase logic to _helpers/.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR402","family":"roles","slug":"init-module-empty","message":"nested __init__.py files must be empty or docstring-only","remediation":"Remove runtime declarations and import from the concrete owning module instead.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR403","family":"roles","slug":"no-reexport-shim","message":"internal modules must not exist only to re-export imports","remediation":"Import the implementation module directly or expose a deliberate API through an approved public surface.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR404","family":"roles","slug":"no-internal-helper-exports","message":"_helpers/ modules must not publish an __all__ surface","remediation":"Keep _helpers/ internal and expose public behavior through main/, classes/, models, types, constants, or exceptions.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR405","family":"roles","slug":"main-entry-name-collision","message":"main/ cannot define a module and package with the same entry name","remediation":"Choose either the flat entry module or the same-named package and remove the competing surface.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR406","family":"roles","slug":"public-surface-shape","message":"root package surfaces may contain only imports and one __all__ declaration","remediation":"Move runtime behavior into an owning module and keep the root __init__.py as a deliberate import surface.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR501","family":"roles","slug":"classes-one-class-per-module","message":"classes/ modules must define exactly one top-level class","remediation":"Split additional classes into separately named modules under classes/.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR502","family":"roles","slug":"helpers-package-shape","message":"_helpers/ packages must contain no main.py orchestration entrypoints","remediation":"Move main.py orchestration into the sibling main/ role; helper depth is enforced by FFR301.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR503","family":"roles","slug":"private-definition-ordering","message":"private constants and dataclasses must appear before top-level functions","remediation":"Move private module declarations above the first function so readers see module state before behavior.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR601","family":"roles","slug":"source-file-line-count","message":"source files must stay below the configured line limit","remediation":"Split the file by a cohesive role or concern instead of extracting arbitrary numbered fragments.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR701","family":"roles","slug":"tooling-entrypoint-shape","message":"direct scripts must remain focused command adapters","remediation":"Keep one public main(), optional private _parse_args() and _build_parser(), and move implementation into a scripts/<tool>/main/ entry.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR702","family":"roles","slug":"tooling-entrypoint-delegation","message":"direct scripts must delegate to an imported main/ entrypoint","remediation":"Import a typed entry function from a runtime or scripts/<tool>/main/ module and return its result from main().","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR703","family":"roles","slug":"tooling-entrypoint-line-count","message":"direct scripts must stay below the configured line limit","remediation":"Move command implementation into a named tooling or runtime package.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR704","family":"roles","slug":"rules-role-content","message":"tooling rules/ modules may contain only decorated rule declarations","remediation":"Keep imports and @rule functions here; move supporting implementation into _helpers/, classes/, models.py, types.py, constants.py, or exceptions.py.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR705","family":"roles","slug":"tooling-package-layout","message":"tool packages must organize implementation through explicit roles","remediation":"Use main/, _helpers/, classes/, rules/, models.py, types.py, constants.py, or exceptions.py directly beneath scripts/<tool>/.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR706","family":"roles","slug":"descriptive-rule-module-names","message":"rule module filenames must describe their policy rather than repeat one rule code","remediation":"Rename the module after the policy or rule family it implements, using a name such as conditional_test_flow.py instead of fft104.py.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFR707","family":"roles","slug":"custom-rule-test-coverage","message":"configured custom rules must have statically declared public-harness cases","remediation":"Add statically visible RuleCase construction passed to evaluate_rule for each custom rule. When FFT413 is active, parametrize with a local _test_types.py dataclass and convert it to RuleCase inside the test.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFN001","family":"naming","slug":"validator-must-not-return","message":"functions under no-return naming contracts must not return values","remediation":"Remove the meaningful return and raise on invalid input, or rename a value-producing function as a query such as is_valid or get_validation_result.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFN002","family":"naming","slug":"predicate-must-return-bool","message":"predicate names must declare an ordinary boolean result","remediation":"Return bool (or TypeGuard/TypeIs), or rename the function to describe the value it returns, such as read_status or current_status.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFN003","family":"naming","slug":"value-name-must-return-value","message":"value-producing names must not declare a no-value result","remediation":"Return the queried or converted value, or rename the function to describe its side effect, such as initialize_cache or export_json.","severity":"error","enabled_by_default":true,"execution_owner":"file"},{"code":"FFN004","family":"naming","slug":"iterator-name-must-produce-iterator","message":"iterator names must produce an iterator or generator","remediation":"Return an iterator or generator, or rename an eager collection function with a name such as collect_items.","severity":"error","enabled_by_default":true,"execution_owner":"file"}]
@@ -3,7 +3,7 @@ use std::path::Path;
3
3
 
4
4
  use crate::command::main::{check, help, init, map, memory, rule, skills};
5
5
  use crate::configuration::main::custom_rules;
6
- use crate::helpers::process;
6
+ use crate::helpers::{check_cleanup, process};
7
7
  use crate::models::CliOutput;
8
8
 
9
9
  pub fn run_cli() -> CliOutput {
@@ -23,18 +23,7 @@ fn dispatch(arguments: &[String]) -> Result<CliOutput, String> {
23
23
  env!("CARGO_PKG_VERSION")
24
24
  ))),
25
25
  "--help" | "-h" => Ok(CliOutput::success(help::help())),
26
- "check" => {
27
- if custom_rules::custom_rules_are_configured(Path::new("."))? {
28
- let exit_code = process::run_custom_check_host(&arguments[1..])?;
29
- Ok(CliOutput {
30
- stdout: String::new(),
31
- stderr: String::new(),
32
- exit_code,
33
- })
34
- } else {
35
- check::run(&arguments[1..])
36
- }
37
- }
26
+ "check" => dispatch_check(&arguments[1..]),
38
27
  "init" => init::init(&arguments[1..]),
39
28
  "map" => map::run(&arguments[1..]),
40
29
  "memory" => memory::run(&arguments[1..]),
@@ -49,3 +38,29 @@ fn dispatch(arguments: &[String]) -> Result<CliOutput, String> {
49
38
  }),
50
39
  }
51
40
  }
41
+
42
+ fn dispatch_check(arguments: &[String]) -> Result<CliOutput, String> {
43
+ let cleanup = check_cleanup::prepare(Path::new("."));
44
+ let result = if custom_rules::custom_rules_are_configured(Path::new("."))? {
45
+ let exit_code = process::run_custom_check_host(arguments)?;
46
+ Ok(CliOutput {
47
+ stdout: String::new(),
48
+ stderr: String::new(),
49
+ exit_code,
50
+ })
51
+ } else {
52
+ check::run(arguments)
53
+ };
54
+ if result
55
+ .as_ref()
56
+ .is_ok_and(|output| matches!(output.exit_code, 0 | 1))
57
+ && !arguments
58
+ .iter()
59
+ .any(|argument| matches!(argument.as_str(), "--help" | "-h"))
60
+ {
61
+ if let Some(cleanup) = cleanup {
62
+ cleanup.run();
63
+ }
64
+ }
65
+ result
66
+ }
@@ -2,7 +2,7 @@ use std::collections::HashMap;
2
2
 
3
3
  use crate::configuration::helpers::validation::{required_strings, validate_keys};
4
4
  use crate::constants::{DEFAULT_MEMORY_ARCHIVE_DAYS, DEFAULT_THRESHOLDS};
5
- use crate::models::{Config, RuleException, ThresholdOverride};
5
+ use crate::models::{Config, RuleException, RuleIgnore, ThresholdOverride};
6
6
 
7
7
  pub(crate) fn build(
8
8
  table: &toml::map::Map<String, toml::Value>,
@@ -49,6 +49,7 @@ pub(crate) fn build(
49
49
  threshold_overrides: threshold_overrides(table.get("threshold_overrides")),
50
50
  contracts,
51
51
  exceptions: exceptions(table.get("rule_exceptions")),
52
+ rule_ignores: rule_ignores(table.get("rule_ignores")),
52
53
  memory_enabled: memory_enabled(table)?,
53
54
  memory_archive_after_days: memory_archive_after_days(table)?,
54
55
  skills_name: skills_name(table)?,
@@ -225,6 +226,23 @@ fn exceptions(value: Option<&toml::Value>) -> Vec<RuleException> {
225
226
  .unwrap_or_default()
226
227
  }
227
228
 
229
+ fn rule_ignores(value: Option<&toml::Value>) -> Vec<RuleIgnore> {
230
+ value
231
+ .and_then(toml::Value::as_array)
232
+ .map(|items| {
233
+ items
234
+ .iter()
235
+ .filter_map(toml::Value::as_table)
236
+ .map(|table| RuleIgnore {
237
+ rules: strings(table.get("rules")),
238
+ paths: strings(table.get("paths")),
239
+ reason: text(table, "reason"),
240
+ })
241
+ .collect()
242
+ })
243
+ .unwrap_or_default()
244
+ }
245
+
228
246
  fn text(table: &toml::map::Map<String, toml::Value>, name: &str) -> String {
229
247
  table
230
248
  .get(name)