fensu-cli 0.4.1__tar.gz → 0.5.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 (473) hide show
  1. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/Cargo.lock +1 -1
  2. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/PKG-INFO +1 -1
  3. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/Cargo.toml +1 -1
  4. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/loading.rs +3 -1
  5. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/parsing.rs +5 -0
  6. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/validation.rs +15 -0
  7. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_evaluation.rs +21 -0
  8. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_policy.rs +1 -1
  9. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/rule.rs +75 -2
  10. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/models.rs +34 -0
  11. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/fingerprint.rs +3 -0
  12. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/mod.rs +1 -0
  13. fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/content/option_rendering.rs +83 -0
  14. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/rendering.rs +2 -0
  15. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/mod.rs +1 -0
  16. fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/context/option_validation.rs +123 -0
  17. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/selection.rs +12 -5
  18. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_policy.rs +95 -3
  19. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/test_types.rs +9 -0
  20. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.inc +63 -10
  21. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/core_rule_bindings.rs +2 -0
  22. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/constants.rs +1 -0
  23. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +26 -1
  24. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/models.rs +9 -1
  25. fensu_cli-0.5.0/crates/fensu-native/tests/rules/contracts.rs +82 -0
  26. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/helpers.rs +1 -0
  27. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/test_types.rs +9 -0
  28. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/pyproject.toml +1 -1
  29. fensu_cli-0.4.1/crates/fensu-native/tests/rules/contracts.rs +0 -21
  30. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/Cargo.toml +0 -0
  31. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/README.md +0 -0
  32. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/assets/catalogue.json +0 -0
  33. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/assets/python.gitignore +0 -0
  34. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/assets/skills_invariant.json +0 -0
  35. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/build.rs +0 -0
  36. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/constants.rs +0 -0
  37. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/map_parsing.rs +0 -0
  38. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_execution.rs +0 -0
  39. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_graph_rendering.rs +0 -0
  40. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_help.rs +0 -0
  41. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_human_rendering.rs +0 -0
  42. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_parsing.rs +0 -0
  43. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_structured_rendering.rs +0 -0
  44. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_values.rs +0 -0
  45. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/mod.rs +0 -0
  46. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/check.rs +0 -0
  47. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/help.rs +0 -0
  48. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/init.rs +0 -0
  49. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/map.rs +0 -0
  50. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/memory.rs +0 -0
  51. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
  52. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/rule.rs +0 -0
  53. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/run_cli.rs +0 -0
  54. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/skills.rs +0 -0
  55. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/mod.rs +0 -0
  56. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/models.rs +0 -0
  57. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/discovery.rs +0 -0
  58. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/exceptions.rs +0 -0
  59. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/mod.rs +0 -0
  60. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
  61. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
  62. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
  63. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
  64. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
  65. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/constants.rs +0 -0
  66. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/cache.rs +0 -0
  67. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_cleanup.rs +0 -0
  68. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_execution.rs +0 -0
  69. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_project.rs +0 -0
  70. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/init.rs +0 -0
  71. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/mod.rs +0 -0
  72. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/process.rs +0 -0
  73. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/render.rs +0 -0
  74. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/lib.rs +0 -0
  75. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/main.rs +0 -0
  76. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/constants.rs +0 -0
  77. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/cache.rs +0 -0
  78. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/decoding.rs +0 -0
  79. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/execution.rs +0 -0
  80. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/identity.rs +0 -0
  81. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/index.rs +0 -0
  82. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/mod.rs +0 -0
  83. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/project.rs +0 -0
  84. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/render.rs +0 -0
  85. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree.rs +0 -0
  86. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree_policy.inc +0 -0
  87. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
  88. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
  89. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
  90. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/models.rs +0 -0
  91. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/execution.rs +0 -0
  92. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/mod.rs +0 -0
  93. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/discovery.rs +0 -0
  94. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/sections.rs +0 -0
  95. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/build.rs +0 -0
  96. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/exceptions.rs +0 -0
  97. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/identity.rs +0 -0
  98. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/options.rs +0 -0
  99. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/filesystem.rs +0 -0
  100. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/freshness.rs +0 -0
  101. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/install.rs +0 -0
  102. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/mod.rs +0 -0
  103. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/plan.rs +0 -0
  104. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/publication.rs +0 -0
  105. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/transaction.rs +0 -0
  106. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/mod.rs +0 -0
  107. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
  108. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
  109. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
  110. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
  111. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
  112. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
  113. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/models.rs +0 -0
  114. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_cleanup.rs +0 -0
  115. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/commands.rs +0 -0
  116. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/helpers.rs +0 -0
  117. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command.rs +0 -0
  118. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
  119. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.rs +0 -0
  120. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
  121. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping.rs +0 -0
  122. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.rs +0 -0
  123. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
  124. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
  125. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills.rs +0 -0
  126. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/Cargo.toml +0 -0
  127. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/constants.rs +0 -0
  128. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/annotations.rs +0 -0
  129. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/contracts.rs +0 -0
  130. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/declarations.rs +0 -0
  131. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/functions.rs +0 -0
  132. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/harness.rs +0 -0
  133. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/hygiene.rs +0 -0
  134. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mapping.rs +0 -0
  135. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mod.rs +0 -0
  136. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/references.rs +0 -0
  137. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/rule_authoring.rs +0 -0
  138. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/state.rs +0 -0
  139. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/bindings.rs +0 -0
  140. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/mod.rs +0 -0
  141. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/model_types.rs +0 -0
  142. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/repository_bindings.rs +0 -0
  143. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/rule_authoring_bindings.rs +0 -0
  144. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/mod.rs +0 -0
  145. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
  146. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
  147. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
  148. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/models.rs +0 -0
  149. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/mod.rs +0 -0
  150. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/visitor.rs +0 -0
  151. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/category.rs +0 -0
  152. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/display.rs +0 -0
  153. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/mod.rs +0 -0
  154. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/returns.rs +0 -0
  155. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/rows.rs +0 -0
  156. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/conditionals.rs +0 -0
  157. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/mod.rs +0 -0
  158. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/mod.rs +0 -0
  159. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/rows.rs +0 -0
  160. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/calls.rs +0 -0
  161. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/dimensions.rs +0 -0
  162. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/functions.rs +0 -0
  163. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/imports.rs +0 -0
  164. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/mod.rs +0 -0
  165. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/checks.rs +0 -0
  166. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/mod.rs +0 -0
  167. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/functions.rs +0 -0
  168. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/lookups.rs +0 -0
  169. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mod.rs +0 -0
  170. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mutations.rs +0 -0
  171. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/mod.rs +0 -0
  172. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/mod.rs +0 -0
  173. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/names.rs +0 -0
  174. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/calls.rs +0 -0
  175. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/mod.rs +0 -0
  176. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/events.rs +0 -0
  177. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/mod.rs +0 -0
  178. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/test_shape.rs +0 -0
  179. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/literals.rs +0 -0
  180. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mod.rs +0 -0
  181. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mutations.rs +0 -0
  182. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/ownership.rs +0 -0
  183. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/references.rs +0 -0
  184. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/breadth.rs +0 -0
  185. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/children.rs +0 -0
  186. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/expression_children.rs +0 -0
  187. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/mod.rs +0 -0
  188. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/nodes.rs +0 -0
  189. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/spans.rs +0 -0
  190. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/statement_children.rs +0 -0
  191. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/mod.rs +0 -0
  192. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/resolution.rs +0 -0
  193. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/scopes.rs +0 -0
  194. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/mod.rs +0 -0
  195. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/text.rs +0 -0
  196. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
  197. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
  198. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
  199. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
  200. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
  201. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
  202. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
  203. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
  204. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
  205. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
  206. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
  207. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
  208. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
  209. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
  210. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
  211. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
  212. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
  213. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
  214. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
  215. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
  216. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
  217. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/constants.rs +0 -0
  218. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/classes.rs +0 -0
  219. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/expressions.rs +0 -0
  220. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/extraction.rs +0 -0
  221. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/functions.rs +0 -0
  222. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/imports.rs +0 -0
  223. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/mod.rs +0 -0
  224. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_declarations.rs +0 -0
  225. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_facts.rs +0 -0
  226. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/mod.rs +0 -0
  227. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/mod.rs +0 -0
  228. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/models.rs +0 -0
  229. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
  230. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/models.rs +0 -0
  231. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/types.rs +0 -0
  232. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/lib.rs +0 -0
  233. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/failures.rs +0 -0
  234. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/mod.rs +0 -0
  235. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
  236. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
  237. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
  238. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
  239. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
  240. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/line_index.rs +0 -0
  241. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/mod.rs +0 -0
  242. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
  243. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
  244. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
  245. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
  246. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/models.rs +0 -0
  247. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
  248. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/matching.rs +0 -0
  249. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/mod.rs +0 -0
  250. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/observation_index.rs +0 -0
  251. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_observation_index.rs +0 -0
  252. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_paths.rs +0 -0
  253. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
  254. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
  255. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
  256. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
  257. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
  258. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
  259. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/enumerate.rs +0 -0
  260. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/mapping.rs +0 -0
  261. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/rule_authoring.rs +0 -0
  262. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
  263. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts.rs +0 -0
  264. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/strict.rs +0 -0
  265. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
  266. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing.rs +0 -0
  267. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/locate.rs +0 -0
  268. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
  269. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions.rs +0 -0
  270. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/hashing.rs +0 -0
  271. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
  272. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/observations.rs +0 -0
  273. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
  274. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/walk.rs +0 -0
  275. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
  276. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/Cargo.toml +0 -0
  277. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/loading.rs +0 -0
  278. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/mod.rs +0 -0
  279. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
  280. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
  281. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
  282. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/mod.rs +0 -0
  283. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/models.rs +0 -0
  284. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/types.rs +0 -0
  285. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/constants.rs +0 -0
  286. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/errors.rs +0 -0
  287. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/archive.rs +0 -0
  288. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/mod.rs +0 -0
  289. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/mod.rs +0 -0
  290. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/database.rs +0 -0
  291. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/documents.rs +0 -0
  292. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/lists.rs +0 -0
  293. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/mod.rs +0 -0
  294. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/references.rs +0 -0
  295. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/sections.rs +0 -0
  296. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/skills.rs +0 -0
  297. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/streaming.rs +0 -0
  298. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/values.rs +0 -0
  299. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graph_loading.rs +0 -0
  300. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graphs.rs +0 -0
  301. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/mod.rs +0 -0
  302. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/overviews.rs +0 -0
  303. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/queries.rs +0 -0
  304. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/query_values.rs +0 -0
  305. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/diagnostics.rs +0 -0
  306. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/mod.rs +0 -0
  307. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_core.rs +0 -0
  308. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_markdown.rs +0 -0
  309. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_metadata.rs +0 -0
  310. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_skill_view.rs +0 -0
  311. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_views.rs +0 -0
  312. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/summaries.rs +0 -0
  313. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/synchronization.rs +0 -0
  314. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
  315. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
  316. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
  317. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
  318. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
  319. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
  320. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
  321. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
  322. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
  323. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
  324. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
  325. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
  326. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
  327. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/mod.rs +0 -0
  328. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/models.rs +0 -0
  329. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/cycles.rs +0 -0
  330. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/dependencies.rs +0 -0
  331. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/document_targets.rs +0 -0
  332. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/heading_targets.rs +0 -0
  333. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/link_resolution.rs +0 -0
  334. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/mod.rs +0 -0
  335. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
  336. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
  337. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/mod.rs +0 -0
  338. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/models.rs +0 -0
  339. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/types.rs +0 -0
  340. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/lib.rs +0 -0
  341. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/constants.rs +0 -0
  342. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/assembly.rs +0 -0
  343. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/blocks.rs +0 -0
  344. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/headings.rs +0 -0
  345. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/line_index.rs +0 -0
  346. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/links.rs +0 -0
  347. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/lists.rs +0 -0
  348. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/mod.rs +0 -0
  349. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/obsidian.rs +0 -0
  350. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/text.rs +0 -0
  351. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
  352. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
  353. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/mod.rs +0 -0
  354. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/models.rs +0 -0
  355. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/types.rs +0 -0
  356. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/constants.rs +0 -0
  357. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/bootstrap.rs +0 -0
  358. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/collisions.rs +0 -0
  359. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/discovery.rs +0 -0
  360. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/documents.rs +0 -0
  361. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/filesystem.rs +0 -0
  362. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/git_tracking.rs +0 -0
  363. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/mod.rs +0 -0
  364. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/skills.rs +0 -0
  365. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/tree.rs +0 -0
  366. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/validation.rs +0 -0
  367. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
  368. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
  369. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/mod.rs +0 -0
  370. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/mod.rs +0 -0
  371. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/models.rs +0 -0
  372. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/types.rs +0 -0
  373. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
  374. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/loading.rs +0 -0
  375. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
  376. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus.rs +0 -0
  377. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/archive.rs +0 -0
  378. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/bootstrap.rs +0 -0
  379. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/check.rs +0 -0
  380. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/dependencies.rs +0 -0
  381. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/graph_query.rs +0 -0
  382. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
  383. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/list_batches.rs +0 -0
  384. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
  385. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/overview.rs +0 -0
  386. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/performance.rs +0 -0
  387. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/query.rs +0 -0
  388. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/schema.rs +0 -0
  389. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
  390. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming.rs +0 -0
  391. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/summary.rs +0 -0
  392. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/sync.rs +0 -0
  393. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
  394. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine.rs +0 -0
  395. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/dependencies.rs +0 -0
  396. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
  397. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/resolution.rs +0 -0
  398. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
  399. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph.rs +0 -0
  400. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/code_blocks.rs +0 -0
  401. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/links.rs +0 -0
  402. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/lists.rs +0 -0
  403. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/structure.rs +0 -0
  404. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
  405. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown.rs +0 -0
  406. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/collisions.rs +0 -0
  407. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/discovery.rs +0 -0
  408. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/git_worktrees.rs +0 -0
  409. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/helpers.rs +0 -0
  410. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/symlinks.rs +0 -0
  411. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/test_types.rs +0 -0
  412. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source.rs +0 -0
  413. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/Cargo.toml +0 -0
  414. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/constants.rs +0 -0
  415. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/bindings.rs +0 -0
  416. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/database.rs +0 -0
  417. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/generation.rs +0 -0
  418. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/mod.rs +0 -0
  419. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication.rs +0 -0
  420. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication_merge.rs +0 -0
  421. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/records.rs +0 -0
  422. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/replay.rs +0 -0
  423. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema.rs +0 -0
  424. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema_values.rs +0 -0
  425. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/storage.rs +0 -0
  426. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
  427. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
  428. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
  429. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/mod.rs +0 -0
  430. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/models.rs +0 -0
  431. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
  432. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/records.rs +0 -0
  433. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/storage.rs +0 -0
  434. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
  435. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests.rs +0 -0
  436. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/types.rs +0 -0
  437. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/constants.rs +0 -0
  438. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/execution_planning.rs +0 -0
  439. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_bindings.rs +0 -0
  440. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_conversion.rs +0 -0
  441. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_registration.rs +0 -0
  442. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/mod.rs +0 -0
  443. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
  444. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
  445. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/mod.rs +0 -0
  446. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/lib.rs +0 -0
  447. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/annotations/annotations.rs +0 -0
  448. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/hygiene/hygiene.rs +0 -0
  449. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/layers.rs +0 -0
  450. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/local.rs +0 -0
  451. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/project.rs +0 -0
  452. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/mod.rs +0 -0
  453. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming/naming.rs +0 -0
  454. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming_globs/naming_globs.rs +0 -0
  455. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/project_queries/project_queries.rs +0 -0
  456. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/declarations.rs +0 -0
  457. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/paths.rs +0 -0
  458. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout.rs +0 -0
  459. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_paths.rs +0 -0
  460. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_queries.rs +0 -0
  461. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/roles.rs +0 -0
  462. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/surfaces.rs +0 -0
  463. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/shape/shape.rs +0 -0
  464. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/layout.rs +0 -0
  465. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/names.rs +0 -0
  466. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/tests.rs +0 -0
  467. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
  468. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
  469. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/mod.rs +0 -0
  470. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/memory_conversion.rs +0 -0
  471. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/test_types.rs +0 -0
  472. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
  473. {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules.rs +0 -0
@@ -392,7 +392,7 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
392
392
 
393
393
  [[package]]
394
394
  name = "fensu-cli"
395
- version = "0.4.1"
395
+ version = "0.5.0"
396
396
  dependencies = [
397
397
  "cap-fs-ext",
398
398
  "cap-std",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fensu-cli
3
- Version: 0.4.1
3
+ Version: 0.5.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.4.1" # x-release-please-version
3
+ version = "0.5.0" # x-release-please-version
4
4
  edition.workspace = true
5
5
  license.workspace = true
6
6
  publish = false
@@ -38,5 +38,7 @@ pub(crate) fn load_optional(start: &Path) -> Result<Option<(PathBuf, Config)>, S
38
38
 
39
39
  pub(crate) fn custom_rules_are_configured(start: &Path) -> Result<bool, String> {
40
40
  let (_, config) = load(start)?;
41
- Ok(!config.rule_paths.is_empty() || !config.rule_modules.is_empty())
41
+ Ok(!config.rule_paths.is_empty()
42
+ || !config.rule_modules.is_empty()
43
+ || !config.rule_options.is_empty())
42
44
  }
@@ -30,6 +30,11 @@ pub(crate) fn build(
30
30
  ignore: strings(table.get("ignore")),
31
31
  rule_paths: strings(table.get("rule_paths")),
32
32
  rule_modules: strings(table.get("rule_modules")),
33
+ rule_options: table
34
+ .get("rule_options")
35
+ .and_then(toml::Value::as_table)
36
+ .cloned()
37
+ .unwrap_or_default(),
33
38
  cache_enabled: cache
34
39
  .and_then(|values| values.get("enabled"))
35
40
  .and_then(toml::Value::as_bool)
@@ -19,6 +19,7 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
19
19
  "ignore",
20
20
  "rule_paths",
21
21
  "rule_modules",
22
+ "rule_options",
22
23
  "thresholds",
23
24
  "roles",
24
25
  "contracts",
@@ -37,6 +38,7 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
37
38
  validate_optional_table(table, "cache", &["enabled", "require_cacheable"])?;
38
39
  validate_optional_table(table, "evaluation", &["include", "exclude"])?;
39
40
  validate_optional_table(table, "skills", &["name"])?;
41
+ validate_rule_options(table.get("rule_options"))?;
40
42
  for name in [
41
43
  "tests",
42
44
  "tooling",
@@ -63,6 +65,19 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
63
65
  Ok(())
64
66
  }
65
67
 
68
+ fn validate_rule_options(value: Option<&toml::Value>) -> Result<(), String> {
69
+ let Some(value) = value else {
70
+ return Ok(());
71
+ };
72
+ let rules = value
73
+ .as_table()
74
+ .ok_or_else(|| "Config key rule_options must be a table.".to_owned())?;
75
+ if rules.values().any(|options| !options.is_table()) {
76
+ return Err("Config key rule_options must contain rule-code tables.".to_owned());
77
+ }
78
+ Ok(())
79
+ }
80
+
66
81
  fn validate_nested_roots(roots: Vec<String>) -> Result<(), String> {
67
82
  for (index, first) in roots.iter().enumerate() {
68
83
  let first = first.split('/').collect::<Vec<_>>();
@@ -78,6 +78,7 @@ pub(crate) fn evaluate_and_render(
78
78
  observations: HashMap::new(),
79
79
  custom_registrations: Vec::new(),
80
80
  repo_root: root.to_string_lossy().into_owned(),
81
+ rule_options: native_rule_options(codes)?,
81
82
  };
82
83
  let plans = plan_core_rule_queries(program(source), codes, &context);
83
84
  context.observations = observe(root, &plans, &program_by_path, &program_by_module);
@@ -156,6 +157,26 @@ pub(crate) fn evaluate_and_render(
156
157
  Ok((output, i32::from(!blocking_faults.is_empty())))
157
158
  }
158
159
 
160
+ fn native_rule_options(
161
+ codes: &[String],
162
+ ) -> Result<HashMap<String, HashMap<String, String>>, String> {
163
+ let mut by_code = HashMap::new();
164
+ for code in codes {
165
+ let rule = rule::rule(code).ok_or_else(|| format!("Unknown native rule code: {code}"))?;
166
+ let mut values = HashMap::new();
167
+ for option in &rule.options {
168
+ values.insert(
169
+ option.name.clone(),
170
+ serde_json::to_string(&option.current_value).map_err(|error| error.to_string())?,
171
+ );
172
+ }
173
+ if !values.is_empty() {
174
+ by_code.insert(rule.code.clone(), values);
175
+ }
176
+ }
177
+ Ok(by_code)
178
+ }
179
+
159
180
  pub(crate) fn selected_rules(select: &[String], ignore: &[String]) -> Vec<&'static RuleMetadata> {
160
181
  rule::catalogue()
161
182
  .iter()
@@ -270,7 +270,7 @@ pub(crate) fn check_identity(
270
270
  warnings: bool,
271
271
  ) -> String {
272
272
  let mut digest = Sha256::new();
273
- digest.update(b"fensu-native-check-v2\0");
273
+ digest.update(b"fensu-native-check-v3\0");
274
274
  digest.update(env!("CARGO_PKG_VERSION").as_bytes());
275
275
  digest.update(&config.raw);
276
276
  digest.update([u8::from(warnings)]);
@@ -5,7 +5,7 @@ use std::sync::OnceLock;
5
5
 
6
6
  use crate::configuration::main::load;
7
7
  use crate::constants::{COLOR_ALWAYS, COLOR_AUTO, COLOR_NEVER, OPTION_COLOR};
8
- use crate::models::{Config, RuleMetadata};
8
+ use crate::models::{Config, RuleMetadata, RuleOptionMetadata, RuleOptionValue};
9
9
  use crate::skills::main::catalogue::load_rule_catalogue;
10
10
 
11
11
  static CATALOGUE: OnceLock<Vec<RuleMetadata>> = OnceLock::new();
@@ -24,7 +24,10 @@ pub(crate) fn rule_output(arguments: &[String]) -> Result<String, String> {
24
24
  let project_root = config_path
25
25
  .parent()
26
26
  .ok_or_else(|| "Configuration has no parent directory.".to_owned())?;
27
- let catalogue = if loaded.rule_paths.is_empty() && loaded.rule_modules.is_empty() {
27
+ let catalogue = if loaded.rule_paths.is_empty()
28
+ && loaded.rule_modules.is_empty()
29
+ && loaded.rule_options.is_empty()
30
+ {
28
31
  catalogue().to_vec()
29
32
  } else {
30
33
  load_rule_catalogue(&loaded, project_root)?
@@ -91,11 +94,81 @@ fn render(metadata: &RuleMetadata, config: &Config, color: bool) -> String {
91
94
  };
92
95
  let mut output = format!("{header}\n");
93
96
  render_metadata(&mut output, metadata, color);
97
+ render_options(&mut output, metadata);
94
98
  render_exceptions(&mut output, metadata, config);
95
99
  render_rule_ignores(&mut output, metadata, config);
96
100
  output
97
101
  }
98
102
 
103
+ fn render_options(output: &mut String, metadata: &RuleMetadata) {
104
+ if metadata.options.is_empty() {
105
+ return;
106
+ }
107
+ let mut options = metadata.options.iter().collect::<Vec<_>>();
108
+ options.sort_by(|left, right| left.name.cmp(&right.name));
109
+ output.push_str("\nOptions:\n");
110
+ for option in options {
111
+ output.push_str(&format!(" {}\n", option.name));
112
+ for (label, value) in option_lines(option) {
113
+ output.push_str(&format!(" {label}: {value}\n"));
114
+ }
115
+ }
116
+ }
117
+
118
+ fn option_lines(option: &RuleOptionMetadata) -> [(&'static str, String); 9] {
119
+ [
120
+ ("Type", option_type(&option.kind).to_owned()),
121
+ ("Required", option.required.to_string()),
122
+ (
123
+ "Default",
124
+ if option.required {
125
+ "required".to_owned()
126
+ } else {
127
+ option_value(option.default.as_ref())
128
+ },
129
+ ),
130
+ ("Current value", option_value(Some(&option.current_value))),
131
+ (
132
+ "Description",
133
+ option
134
+ .description
135
+ .clone()
136
+ .unwrap_or_else(|| "None".to_owned()),
137
+ ),
138
+ (
139
+ "Choices",
140
+ serde_json::to_string(&option.choices).unwrap_or_else(|_| "null".to_owned()),
141
+ ),
142
+ ("Minimum", optional_number(option.minimum)),
143
+ ("Maximum", optional_number(option.maximum)),
144
+ (
145
+ "Minimum items",
146
+ option
147
+ .minimum_items
148
+ .map_or_else(|| "None".to_owned(), |value| value.to_string()),
149
+ ),
150
+ ]
151
+ }
152
+
153
+ fn option_type(kind: &str) -> &str {
154
+ match kind {
155
+ "string_list" => "list[string]",
156
+ "integer_list" => "list[integer]",
157
+ other => other,
158
+ }
159
+ }
160
+
161
+ fn option_value(value: Option<&RuleOptionValue>) -> String {
162
+ value.map_or_else(
163
+ || "None".to_owned(),
164
+ |value| serde_json::to_string(value).unwrap_or_else(|_| "null".to_owned()),
165
+ )
166
+ }
167
+
168
+ fn optional_number(value: Option<i64>) -> String {
169
+ value.map_or_else(|| "None".to_owned(), |value| value.to_string())
170
+ }
171
+
99
172
  fn render_metadata(output: &mut String, metadata: &RuleMetadata, color: bool) {
100
173
  let enabled = if metadata.enabled_by_default {
101
174
  "yes"
@@ -57,6 +57,39 @@ pub(crate) struct RuleMetadata {
57
57
  pub(crate) source: Option<String>,
58
58
  #[serde(default = "crate::helpers::rule::cacheable_default")]
59
59
  pub(crate) cacheable: bool,
60
+ #[serde(default)]
61
+ pub(crate) options: Vec<RuleOptionMetadata>,
62
+ }
63
+
64
+ #[derive(Clone, Debug, Deserialize, Serialize)]
65
+ #[serde(deny_unknown_fields)]
66
+ pub(crate) struct RuleOptionMetadata {
67
+ pub(crate) name: String,
68
+ pub(crate) kind: String,
69
+ pub(crate) required: bool,
70
+ pub(crate) default: Option<RuleOptionValue>,
71
+ pub(crate) current_value: RuleOptionValue,
72
+ pub(crate) description: Option<String>,
73
+ pub(crate) choices: Option<Vec<String>>,
74
+ pub(crate) minimum: Option<i64>,
75
+ pub(crate) maximum: Option<i64>,
76
+ pub(crate) minimum_items: Option<usize>,
77
+ }
78
+
79
+ #[derive(Clone, Debug, Deserialize, Serialize)]
80
+ #[serde(untagged)]
81
+ pub(crate) enum RuleOptionValue {
82
+ Boolean(bool),
83
+ Integer(i64),
84
+ String(String),
85
+ List(Vec<RuleOptionListValue>),
86
+ }
87
+
88
+ #[derive(Clone, Debug, Deserialize, Serialize)]
89
+ #[serde(untagged)]
90
+ pub(crate) enum RuleOptionListValue {
91
+ Integer(i64),
92
+ String(String),
60
93
  }
61
94
 
62
95
  #[derive(Clone, Debug, Default)]
@@ -69,6 +102,7 @@ pub(crate) struct Config {
69
102
  pub(crate) ignore: Vec<String>,
70
103
  pub(crate) rule_paths: Vec<String>,
71
104
  pub(crate) rule_modules: Vec<String>,
105
+ pub(crate) rule_options: toml::map::Map<String, toml::Value>,
72
106
  pub(crate) cache_enabled: bool,
73
107
  pub(crate) cache_require_cacheable: bool,
74
108
  pub(crate) evaluation_include: Vec<String>,
@@ -274,6 +274,8 @@ fn rules_value(rules: &[RuleMetadata]) -> Value {
274
274
  sorted
275
275
  .into_iter()
276
276
  .map(|rule| {
277
+ let mut options = rule.options.iter().collect::<Vec<_>>();
278
+ options.sort_by(|left, right| left.name.cmp(&right.name));
277
279
  json!({
278
280
  "code": rule.code,
279
281
  "family": rule.family,
@@ -286,6 +288,7 @@ fn rules_value(rules: &[RuleMetadata]) -> Value {
286
288
  "enabled_by_default": rule.enabled_by_default,
287
289
  "cacheable": rule.cacheable,
288
290
  "execution_owner": rule.execution_owner,
291
+ "options": options,
289
292
  })
290
293
  })
291
294
  .collect(),
@@ -1,4 +1,5 @@
1
1
  pub(crate) mod discovery;
2
2
  pub(crate) mod fingerprint;
3
+ pub(crate) mod option_rendering;
3
4
  pub(crate) mod rendering;
4
5
  pub(crate) mod sections;
@@ -0,0 +1,83 @@
1
+ use serde_json::json;
2
+
3
+ use crate::models::{RuleMetadata, RuleOptionMetadata, RuleOptionValue};
4
+ use crate::skills::helpers::content::sections::py_json;
5
+
6
+ pub(crate) fn rule_option_lines(rule: &RuleMetadata) -> Vec<String> {
7
+ if rule.options.is_empty() {
8
+ return Vec::new();
9
+ }
10
+ let mut options = rule.options.iter().collect::<Vec<_>>();
11
+ options.sort_by(|left, right| left.name.cmp(&right.name));
12
+ let mut lines = vec!["Options:".to_owned(), String::new()];
13
+ for option in options {
14
+ lines.push(format!("#### `{}`", option.name));
15
+ lines.push(String::new());
16
+ lines.extend(skill_option_fields(option));
17
+ lines.push(String::new());
18
+ }
19
+ lines
20
+ }
21
+
22
+ fn skill_option_fields(option: &RuleOptionMetadata) -> Vec<String> {
23
+ vec![
24
+ format!("- Type: `{}`", skill_option_type(&option.kind)),
25
+ format!("- Required: `{}`", option.required),
26
+ format!(
27
+ "- Default: {}",
28
+ if option.required {
29
+ "required".to_owned()
30
+ } else {
31
+ skill_option_value(option.default.as_ref())
32
+ }
33
+ ),
34
+ format!(
35
+ "- Current value: {}",
36
+ skill_option_value(Some(&option.current_value))
37
+ ),
38
+ format!(
39
+ "- Description: {}",
40
+ option.description.as_deref().unwrap_or("None")
41
+ ),
42
+ format!(
43
+ "- Choices: {}",
44
+ option.choices.as_ref().map_or_else(
45
+ || "None".to_owned(),
46
+ |value| py_json(&json!(value)).unwrap_or_else(|_| "None".to_owned())
47
+ )
48
+ ),
49
+ format!(
50
+ "- Minimum: {}",
51
+ option
52
+ .minimum
53
+ .map_or_else(|| "None".to_owned(), |value| value.to_string())
54
+ ),
55
+ format!(
56
+ "- Maximum: {}",
57
+ option
58
+ .maximum
59
+ .map_or_else(|| "None".to_owned(), |value| value.to_string())
60
+ ),
61
+ format!(
62
+ "- Minimum items: {}",
63
+ option
64
+ .minimum_items
65
+ .map_or_else(|| "None".to_owned(), |value| value.to_string())
66
+ ),
67
+ ]
68
+ }
69
+
70
+ fn skill_option_type(kind: &str) -> &str {
71
+ match kind {
72
+ "string_list" => "list[string]",
73
+ "integer_list" => "list[integer]",
74
+ other => other,
75
+ }
76
+ }
77
+
78
+ fn skill_option_value(value: Option<&RuleOptionValue>) -> String {
79
+ value.map_or_else(
80
+ || "None".to_owned(),
81
+ |value| py_json(&json!(value)).unwrap_or_else(|_| "None".to_owned()),
82
+ )
83
+ }
@@ -5,6 +5,7 @@ use std::sync::OnceLock;
5
5
  use serde_json::{json, Value};
6
6
 
7
7
  use crate::models::RuleMetadata;
8
+ use crate::skills::helpers::content::option_rendering::rule_option_lines;
8
9
  use crate::skills::helpers::content::sections::{
9
10
  display_project_path, effective_config_lines, expand_repository_profile, governed_path, py_json,
10
11
  };
@@ -327,6 +328,7 @@ fn tier_lines(heading: &str, rules: &[RuleMetadata]) -> Vec<String> {
327
328
  ),
328
329
  String::new(),
329
330
  ]);
331
+ lines.extend(rule_option_lines(rule));
330
332
  }
331
333
  lines
332
334
  }
@@ -1,5 +1,6 @@
1
1
  pub(crate) mod build;
2
2
  pub(crate) mod exceptions;
3
3
  pub(crate) mod identity;
4
+ pub(crate) mod option_validation;
4
5
  pub(crate) mod options;
5
6
  pub(crate) mod selection;
@@ -0,0 +1,123 @@
1
+ use std::collections::HashSet;
2
+
3
+ use crate::models::{RuleMetadata, RuleOptionListValue, RuleOptionMetadata, RuleOptionValue};
4
+
5
+ const INTEGER_KIND: &str = "integer";
6
+ const INTEGER_LIST_KIND: &str = "integer_list";
7
+ const STRING_KIND: &str = "string";
8
+ const STRING_LIST_KIND: &str = "string_list";
9
+
10
+ pub(crate) fn validate_rule_options(rule: &RuleMetadata) -> Result<(), String> {
11
+ let mut names = HashSet::new();
12
+ for option in &rule.options {
13
+ if !valid_option_name(&option.name)
14
+ || !names.insert(option.name.as_str())
15
+ || option.required == option.default.is_some()
16
+ || !option_value_matches_kind(&option.current_value, &option.kind)
17
+ || option
18
+ .default
19
+ .as_ref()
20
+ .is_some_and(|value| !option_value_matches_kind(value, &option.kind))
21
+ || option
22
+ .description
23
+ .as_deref()
24
+ .is_some_and(|description| description.trim().is_empty())
25
+ || !valid_option_constraints(option)
26
+ {
27
+ return Err(format!(
28
+ "Catalogue rule {} option {} contains incompatible metadata.",
29
+ rule.code, option.name
30
+ ));
31
+ }
32
+ }
33
+ Ok(())
34
+ }
35
+
36
+ fn valid_option_name(name: &str) -> bool {
37
+ !name.is_empty()
38
+ && name.split('_').all(|part| {
39
+ !part.is_empty()
40
+ && part.as_bytes()[0].is_ascii_lowercase()
41
+ && part
42
+ .as_bytes()
43
+ .iter()
44
+ .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit())
45
+ })
46
+ }
47
+
48
+ fn option_value_matches_kind(value: &RuleOptionValue, kind: &str) -> bool {
49
+ match (kind, value) {
50
+ ("boolean", RuleOptionValue::Boolean(_))
51
+ | (INTEGER_KIND, RuleOptionValue::Integer(_))
52
+ | (STRING_KIND, RuleOptionValue::String(_)) => true,
53
+ (STRING_LIST_KIND, RuleOptionValue::List(values)) => values
54
+ .iter()
55
+ .all(|value| matches!(value, RuleOptionListValue::String(_))),
56
+ (INTEGER_LIST_KIND, RuleOptionValue::List(values)) => values
57
+ .iter()
58
+ .all(|value| matches!(value, RuleOptionListValue::Integer(_))),
59
+ _ => false,
60
+ }
61
+ }
62
+
63
+ fn valid_option_constraints(option: &RuleOptionMetadata) -> bool {
64
+ let choices_valid = match (&option.kind[..], &option.choices) {
65
+ (STRING_KIND, Some(choices)) => {
66
+ !choices.is_empty()
67
+ && choices.iter().collect::<HashSet<_>>().len() == choices.len()
68
+ && option_values_in_choices(option, choices)
69
+ }
70
+ (STRING_KIND, None) => true,
71
+ (_, None) => true,
72
+ (_, Some(_)) => false,
73
+ };
74
+ let integer_bounds_valid = if option.kind == INTEGER_KIND {
75
+ option
76
+ .minimum
77
+ .zip(option.maximum)
78
+ .is_none_or(|(min, max)| min <= max)
79
+ && option_values_in_bounds(option)
80
+ } else {
81
+ option.minimum.is_none() && option.maximum.is_none()
82
+ };
83
+ let minimum_items_valid =
84
+ if matches!(option.kind.as_str(), STRING_LIST_KIND | INTEGER_LIST_KIND) {
85
+ option
86
+ .minimum_items
87
+ .is_none_or(|minimum| option_values_have_minimum_items(option, minimum))
88
+ } else {
89
+ option.minimum_items.is_none()
90
+ };
91
+ choices_valid && integer_bounds_valid && minimum_items_valid
92
+ }
93
+
94
+ fn option_values_in_choices(option: &RuleOptionMetadata, choices: &[String]) -> bool {
95
+ [
96
+ &option.current_value,
97
+ option.default.as_ref().unwrap_or(&option.current_value),
98
+ ]
99
+ .into_iter()
100
+ .all(|value| matches!(value, RuleOptionValue::String(value) if choices.contains(value)))
101
+ }
102
+
103
+ fn option_values_in_bounds(option: &RuleOptionMetadata) -> bool {
104
+ [
105
+ &option.current_value,
106
+ option.default.as_ref().unwrap_or(&option.current_value),
107
+ ]
108
+ .into_iter()
109
+ .all(|value| {
110
+ matches!(value, RuleOptionValue::Integer(value)
111
+ if option.minimum.is_none_or(|minimum| *value >= minimum)
112
+ && option.maximum.is_none_or(|maximum| *value <= maximum))
113
+ })
114
+ }
115
+
116
+ fn option_values_have_minimum_items(option: &RuleOptionMetadata, minimum: usize) -> bool {
117
+ [
118
+ &option.current_value,
119
+ option.default.as_ref().unwrap_or(&option.current_value),
120
+ ]
121
+ .into_iter()
122
+ .all(|value| matches!(value, RuleOptionValue::List(values) if values.len() >= minimum))
123
+ }
@@ -5,6 +5,7 @@ use serde_json::json;
5
5
 
6
6
  use crate::helpers::{process, rule};
7
7
  use crate::models::{Config, RuleMetadata};
8
+ use crate::skills::helpers::context::option_validation::validate_rule_options;
8
9
  use crate::skills::models::{HostResponse, RuleSelection};
9
10
 
10
11
  const CORE_KIND: &str = "core";
@@ -13,6 +14,7 @@ const CORE_RULE_CODE_LENGTH: usize = 6;
13
14
  const CUSTOM_KIND: &str = "custom";
14
15
  const CUSTOM_PREFIX: char = 'X';
15
16
  const MAX_CORE_SELECTOR_SUFFIX: usize = 4;
17
+ const METADATA_PROTOCOL: u32 = 2;
16
18
 
17
19
  pub(crate) fn validate_config_policy(config: &Config) -> Result<(), String> {
18
20
  for (name, selectors) in [
@@ -32,7 +34,10 @@ pub(crate) fn validate_config_policy(config: &Config) -> Result<(), String> {
32
34
  }
33
35
 
34
36
  pub(crate) fn selection(config: &Config, project_root: &Path) -> Result<RuleSelection, String> {
35
- if !config.rule_paths.is_empty() || !config.rule_modules.is_empty() {
37
+ if !config.rule_paths.is_empty()
38
+ || !config.rule_modules.is_empty()
39
+ || !config.rule_options.is_empty()
40
+ {
36
41
  return hosted_selection(project_root);
37
42
  }
38
43
  let catalogue = rule::catalogue().to_vec();
@@ -57,7 +62,7 @@ pub(crate) fn selection(config: &Config, project_root: &Path) -> Result<RuleSele
57
62
 
58
63
  fn hosted_selection(project_root: &Path) -> Result<RuleSelection, String> {
59
64
  let request = serde_json::to_vec(&json!({
60
- "protocol": 1,
65
+ "protocol": METADATA_PROTOCOL,
61
66
  "project_root": project_root.to_string_lossy(),
62
67
  }))
63
68
  .map_err(|error| error.to_string())?;
@@ -65,10 +70,10 @@ fn hosted_selection(project_root: &Path) -> Result<RuleSelection, String> {
65
70
  validate_host_shape(&raw)?;
66
71
  let response: HostResponse = serde_json::from_slice(&raw)
67
72
  .map_err(|error| format!("Invalid custom-rule metadata host response: {error}"))?;
68
- if response.protocol != 1 {
73
+ if response.protocol != METADATA_PROTOCOL {
69
74
  return Err(format!(
70
- "Incompatible custom-rule metadata protocol {}; expected 1.",
71
- response.protocol
75
+ "Incompatible custom-rule metadata protocol {}; expected {}.",
76
+ response.protocol, METADATA_PROTOCOL
72
77
  ));
73
78
  }
74
79
  if response.package_version != env!("CARGO_PKG_VERSION") {
@@ -115,6 +120,7 @@ fn validate_host_shape(raw: &[u8]) -> Result<(), String> {
115
120
  "kind",
116
121
  "source",
117
122
  "cacheable",
123
+ "options",
118
124
  ]);
119
125
  for rule in catalogue {
120
126
  let fields = rule
@@ -174,6 +180,7 @@ fn validate_host_catalogue(catalogue: &[RuleMetadata]) -> Result<(), String> {
174
180
  item.code
175
181
  ));
176
182
  }
183
+ validate_rule_options(item)?;
177
184
  }
178
185
  Ok(())
179
186
  }