fensu-cli 0.9.2__tar.gz → 0.9.4__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 (579) hide show
  1. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/Cargo.lock +1 -1
  2. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/PKG-INFO +1 -1
  3. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/Cargo.toml +1 -1
  4. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/mod.rs +1 -0
  5. fensu_cli-0.9.4/crates/fensu-cli/src/catalogue/main/validate_config_selectors.rs +37 -0
  6. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/evaluation.rs +32 -121
  7. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/rule_policy.rs +3 -0
  8. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/constants.rs +0 -2
  9. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/selection.rs +4 -1
  10. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_policy.rs +41 -0
  11. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_validation.rs +24 -0
  12. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/commands.inc +33 -3
  13. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/test_types.rs +6 -0
  14. fensu_cli-0.9.4/crates/fensu-native/src/extension/_helpers/evaluation/execution_planning.rs +113 -0
  15. fensu_cli-0.9.4/crates/fensu-native/src/extension/constants.rs +3 -0
  16. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/assets.rs +60 -13
  17. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/autoload.rs +5 -5
  18. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/boundaries.rs +4 -2
  19. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/dagster.rs +63 -6
  20. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/definitions.rs +40 -7
  21. fensu_cli-0.9.4/crates/fensu-native/src/rules/_helpers/execution_planning/execution_planning.rs +159 -0
  22. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/mod.rs +2 -0
  23. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/mod.rs +1 -0
  24. fensu_cli-0.9.4/crates/fensu-native/src/rules/main/plan_execution_owners.rs +11 -0
  25. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/models.rs +32 -0
  26. fensu_cli-0.9.4/crates/fensu-native/tests/rules/test_contracts.rs +214 -0
  27. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/test_types.rs +14 -0
  28. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/pyproject.toml +1 -1
  29. fensu_cli-0.9.2/crates/fensu-native/src/extension/_helpers/evaluation/execution_planning.rs +0 -195
  30. fensu_cli-0.9.2/crates/fensu-native/src/extension/constants.rs +0 -8
  31. fensu_cli-0.9.2/crates/fensu-native/tests/rules/test_contracts.rs +0 -102
  32. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/Cargo.toml +0 -0
  33. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/README.md +0 -0
  34. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/assets/catalogue.json +0 -0
  35. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/assets/python.gitignore +0 -0
  36. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/assets/skills_invariant.json +0 -0
  37. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/build.rs +0 -0
  38. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/arguments.rs +0 -0
  39. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/loading.rs +0 -0
  40. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/mod.rs +0 -0
  41. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/options.rs +0 -0
  42. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/policy.rs +0 -0
  43. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/rendering.rs +0 -0
  44. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/rule_catalogue.rs +0 -0
  45. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/rule_metadata.rs +0 -0
  46. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/rule_output.rs +0 -0
  47. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/mod.rs +0 -0
  48. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/models.rs +0 -0
  49. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/cache.rs +0 -0
  50. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/cleanup.rs +0 -0
  51. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/exceptions.rs +0 -0
  52. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/execution.rs +0 -0
  53. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/mod.rs +0 -0
  54. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/options.rs +0 -0
  55. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/policy.rs +0 -0
  56. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/preparation.rs +0 -0
  57. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/project.rs +0 -0
  58. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/constants.rs +0 -0
  59. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/clean_caches.rs +0 -0
  60. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/execute_check.rs +0 -0
  61. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/mod.rs +0 -0
  62. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/prepare_cleanup.rs +0 -0
  63. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/python_version.rs +0 -0
  64. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/required_thresholds.rs +0 -0
  65. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/mod.rs +0 -0
  66. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/models.rs +0 -0
  67. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/map/mod.rs +0 -0
  68. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/map/parsing.rs +0 -0
  69. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/execution.rs +0 -0
  70. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/graph_rendering.rs +0 -0
  71. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/help.rs +0 -0
  72. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/human_rendering.rs +0 -0
  73. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/mod.rs +0 -0
  74. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/parsing.rs +0 -0
  75. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/structured_rendering.rs +0 -0
  76. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/values.rs +0 -0
  77. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/mod.rs +0 -0
  78. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/constants.rs +0 -0
  79. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/check.rs +0 -0
  80. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/execute_cli.rs +0 -0
  81. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/help.rs +0 -0
  82. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/init.rs +0 -0
  83. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/map.rs +0 -0
  84. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/memory.rs +0 -0
  85. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/mod.rs +0 -0
  86. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/rule.rs +0 -0
  87. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/run_cli.rs +0 -0
  88. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/skills.rs +0 -0
  89. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/mod.rs +0 -0
  90. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/models.rs +0 -0
  91. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/discovery.rs +0 -0
  92. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/exception_targets.rs +0 -0
  93. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/exceptions.rs +0 -0
  94. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/loading.rs +0 -0
  95. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/mod.rs +0 -0
  96. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/native_rules.rs +0 -0
  97. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/parsing.rs +0 -0
  98. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/roots.rs +0 -0
  99. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/scopes.rs +0 -0
  100. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/selectors.rs +0 -0
  101. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/validation.rs +0 -0
  102. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/constants.rs +0 -0
  103. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
  104. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/is_rule_code.rs +0 -0
  105. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/is_rule_selector.rs +0 -0
  106. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
  107. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
  108. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
  109. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/validate_document.rs +0 -0
  110. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/validate_exception_targets.rs +0 -0
  111. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/mod.rs +0 -0
  112. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/authoring.rs +0 -0
  113. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/interpreter.rs +0 -0
  114. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/metadata_exchange.rs +0 -0
  115. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/mod.rs +0 -0
  116. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/main/mod.rs +0 -0
  117. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/main/run_custom_check_host.rs +0 -0
  118. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/main/run_skills_metadata_host.rs +0 -0
  119. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/mod.rs +0 -0
  120. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/arguments.rs +0 -0
  121. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/discovery.rs +0 -0
  122. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/layout.rs +0 -0
  123. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/mod.rs +0 -0
  124. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/packages.rs +0 -0
  125. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/reporting.rs +0 -0
  126. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/validation.rs +0 -0
  127. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/writing.rs +0 -0
  128. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/constants.rs +0 -0
  129. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/main/mod.rs +0 -0
  130. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/main/run_init.rs +0 -0
  131. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/mod.rs +0 -0
  132. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/models.rs +0 -0
  133. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/lib.rs +0 -0
  134. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/main.rs +0 -0
  135. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/cache.rs +0 -0
  136. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/decoding.rs +0 -0
  137. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/execution.rs +0 -0
  138. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/identity.rs +0 -0
  139. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/index.rs +0 -0
  140. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/mod.rs +0 -0
  141. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/project.rs +0 -0
  142. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/render.rs +0 -0
  143. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/tree.rs +0 -0
  144. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/tree_policy.inc +0 -0
  145. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/constants.rs +0 -0
  146. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
  147. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
  148. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/mod.rs +0 -0
  149. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/models.rs +0 -0
  150. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/models.rs +0 -0
  151. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/_helpers/faults.rs +0 -0
  152. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/_helpers/mod.rs +0 -0
  153. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/_helpers/text.rs +0 -0
  154. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/constants.rs +0 -0
  155. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/main/mod.rs +0 -0
  156. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/main/report.rs +0 -0
  157. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/mod.rs +0 -0
  158. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/models.rs +0 -0
  159. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/command/execution.rs +0 -0
  160. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/command/mod.rs +0 -0
  161. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/discovery.rs +0 -0
  162. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/fingerprint.rs +0 -0
  163. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/mod.rs +0 -0
  164. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/option_rendering.rs +0 -0
  165. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/rendering.rs +0 -0
  166. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/rule_rendering.rs +0 -0
  167. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/sections.rs +0 -0
  168. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/build.rs +0 -0
  169. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/exceptions.rs +0 -0
  170. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/identity.rs +0 -0
  171. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/mod.rs +0 -0
  172. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/option_validation.rs +0 -0
  173. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/options.rs +0 -0
  174. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/filesystem.rs +0 -0
  175. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/freshness.rs +0 -0
  176. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/install.rs +0 -0
  177. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/mod.rs +0 -0
  178. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/plan.rs +0 -0
  179. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/publication.rs +0 -0
  180. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/transaction.rs +0 -0
  181. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/mod.rs +0 -0
  182. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
  183. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
  184. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
  185. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
  186. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
  187. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/mod.rs +0 -0
  188. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/models.rs +0 -0
  189. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_policy.rs +0 -0
  190. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_render.rs +0 -0
  191. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_rule_catalogue.rs +0 -0
  192. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_types.rs +0 -0
  193. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests.rs +0 -0
  194. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/helpers.rs +0 -0
  195. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_cleanup.rs +0 -0
  196. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_exceptions.rs +0 -0
  197. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_commands.rs +0 -0
  198. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_rule.rs +0 -0
  199. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_types.rs +0 -0
  200. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command.rs +0 -0
  201. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
  202. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
  203. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/test_commands.rs +0 -0
  204. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/test_types.rs +0 -0
  205. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping.rs +0 -0
  206. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
  207. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/test_commands.rs +0 -0
  208. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills.rs +0 -0
  209. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/Cargo.toml +0 -0
  210. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/constants.rs +0 -0
  211. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/annotations.rs +0 -0
  212. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/contracts.rs +0 -0
  213. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/declarations.rs +0 -0
  214. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/functions.rs +0 -0
  215. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/harness.rs +0 -0
  216. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/hygiene.rs +0 -0
  217. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/mapping.rs +0 -0
  218. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/mod.rs +0 -0
  219. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/references.rs +0 -0
  220. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/rule_authoring.rs +0 -0
  221. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/state.rs +0 -0
  222. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/bindings.rs +0 -0
  223. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/mod.rs +0 -0
  224. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/model_types.rs +0 -0
  225. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/repository_bindings.rs +0 -0
  226. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/rule_authoring_bindings.rs +0 -0
  227. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/mod.rs +0 -0
  228. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/queries/owner_symbols.rs +0 -0
  229. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
  230. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
  231. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/mod.rs +0 -0
  232. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/models.rs +0 -0
  233. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/annotations/mod.rs +0 -0
  234. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/annotations/visitor.rs +0 -0
  235. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/category.rs +0 -0
  236. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/display.rs +0 -0
  237. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/mod.rs +0 -0
  238. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/returns.rs +0 -0
  239. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/rows.rs +0 -0
  240. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/control/conditionals.rs +0 -0
  241. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/control/mod.rs +0 -0
  242. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/declarations/mod.rs +0 -0
  243. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/declarations/rows.rs +0 -0
  244. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/calls.rs +0 -0
  245. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/dimensions.rs +0 -0
  246. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/functions.rs +0 -0
  247. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/imports.rs +0 -0
  248. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/mod.rs +0 -0
  249. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/hygiene/checks.rs +0 -0
  250. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/hygiene/mod.rs +0 -0
  251. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/functions.rs +0 -0
  252. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/lookups.rs +0 -0
  253. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/mod.rs +0 -0
  254. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/mutations.rs +0 -0
  255. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/mod.rs +0 -0
  256. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/naming/mod.rs +0 -0
  257. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/naming/names.rs +0 -0
  258. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/project/calls.rs +0 -0
  259. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/project/mod.rs +0 -0
  260. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/references/events.rs +0 -0
  261. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/references/mod.rs +0 -0
  262. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/references/test_shape.rs +0 -0
  263. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/literals.rs +0 -0
  264. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mod.rs +0 -0
  265. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mutations.rs +0 -0
  266. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/ownership.rs +0 -0
  267. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/references.rs +0 -0
  268. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/state/mod.rs +0 -0
  269. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/state/resolution.rs +0 -0
  270. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/state/scopes.rs +0 -0
  271. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/wording/mod.rs +0 -0
  272. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/wording/text.rs +0 -0
  273. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
  274. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
  275. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
  276. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
  277. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
  278. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
  279. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
  280. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
  281. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
  282. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
  283. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
  284. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
  285. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
  286. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
  287. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
  288. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
  289. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
  290. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
  291. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
  292. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
  293. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
  294. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/mod.rs +0 -0
  295. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/models.rs +0 -0
  296. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/types.rs +0 -0
  297. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/lib.rs +0 -0
  298. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/classes.rs +0 -0
  299. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/expressions.rs +0 -0
  300. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/extraction.rs +0 -0
  301. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/functions.rs +0 -0
  302. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/imports.rs +0 -0
  303. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/mod.rs +0 -0
  304. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/constants.rs +0 -0
  305. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/main/extract_mapping_declarations.rs +0 -0
  306. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/main/extract_mapping_facts.rs +0 -0
  307. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/main/mod.rs +0 -0
  308. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/mod.rs +0 -0
  309. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/models.rs +0 -0
  310. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/_helpers/failures.rs +0 -0
  311. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/_helpers/mod.rs +0 -0
  312. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
  313. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
  314. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
  315. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/mod.rs +0 -0
  316. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/models.rs +0 -0
  317. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/_helpers/line_index.rs +0 -0
  318. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/_helpers/mod.rs +0 -0
  319. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
  320. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
  321. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
  322. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/mod.rs +0 -0
  323. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/models.rs +0 -0
  324. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/matching.rs +0 -0
  325. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/mod.rs +0 -0
  326. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/observation_index.rs +0 -0
  327. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/repository_observation_index.rs +0 -0
  328. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/repository_paths.rs +0 -0
  329. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
  330. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
  331. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
  332. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
  333. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
  334. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
  335. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/models.rs +0 -0
  336. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/breadth.rs +0 -0
  337. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/children.rs +0 -0
  338. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/expression_children.rs +0 -0
  339. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/mod.rs +0 -0
  340. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/nodes.rs +0 -0
  341. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/references.rs +0 -0
  342. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/spans.rs +0 -0
  343. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/statement_children.rs +0 -0
  344. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/breadth_first_from.rs +0 -0
  345. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/breadth_first_nodes.rs +0 -0
  346. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/breadth_first_with_parents.rs +0 -0
  347. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/children.rs +0 -0
  348. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/kind_name.rs +0 -0
  349. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/mod.rs +0 -0
  350. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/push_clause_orelse.rs +0 -0
  351. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/span.rs +0 -0
  352. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/start_of.rs +0 -0
  353. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/strict_reference_parts.rs +0 -0
  354. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/mod.rs +0 -0
  355. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/types.rs +0 -0
  356. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_enumerate.rs +0 -0
  357. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_mapping.rs +0 -0
  358. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_rule_authoring.rs +0 -0
  359. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
  360. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts.rs +0 -0
  361. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/parsing/test_strict.rs +0 -0
  362. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
  363. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/parsing.rs +0 -0
  364. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/positions/test_locate.rs +0 -0
  365. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
  366. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/positions.rs +0 -0
  367. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
  368. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_hashing.rs +0 -0
  369. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_observations.rs +0 -0
  370. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
  371. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_walk.rs +0 -0
  372. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot.rs +0 -0
  373. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/Cargo.toml +0 -0
  374. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/_helpers/loading.rs +0 -0
  375. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/_helpers/mod.rs +0 -0
  376. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
  377. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
  378. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
  379. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/mod.rs +0 -0
  380. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/models.rs +0 -0
  381. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/types.rs +0 -0
  382. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/archival/archive.rs +0 -0
  383. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/archival/mod.rs +0 -0
  384. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/mod.rs +0 -0
  385. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/database.rs +0 -0
  386. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/documents.rs +0 -0
  387. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/lists.rs +0 -0
  388. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/mod.rs +0 -0
  389. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/references.rs +0 -0
  390. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/sections.rs +0 -0
  391. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/skills.rs +0 -0
  392. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/streaming.rs +0 -0
  393. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/values.rs +0 -0
  394. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/graph_loading.rs +0 -0
  395. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/graphs.rs +0 -0
  396. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/mod.rs +0 -0
  397. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/overviews.rs +0 -0
  398. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/queries.rs +0 -0
  399. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/query_values.rs +0 -0
  400. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/diagnostics.rs +0 -0
  401. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/mod.rs +0 -0
  402. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_core.rs +0 -0
  403. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_markdown.rs +0 -0
  404. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_metadata.rs +0 -0
  405. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_skill_view.rs +0 -0
  406. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_views.rs +0 -0
  407. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/summaries.rs +0 -0
  408. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/synchronization.rs +0 -0
  409. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/constants.rs +0 -0
  410. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/errors.rs +0 -0
  411. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
  412. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
  413. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
  414. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
  415. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
  416. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
  417. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
  418. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
  419. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
  420. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
  421. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
  422. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
  423. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
  424. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/mod.rs +0 -0
  425. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/models.rs +0 -0
  426. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/cycles.rs +0 -0
  427. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/dependencies.rs +0 -0
  428. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/document_targets.rs +0 -0
  429. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/heading_targets.rs +0 -0
  430. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/link_resolution.rs +0 -0
  431. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/mod.rs +0 -0
  432. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
  433. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
  434. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/mod.rs +0 -0
  435. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/models.rs +0 -0
  436. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/types.rs +0 -0
  437. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/lib.rs +0 -0
  438. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/assembly.rs +0 -0
  439. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/blocks.rs +0 -0
  440. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/headings.rs +0 -0
  441. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/line_index.rs +0 -0
  442. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/links.rs +0 -0
  443. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/lists.rs +0 -0
  444. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/mod.rs +0 -0
  445. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/obsidian.rs +0 -0
  446. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/text.rs +0 -0
  447. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/constants.rs +0 -0
  448. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
  449. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
  450. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/mod.rs +0 -0
  451. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/models.rs +0 -0
  452. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/types.rs +0 -0
  453. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/bootstrap.rs +0 -0
  454. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/collisions.rs +0 -0
  455. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/discovery.rs +0 -0
  456. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/documents.rs +0 -0
  457. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/filesystem.rs +0 -0
  458. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/git_tracking.rs +0 -0
  459. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/mod.rs +0 -0
  460. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/skills.rs +0 -0
  461. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/tree.rs +0 -0
  462. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/validation.rs +0 -0
  463. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/constants.rs +0 -0
  464. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
  465. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
  466. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/main/mod.rs +0 -0
  467. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/mod.rs +0 -0
  468. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/models.rs +0 -0
  469. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/types.rs +0 -0
  470. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
  471. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus/test_loading.rs +0 -0
  472. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
  473. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus.rs +0 -0
  474. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
  475. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/list_batch/test_list_batches.rs +0 -0
  476. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
  477. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
  478. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_archive.rs +0 -0
  479. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_bootstrap.rs +0 -0
  480. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_check.rs +0 -0
  481. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_dependencies.rs +0 -0
  482. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_graph_query.rs +0 -0
  483. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_overview.rs +0 -0
  484. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_performance.rs +0 -0
  485. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_query.rs +0 -0
  486. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_schema.rs +0 -0
  487. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_streaming.rs +0 -0
  488. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_summary.rs +0 -0
  489. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_sync.rs +0 -0
  490. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
  491. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine.rs +0 -0
  492. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
  493. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/test_dependencies.rs +0 -0
  494. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/test_resolution.rs +0 -0
  495. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
  496. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph.rs +0 -0
  497. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_code_blocks.rs +0 -0
  498. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_links.rs +0 -0
  499. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_lists.rs +0 -0
  500. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_structure.rs +0 -0
  501. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
  502. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown.rs +0 -0
  503. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/helpers.rs +0 -0
  504. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_collisions.rs +0 -0
  505. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_discovery.rs +0 -0
  506. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_git_worktrees.rs +0 -0
  507. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_symlinks.rs +0 -0
  508. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_types.rs +0 -0
  509. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source.rs +0 -0
  510. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/Cargo.toml +0 -0
  511. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/bindings/bindings.rs +0 -0
  512. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/bindings/generation_bindings.rs +0 -0
  513. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/generation/generation.rs +0 -0
  514. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/generation/replay.rs +0 -0
  515. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/mod.rs +0 -0
  516. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/persistence/database.rs +0 -0
  517. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/persistence/storage.rs +0 -0
  518. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/publication/publication.rs +0 -0
  519. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/publication/publication_merge.rs +0 -0
  520. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/records/records.rs +0 -0
  521. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/records/schema.rs +0 -0
  522. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/records/schema_values.rs +0 -0
  523. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/constants.rs +0 -0
  524. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/main/mod.rs +0 -0
  525. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
  526. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
  527. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/mod.rs +0 -0
  528. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/models.rs +0 -0
  529. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
  530. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/test_records.rs +0 -0
  531. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/test_storage.rs +0 -0
  532. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
  533. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests.rs +0 -0
  534. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/types.rs +0 -0
  535. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/evaluation/mod.rs +0 -0
  536. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/evaluation/rule_bindings.rs +0 -0
  537. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/bindings.rs +0 -0
  538. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/conversion.rs +0 -0
  539. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/mod.rs +0 -0
  540. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/registration.rs +0 -0
  541. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/mod.rs +0 -0
  542. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/main/mod.rs +0 -0
  543. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
  544. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/mod.rs +0 -0
  545. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/lib.rs +0 -0
  546. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/annotations/annotations.rs +0 -0
  547. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/source.rs +0 -0
  548. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/hygiene/hygiene.rs +0 -0
  549. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/layers/layers.rs +0 -0
  550. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/layers/local.rs +0 -0
  551. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/layers/project.rs +0 -0
  552. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/naming/naming.rs +0 -0
  553. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/naming_globs/naming_globs.rs +0 -0
  554. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/policy/generated_policy.rs +0 -0
  555. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/project_queries/project_queries.rs +0 -0
  556. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/declarations.rs +0 -0
  557. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/paths.rs +0 -0
  558. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/project_layout.rs +0 -0
  559. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/project_layout_paths.rs +0 -0
  560. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/project_layout_queries.rs +0 -0
  561. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/roles.rs +0 -0
  562. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/surfaces.rs +0 -0
  563. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/shape/shape.rs +0 -0
  564. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/function_conventions.rs +0 -0
  565. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/layout.rs +0 -0
  566. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/names.rs +0 -0
  567. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/tests.rs +0 -0
  568. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/constants.rs +0 -0
  569. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +0 -0
  570. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/generated_policy_owners.rs +0 -0
  571. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
  572. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/mod.rs +0 -0
  573. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/extension/test_memory_conversion.rs +0 -0
  574. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/extension/test_types.rs +0 -0
  575. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/fixtures/README.md +0 -0
  576. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
  577. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/fixtures/generated_rules.jsonl +0 -0
  578. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/helpers.rs +0 -0
  579. {fensu_cli-0.9.2 → fensu_cli-0.9.4}/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.9.2"
395
+ version = "0.9.4"
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.9.2
3
+ Version: 0.9.4
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.9.2" # x-release-please-version
3
+ version = "0.9.4" # x-release-please-version
4
4
  edition.workspace = true
5
5
  license.workspace = true
6
6
  publish = false
@@ -3,3 +3,4 @@
3
3
  pub(crate) mod rule_catalogue;
4
4
  pub(crate) mod rule_metadata;
5
5
  pub(crate) mod rule_output;
6
+ pub(crate) mod validate_config_selectors;
@@ -0,0 +1,37 @@
1
+ //! Validate configured selectors against the activated rule catalogue.
2
+
3
+ use crate::catalogue::models::RuleMetadata;
4
+ use crate::models::Config;
5
+
6
+ pub(crate) fn validate_config_selectors(
7
+ config: &Config,
8
+ catalogue: &[&RuleMetadata],
9
+ ) -> Result<(), String> {
10
+ for (name, selectors) in [
11
+ ("select", &config.select),
12
+ ("warn", &config.warn),
13
+ ("ignore", &config.ignore),
14
+ ] {
15
+ validate_selector_group(name, selectors, catalogue)?;
16
+ }
17
+ for entry in &config.rule_ignores {
18
+ validate_selector_group("rule_ignores.rules", &entry.rules, catalogue)?;
19
+ }
20
+ Ok(())
21
+ }
22
+
23
+ fn validate_selector_group(
24
+ name: &str,
25
+ selectors: &[String],
26
+ catalogue: &[&RuleMetadata],
27
+ ) -> Result<(), String> {
28
+ for selector in selectors {
29
+ if catalogue.iter().any(|rule| rule.code.starts_with(selector)) {
30
+ continue;
31
+ }
32
+ return Err(format!(
33
+ "Config key {name} contains selector {selector}, but it matches no rules in the configured catalogue. Activate the required rule pack, or correct or remove the selector."
34
+ ));
35
+ }
36
+ Ok(())
37
+ }
@@ -1,10 +1,11 @@
1
- use std::collections::{BTreeMap, HashMap, HashSet};
1
+ use std::collections::{HashMap, HashSet};
2
2
  use std::path::Path;
3
3
 
4
4
  use fensu_facts::extension::models::ProgramHandle;
5
5
  use fensu_native::rules::main::evaluate_core_rules::evaluate_core_rules;
6
6
  use fensu_native::rules::main::plan_core_rule_queries::plan_core_rule_queries;
7
- use fensu_native::rules::models::NativeRuleContext;
7
+ use fensu_native::rules::main::plan_execution_owners::plan_execution_owners;
8
+ use fensu_native::rules::models::{NativeExecutionRule, NativeExecutionTarget, NativeRuleContext};
8
9
  use rayon::iter::{IndexedParallelIterator, IntoParallelRefIterator, ParallelIterator};
9
10
 
10
11
  use crate::catalogue::main::rule_metadata::rule_metadata;
@@ -20,9 +21,7 @@ use crate::check::_helpers::rule_policy::{
20
21
  validate_unique_implementations,
21
22
  };
22
23
  use crate::check::models::EvaluationRequest;
23
- use crate::constants::{
24
- OWNER_FILE, OWNER_PACKAGE, ROLE_HELPERS, ROLE_MAIN, SCOPE_TEST, SUFFIX_INIT,
25
- };
24
+ use crate::constants::SCOPE_TEST;
26
25
  use crate::models::{Config, Fault, ScopedSource, ThresholdUse};
27
26
  use crate::reporting::main::report::report;
28
27
  use crate::reporting::models::ReportRequest;
@@ -50,7 +49,7 @@ pub(crate) fn evaluate_and_render(request: EvaluationRequest<'_>) -> Result<(Str
50
49
  .iter()
51
50
  .map(|rule| rule.code.as_str())
52
51
  .collect::<HashSet<_>>();
53
- let codes_by_source = owner_plan(sources, &all_rules);
52
+ let codes_by_source = owner_plan(sources, &all_rules)?;
54
53
  let project = project_plane(root, config, sources)?;
55
54
  let program_by_path = sources
56
55
  .iter()
@@ -241,120 +240,32 @@ fn package_name(source: &ScopedSource) -> String {
241
240
  .unwrap_or_else(|| source.root_text.clone())
242
241
  }
243
242
 
244
- pub(crate) fn owner_plan(sources: &[ScopedSource], rules: &[&RuleMetadata]) -> Vec<Vec<String>> {
245
- let mut planned = vec![Vec::new(); sources.len()];
246
- for rule in rules {
247
- let applicable = sources
248
- .iter()
249
- .enumerate()
250
- .filter(|(_, source)| family_applies(&rule.family, &source.scope))
251
- .collect::<Vec<_>>();
252
- if rule.execution_owner == OWNER_FILE {
253
- for (index, _) in applicable {
254
- planned[index].push(rule.code.clone());
255
- }
256
- continue;
257
- }
258
- let mut groups = BTreeMap::<String, Vec<usize>>::new();
259
- for (index, source) in applicable {
260
- if let Some(identity) = owner_identity(source, &rule.execution_owner) {
261
- groups.entry(identity).or_default().push(index);
262
- }
263
- }
264
- for indexes in groups.values() {
265
- if let Some(index) = indexes
266
- .iter()
267
- .min_by_key(|index| anchor_key(&sources[**index], &rule.execution_owner))
268
- {
269
- planned[*index].push(rule.code.clone());
270
- }
271
- }
272
- }
273
- planned
274
- }
275
-
276
- pub(crate) fn family_applies(family: &str, scope: &str) -> bool {
277
- if scope == SCOPE_TEST {
278
- matches!(family, "annotations" | "tests")
279
- } else {
280
- !matches!(family, "tests" | "custom")
281
- }
282
- }
283
-
284
- pub(crate) fn owner_identity(source: &ScopedSource, owner: &str) -> Option<String> {
285
- let domain = source
286
- .relative_parts
287
- .first()
288
- .filter(|part| !part.ends_with(".py"));
289
- let subdomain = source
290
- .relative_parts
291
- .get(1)
292
- .filter(|part| !part.ends_with(".py") && !is_role_directory(part));
293
- match owner {
294
- "project" => Some("project".to_owned()),
295
- "scope" => Some(format!("{}\0{}", source.scope, source.root_text)),
296
- "package" => source
297
- .path
298
- .parent()
299
- .map(|path| path.to_string_lossy().into_owned()),
300
- "domain" => domain.map(|value| format!("{}\0{}\0{value}", source.scope, source.root_text)),
301
- "subdomain" => subdomain.map(|value| {
302
- format!(
303
- "{}\0{}\0{}\0{value}",
304
- source.scope,
305
- source.root_text,
306
- domain.map(String::as_str).unwrap_or_default()
307
- )
308
- }),
309
- "leaf" => domain.map(|value| {
310
- format!(
311
- "{}\0{}\0{value}\0{}",
312
- source.scope,
313
- source.root_text,
314
- subdomain.map(String::as_str).unwrap_or_default()
243
+ pub(crate) fn owner_plan(
244
+ sources: &[ScopedSource],
245
+ rules: &[&RuleMetadata],
246
+ ) -> Result<Vec<Vec<String>>, String> {
247
+ let targets: Vec<NativeExecutionTarget> = sources
248
+ .iter()
249
+ .map(|source| NativeExecutionTarget {
250
+ repository_path: source.repository_path.clone(),
251
+ scope: source.scope.clone(),
252
+ root: source.root_text.clone(),
253
+ relative_parts: source.relative_parts.clone(),
254
+ direct: true,
255
+ })
256
+ .collect();
257
+ let native_rules: Vec<NativeExecutionRule> = rules
258
+ .iter()
259
+ .map(|rule| {
260
+ NativeExecutionRule::new(
261
+ rule.code.clone(),
262
+ rule.family.clone(),
263
+ rule.execution_owner.clone(),
315
264
  )
316
- }),
317
- _ => None,
318
- }
319
- }
320
-
321
- pub(crate) fn anchor_key(source: &ScopedSource, owner: &str) -> (bool, usize, String) {
322
- let init = source
323
- .relative_parts
324
- .last()
325
- .is_some_and(|part| part == SUFFIX_INIT);
326
- let expected_depth = match owner {
327
- "scope" => Some(1),
328
- "domain" => Some(2),
329
- "subdomain" => Some(3),
330
- "leaf" => Some(
331
- if source
332
- .relative_parts
333
- .get(1)
334
- .is_some_and(|part| !part.ends_with(".py") && !is_role_directory(part))
335
- {
336
- 3
337
- } else {
338
- 2
339
- },
340
- ),
341
- _ => None,
342
- };
343
- let owner_init = if owner == OWNER_PACKAGE {
344
- init
345
- } else {
346
- init && expected_depth == Some(source.relative_parts.len())
347
- };
348
- (
349
- !owner_init,
350
- source.relative_parts.len(),
351
- source.repository_path.clone(),
352
- )
353
- }
354
-
355
- fn is_role_directory(part: &str) -> bool {
356
- matches!(
357
- part,
358
- ROLE_MAIN | ROLE_HELPERS | "classes" | "models" | "types" | "constants" | "exceptions"
359
- )
265
+ })
266
+ .collect();
267
+ Ok(plan_execution_owners(&targets, &native_rules)?
268
+ .into_iter()
269
+ .map(|plan| plan.codes)
270
+ .collect())
360
271
  }
@@ -3,6 +3,7 @@ use std::collections::{HashMap, HashSet};
3
3
 
4
4
  use crate::catalogue::main::rule_catalogue::configured_rule_catalogue;
5
5
  use crate::catalogue::main::rule_metadata::rule_metadata;
6
+ use crate::catalogue::main::validate_config_selectors::validate_config_selectors;
6
7
  use crate::catalogue::models::RuleMetadata;
7
8
  use crate::check::_helpers::policy::{path_matches, role};
8
9
  use crate::models::{Config, ScopedSource, ThresholdUse};
@@ -47,6 +48,8 @@ pub(crate) fn selected_rules(
47
48
  }
48
49
 
49
50
  pub(crate) fn validate_config_tiers(config: &Config) -> Result<(), String> {
51
+ let catalogue = configured_rule_catalogue(&config.rule_packs)?;
52
+ validate_config_selectors(config, &catalogue)?;
50
53
  let blocking = selected_rules(config, &config.select, &[])?;
51
54
  let warnings = selected_rules(config, &config.warn, &[])?;
52
55
  let warning_codes = warnings
@@ -3,8 +3,6 @@ pub(crate) const COLOR_AUTO: &str = "auto";
3
3
  pub(crate) const COLOR_NEVER: &str = "never";
4
4
  pub(crate) const GLOB_ALL: &str = "**";
5
5
  pub(crate) const OPTION_COLOR: &str = "--color";
6
- pub(crate) const OWNER_FILE: &str = "file";
7
- pub(crate) const OWNER_PACKAGE: &str = "package";
8
6
  pub(crate) const ROLE_HELPERS: &str = "_helpers";
9
7
  pub(crate) const ROLE_MAIN: &str = "main";
10
8
  pub(crate) const ROLE_RULES: &str = "rules";
@@ -4,6 +4,7 @@ use std::path::Path;
4
4
  use serde_json::json;
5
5
 
6
6
  use crate::catalogue::main::rule_catalogue::configured_rule_catalogue;
7
+ use crate::catalogue::main::validate_config_selectors::validate_config_selectors;
7
8
  use crate::catalogue::models::RuleMetadata;
8
9
  use crate::configuration::constants::{
9
10
  CONTRACT_BEHAVIORS, DEFAULT_THRESHOLDS, RULE_CONFIGURATION_INPUTS,
@@ -47,7 +48,9 @@ pub(crate) fn selection(config: &Config, project_root: &Path) -> Result<RuleSele
47
48
  {
48
49
  return hosted_selection(project_root);
49
50
  }
50
- let catalogue = configured_rule_catalogue(&config.rule_packs)?
51
+ let configured_catalogue = configured_rule_catalogue(&config.rule_packs)?;
52
+ validate_config_selectors(config, &configured_catalogue)?;
53
+ let catalogue = configured_catalogue
51
54
  .into_iter()
52
55
  .cloned()
53
56
  .collect::<Vec<_>>();
@@ -81,6 +81,47 @@ fn given_native_dagster_alias_when_checking_then_executes_core_kernel_under_pack
81
81
  }
82
82
  }
83
83
 
84
+ #[test]
85
+ fn given_native_dagster_rule_when_checking_then_executes_pack_kernel() {
86
+ let test_cases = [NativeRulePackTestCase {
87
+ description: "selected native Dagster rule reports an invalid asset main module",
88
+ config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nrule_packs = [\"dagster\"]\nselect = [\"FPDG004\"]\n",
89
+ expected_exit_code: 1,
90
+ expected_output: "FPDG004 Dagster main.py must contain only imports and one main()",
91
+ }];
92
+
93
+ for test_case in &test_cases {
94
+ let repository = tempfile::tempdir().expect("temporary repository");
95
+ write(repository.path().join("fensu.toml"), test_case.config);
96
+ write(
97
+ repository
98
+ .path()
99
+ .join("src/pkg/defs/assets/example/assets.py"),
100
+ "assets: tuple[object, ...] = ()\n",
101
+ );
102
+ write(
103
+ repository.path().join("src/pkg/defs/assets/example/main.py"),
104
+ "def helper() -> int:\n return 1\n\ndef main() -> dg.MaterializeResult:\n return dg.MaterializeResult()\n",
105
+ );
106
+
107
+ let output = run_check(repository.path());
108
+ let stdout = String::from_utf8_lossy(&output.stdout);
109
+
110
+ assert_eq!(
111
+ output.status.code(),
112
+ Some(test_case.expected_exit_code),
113
+ "{}: {}",
114
+ test_case.description,
115
+ String::from_utf8_lossy(&output.stderr)
116
+ );
117
+ assert!(
118
+ stdout.contains(test_case.expected_output),
119
+ "{}: {stdout}",
120
+ test_case.description
121
+ );
122
+ }
123
+ }
124
+
84
125
  #[test]
85
126
  fn given_core_and_alias_in_one_tier_when_checking_then_rejects_duplicate_implementation() {
86
127
  let test_cases = [NativeRulePackTestCase {
@@ -24,6 +24,30 @@ fn given_invalid_native_policy_when_checking_then_configuration_fails_closed() {
24
24
  expected_exit_code: 2,
25
25
  expected_error: "Config key ignore contains invalid selector wrong.",
26
26
  },
27
+ InvalidCheckConfigTestCase {
28
+ description: "unmatched blocking selector is rejected",
29
+ config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = [\"FFX\"]\n",
30
+ expected_exit_code: 2,
31
+ expected_error: "Config key select contains selector FFX, but it matches no rules in the configured catalogue.",
32
+ },
33
+ InvalidCheckConfigTestCase {
34
+ description: "unmatched warning selector is rejected",
35
+ config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = []\nwarn = [\"FFX\"]\n",
36
+ expected_exit_code: 2,
37
+ expected_error: "Config key warn contains selector FFX, but it matches no rules in the configured catalogue.",
38
+ },
39
+ InvalidCheckConfigTestCase {
40
+ description: "unmatched Dagster alias ignore is rejected",
41
+ config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nrule_packs = [\"dagster\"]\nselect = [\"FPDG\"]\nignore = [\"FPDGL101\"]\n",
42
+ expected_exit_code: 2,
43
+ expected_error: "Config key ignore contains selector FPDGL101, but it matches no rules in the configured catalogue.",
44
+ },
45
+ InvalidCheckConfigTestCase {
46
+ description: "unmatched path-scoped ignore selector is rejected",
47
+ config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = [\"FFA001\"]\n\n[[rule_ignores]]\nrules = [\"FFX\"]\npaths = [\"src/pkg/**\"]\nreason = \"Generated source.\"\n",
48
+ expected_exit_code: 2,
49
+ expected_error: "Config key rule_ignores.rules contains selector FFX, but it matches no rules in the configured catalogue.",
50
+ },
27
51
  InvalidCheckConfigTestCase {
28
52
  description: "blocking and warning tiers cannot overlap",
29
53
  config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = [\"FFA001\"]\nwarn = [\"FFA001\"]\n",
@@ -7,10 +7,40 @@ use crate::helpers::{
7
7
  CONFIG,
8
8
  };
9
9
  use crate::test_types::{
10
- ExceptionSymbolTestCase, FreshnessTestCase, PublicationRaceTestCase,
11
- RepositoryGuidanceTestCase, SkillsCommandTestCase,
10
+ ExceptionSymbolTestCase, FreshnessTestCase, InvalidSkillsConfigTestCase,
11
+ PublicationRaceTestCase, RepositoryGuidanceTestCase, SkillsCommandTestCase,
12
12
  };
13
13
 
14
+ #[test]
15
+ fn given_unmatched_selector_when_generating_skills_then_configuration_fails_closed() {
16
+ let test_cases = [InvalidSkillsConfigTestCase {
17
+ description: "skills reject selectors absent from the configured catalogue",
18
+ expected_exit_code: 2,
19
+ expected_error: "Config key ignore contains selector FFX, but it matches no rules in the configured catalogue.",
20
+ }];
21
+ for test_case in test_cases {
22
+ let repository = project();
23
+ let configured = CONFIG.replace("select = [\"FF\"]", "select = [\"FF\"]\nignore = [\"FFX\"]");
24
+ write(repository.path().join("fensu.toml"), configured);
25
+
26
+ let result = native(repository.path(), &["--target", "agents"]);
27
+
28
+ assert_eq!(
29
+ result.status.code(),
30
+ Some(test_case.expected_exit_code),
31
+ "{}: {}",
32
+ test_case.description,
33
+ text(&result.stderr)
34
+ );
35
+ assert!(
36
+ text(&result.stderr).contains(test_case.expected_error),
37
+ "{}: {}",
38
+ test_case.description,
39
+ text(&result.stderr)
40
+ );
41
+ }
42
+ }
43
+
14
44
  #[test]
15
45
  fn given_canonical_role_policy_when_generating_skill_then_guidance_is_owned_and_complete() {
16
46
  let test_cases = [RepositoryGuidanceTestCase {
@@ -711,7 +741,7 @@ def always(module: ast.Module, ctx: RuleContext) -> list[Fault]:
711
741
  let incompatible = repository.path().join("incompatible-host");
712
742
  write(
713
743
  &incompatible,
714
- b"#!/bin/sh\nprintf '{\"protocol\":1,\"package_version\":\"0\",\"catalogue\":[],\"blocking\":[],\"warnings\":[],\"ignored\":[]}\\n'\n",
744
+ b"#!/bin/sh\ncat >/dev/null\nprintf '{\"protocol\":1,\"package_version\":\"0\",\"catalogue\":[],\"blocking\":[],\"warnings\":[],\"ignored\":[]}\\n'\n",
715
745
  );
716
746
  fs::set_permissions(&incompatible, fs::Permissions::from_mode(0o755))
717
747
  .expect("incompatible host mode");
@@ -5,6 +5,12 @@ pub(crate) struct SkillsCommandTestCase {
5
5
  pub(crate) expected_exit_code: i32,
6
6
  }
7
7
 
8
+ pub(crate) struct InvalidSkillsConfigTestCase {
9
+ pub(crate) description: &'static str,
10
+ pub(crate) expected_exit_code: i32,
11
+ pub(crate) expected_error: &'static str,
12
+ }
13
+
8
14
  pub(crate) struct FreshnessTestCase {
9
15
  pub(crate) description: &'static str,
10
16
  pub(crate) expected_state: &'static str,
@@ -0,0 +1,113 @@
1
+ //! Native file selection and deterministic execution-owner planning.
2
+
3
+ use std::collections::HashSet;
4
+
5
+ use globset::{GlobBuilder, GlobSet, GlobSetBuilder};
6
+ use pyo3::exceptions::PyValueError;
7
+ use pyo3::{pyfunction, PyResult};
8
+
9
+ use crate::extension::constants::RECURSIVE_GLOB;
10
+ use crate::rules::main::plan_execution_owners::plan_execution_owners;
11
+ use crate::rules::models::{NativeExecutionRule, NativeExecutionTarget};
12
+
13
+ type TargetTuple = (String, String, String, Vec<String>, bool);
14
+ type RuleTuple = (String, String, String);
15
+ type PlannedTargetTuple = (Vec<String>, Vec<(String, String)>);
16
+
17
+ #[pyfunction]
18
+ pub(crate) fn select_native_execution_files(
19
+ paths: Vec<String>,
20
+ includes: Vec<String>,
21
+ excludes: Vec<String>,
22
+ ) -> PyResult<(Option<Vec<usize>>, usize)> {
23
+ if includes.is_empty() && excludes.is_empty() {
24
+ return Ok((None, 0));
25
+ }
26
+ let include_set = build_patterns(&includes)?;
27
+ let exclude_set = build_patterns(&excludes)?;
28
+ for pattern in &includes {
29
+ let matcher = build_patterns(std::slice::from_ref(pattern))?;
30
+ if !paths.iter().any(|path| matcher.is_match(path)) {
31
+ return Err(PyValueError::new_err(format!(
32
+ "Evaluation include pattern matched no discovered Python files: {pattern}."
33
+ )));
34
+ }
35
+ }
36
+ let selected: Vec<usize> = paths
37
+ .iter()
38
+ .enumerate()
39
+ .filter_map(|(index, path)| {
40
+ let included = includes.is_empty() || include_set.is_match(path);
41
+ (included && !exclude_set.is_match(path)).then_some(index)
42
+ })
43
+ .collect();
44
+ if selected.is_empty() && !paths.is_empty() {
45
+ return Err(PyValueError::new_err(
46
+ "Evaluation configuration selects zero Python files; exclusions removed all targets.",
47
+ ));
48
+ }
49
+ let excluded = paths.len().saturating_sub(selected.len());
50
+ Ok((Some(selected), excluded))
51
+ }
52
+
53
+ #[pyfunction]
54
+ pub(crate) fn plan_native_execution_owners(
55
+ targets: Vec<TargetTuple>,
56
+ rules: Vec<RuleTuple>,
57
+ ) -> PyResult<Vec<PlannedTargetTuple>> {
58
+ let native_targets: Vec<NativeExecutionTarget> = targets
59
+ .into_iter()
60
+ .map(
61
+ |(repository_path, scope, root, relative_parts, direct)| NativeExecutionTarget {
62
+ repository_path,
63
+ scope,
64
+ root,
65
+ relative_parts,
66
+ direct,
67
+ },
68
+ )
69
+ .collect();
70
+ let native_rules: Vec<NativeExecutionRule> = rules
71
+ .into_iter()
72
+ .map(|(code, family, owner)| NativeExecutionRule::new(code, family, owner))
73
+ .collect();
74
+ let plans =
75
+ plan_execution_owners(&native_targets, &native_rules).map_err(PyValueError::new_err)?;
76
+ Ok(plans
77
+ .into_iter()
78
+ .map(|plan| (plan.codes, plan.identities))
79
+ .collect())
80
+ }
81
+
82
+ #[pyfunction]
83
+ pub(crate) fn partition_native_execution_targets(
84
+ ordered_paths: Vec<String>,
85
+ work_paths: Vec<String>,
86
+ ) -> Vec<usize> {
87
+ let work: HashSet<String> = work_paths.into_iter().collect();
88
+ ordered_paths
89
+ .iter()
90
+ .enumerate()
91
+ .filter_map(|(index, path)| work.contains(path).then_some(index))
92
+ .collect()
93
+ }
94
+
95
+ fn build_patterns(patterns: &[String]) -> PyResult<GlobSet> {
96
+ let mut builder = GlobSetBuilder::new();
97
+ for pattern in patterns {
98
+ let pattern = if pattern.contains('/') || pattern == RECURSIVE_GLOB {
99
+ pattern.clone()
100
+ } else {
101
+ format!("{{{pattern},**/{pattern}}}")
102
+ };
103
+ let glob = GlobBuilder::new(&pattern)
104
+ .literal_separator(true)
105
+ .backslash_escape(false)
106
+ .build()
107
+ .map_err(|error| PyValueError::new_err(error.to_string()))?;
108
+ builder.add(glob);
109
+ }
110
+ builder
111
+ .build()
112
+ .map_err(|error| PyValueError::new_err(error.to_string()))
113
+ }
@@ -0,0 +1,3 @@
1
+ //! Native execution planning decision values.
2
+
3
+ pub(crate) const RECURSIVE_GLOB: &str = "**";
@@ -133,22 +133,54 @@ pub(super) fn assets_delegate_to_main(
133
133
  faults.push(path_fault(code, None));
134
134
  }
135
135
  for callback in callbacks {
136
- let body = function_source(program, callback.line);
137
- let direct = body
138
- .lines()
139
- .skip(1)
140
- .filter(|line| !line.trim().is_empty())
141
- .collect::<Vec<_>>();
142
- let valid = direct.len() == 1
143
- && (direct[0].trim_start().starts_with("return main(")
144
- || direct[0].trim_start().starts_with("yield from main("));
145
- if !valid {
136
+ if !direct_main_delegation(program, callback.line) {
146
137
  faults.push(fault(code, callback.line, callback.column));
147
138
  }
148
139
  }
149
140
  faults
150
141
  }
151
142
 
143
+ fn direct_main_delegation(program: &ProgramHandle, line: u32) -> bool {
144
+ let source = function_source(program, line);
145
+ let mut signature_complete = false;
146
+ let mut delimiter_balance: i32 = 0;
147
+ let mut body_indentation: Option<usize> = None;
148
+ let mut direct_statements: Vec<&str> = Vec::new();
149
+ for text in source.lines() {
150
+ if !signature_complete {
151
+ delimiter_balance += text.chars().fold(0, |balance, character| {
152
+ balance
153
+ + match character {
154
+ '(' | '[' | '{' => 1,
155
+ ')' | ']' | '}' => -1,
156
+ _ => 0,
157
+ }
158
+ });
159
+ signature_complete = delimiter_balance == 0 && text.trim_end().ends_with(':');
160
+ continue;
161
+ }
162
+ if text.trim().is_empty() {
163
+ continue;
164
+ }
165
+ let indentation = text.len().saturating_sub(text.trim_start().len());
166
+ let body_indentation = *body_indentation.get_or_insert(indentation);
167
+ if indentation == body_indentation && delimiter_balance == 0 {
168
+ direct_statements.push(text.trim_start());
169
+ }
170
+ delimiter_balance += text.chars().fold(0, |balance, character| {
171
+ balance
172
+ + match character {
173
+ '(' | '[' | '{' => 1,
174
+ ')' | ']' | '}' => -1,
175
+ _ => 0,
176
+ }
177
+ });
178
+ }
179
+ direct_statements.len() == 1
180
+ && (direct_statements[0].starts_with("return main(")
181
+ || direct_statements[0].starts_with("yield from main("))
182
+ }
183
+
152
184
  fn approved_main_return(signature: &str) -> bool {
153
185
  signature.contains("MaterializeResult")
154
186
  || signature.contains("Iterator[")
@@ -263,6 +295,20 @@ fn nearest_asset_owner(
263
295
  }
264
296
  }
265
297
 
298
+ fn ancestor_asset_owners(owner: &str) -> Vec<String> {
299
+ let parts: Vec<&str> = owner.split('.').collect();
300
+ (4..parts.len())
301
+ .map(|depth| parts[..depth].join("."))
302
+ .collect()
303
+ }
304
+
305
+ fn owner_supports_target(owner: &str, target: &str) -> bool {
306
+ target.starts_with(&format!("{owner}._helpers."))
307
+ || ["constants", "exceptions", "models", "types"]
308
+ .iter()
309
+ .any(|role| target == format!("{owner}.{role}"))
310
+ }
311
+
266
312
  pub(super) fn import_boundaries(
267
313
  program: &ProgramHandle,
268
314
  code: &str,
@@ -275,6 +321,7 @@ pub(super) fn import_boundaries(
275
321
  let Some(owner) = nearest_asset_owner(context, project) else {
276
322
  return Vec::new();
277
323
  };
324
+ let ancestor_owners = ancestor_asset_owners(&owner);
278
325
  let package = &context.package_name;
279
326
  let mut faults: Vec<NativeFaultRow> = Vec::new();
280
327
  for row in &program.reference_rows().imports {
@@ -290,10 +337,10 @@ pub(super) fn import_boundaries(
290
337
  && !private
291
338
  && import_public(row);
292
339
  let owned = target == format!("{owner}.main")
293
- || target.starts_with(&format!("{owner}._helpers."))
294
- || ["constants", "exceptions", "models", "types"]
340
+ || owner_supports_target(&owner, &target)
341
+ || ancestor_owners
295
342
  .iter()
296
- .any(|role| target == format!("{owner}.{role}"));
343
+ .any(|ancestor| owner_supports_target(ancestor, &target));
297
344
  let dependency = row.from_import && target.ends_with(".assets");
298
345
  if !shared && !owned && !dependency {
299
346
  faults.push(fault(code, row.line, row.column));