fensu-cli 0.26.0__tar.gz → 0.28.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 (721) hide show
  1. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/Cargo.lock +2 -2
  2. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/PKG-INFO +1 -1
  3. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/Cargo.toml +1 -1
  4. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/exceptions.rs +65 -4
  5. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/exception_targets.rs +134 -5
  6. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/exceptions.rs +36 -17
  7. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/mod.rs +1 -0
  8. fensu_cli-0.28.0/crates/fensu-cli/src/configuration/main/rust_exception_symbols.rs +6 -0
  9. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/models.rs +7 -0
  10. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_rust.rs +9 -6
  11. fensu_cli-0.28.0/crates/fensu-cli/tests/command/test_check_rust_exceptions.rs +369 -0
  12. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_types.rs +12 -0
  13. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command.rs +2 -0
  14. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/Cargo.toml +1 -1
  15. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/constants.rs +21 -0
  16. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/models.rs +11 -0
  17. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/hygiene.rs +1 -1
  18. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/project_checks.rs +16 -0
  19. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/mod.rs +1 -0
  20. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/placement.rs +42 -15
  21. fensu_cli-0.28.0/crates/fensu-rust/src/rules/_helpers/roles/proc_macro_entries.rs +349 -0
  22. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/sources/scanning.rs +6 -4
  23. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/helpers.rs +28 -0
  24. fensu_cli-0.28.0/crates/fensu-rust/tests/rules/test_proc_macro_roots.rs +215 -0
  25. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules.rs +2 -0
  26. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/pyproject.toml +1 -1
  27. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/Cargo.toml +0 -0
  28. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/README.md +0 -0
  29. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/build.rs +0 -0
  30. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/analyzer.rs +0 -0
  31. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/arguments.rs +0 -0
  32. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/loading.rs +0 -0
  33. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/mod.rs +0 -0
  34. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/options.rs +0 -0
  35. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/policy.rs +0 -0
  36. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/rendering.rs +0 -0
  37. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/data/catalogue.json +0 -0
  38. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/mod.rs +0 -0
  39. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/resolve_native_options.rs +0 -0
  40. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/rule_catalogue.rs +0 -0
  41. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/rule_metadata.rs +0 -0
  42. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/rule_output.rs +0 -0
  43. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/validate_config_selectors.rs +0 -0
  44. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/mod.rs +0 -0
  45. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/models.rs +0 -0
  46. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/cache.rs +0 -0
  47. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/cleanup.rs +0 -0
  48. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/evaluation.rs +0 -0
  49. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/execution.rs +0 -0
  50. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/mod.rs +0 -0
  51. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/options.rs +0 -0
  52. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/policy.rs +0 -0
  53. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/preparation.rs +0 -0
  54. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/preparation_ownership.inc +0 -0
  55. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/project.rs +0 -0
  56. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/repository_custom_facts.inc +0 -0
  57. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/rule_policy.rs +0 -0
  58. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/web.inc +0 -0
  59. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/web_custom_facts.inc +0 -0
  60. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/web_policy.inc +0 -0
  61. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/constants.rs +0 -0
  62. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/check_output_options.rs +0 -0
  63. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/check_routing.rs +0 -0
  64. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/clean_caches.rs +0 -0
  65. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/discover_target_sources.rs +0 -0
  66. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/execute_check.rs +0 -0
  67. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/execute_structured_check.rs +0 -0
  68. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/mod.rs +0 -0
  69. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/prepare_cleanup.rs +0 -0
  70. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/python_version.rs +0 -0
  71. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/render_check_results.rs +0 -0
  72. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/repository_python_targets.rs +0 -0
  73. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/required_thresholds.rs +0 -0
  74. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/mod.rs +0 -0
  75. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/models.rs +0 -0
  76. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/check_partition/execution.rs +0 -0
  77. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/check_partition/mod.rs +0 -0
  78. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/map/mod.rs +0 -0
  79. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/map/parsing.rs +0 -0
  80. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/mod.rs +0 -0
  81. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/constants.rs +0 -0
  82. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_check.rs +0 -0
  83. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_dupes.rs +0 -0
  84. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_help.rs +0 -0
  85. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_init.rs +0 -0
  86. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_map.rs +0 -0
  87. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_rule.rs +0 -0
  88. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_run_cli.rs +0 -0
  89. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_skills.rs +0 -0
  90. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_target.rs +0 -0
  91. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/execute_cli.rs +0 -0
  92. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
  93. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/mod.rs +0 -0
  94. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/discovery.rs +0 -0
  95. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/loading.rs +0 -0
  96. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/mod.rs +0 -0
  97. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/native_rules.rs +0 -0
  98. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/parsing.rs +0 -0
  99. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/roots.rs +0 -0
  100. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/scopes.rs +0 -0
  101. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/selectors.rs +0 -0
  102. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/validation.rs +0 -0
  103. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/constants.rs +0 -0
  104. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/configuration_directory.rs +0 -0
  105. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/expand_path_pattern.rs +0 -0
  106. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/is_rule_code.rs +0 -0
  107. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/is_rule_selector.rs +0 -0
  108. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_config_section.rs +0 -0
  109. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
  110. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_repository_rule_config.rs +0 -0
  111. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_repository_rule_policy.rs +0 -0
  112. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_target.rs +0 -0
  113. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_targets.rs +0 -0
  114. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/render_target_config.rs +0 -0
  115. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/resolve_target_root.rs +0 -0
  116. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/validate_document.rs +0 -0
  117. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/validate_exception_targets.rs +0 -0
  118. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
  119. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/constants.rs +0 -0
  120. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/contracts/classes.rs +0 -0
  121. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/contracts/forced.rs +0 -0
  122. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/contracts/mod.rs +0 -0
  123. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/arguments.rs +0 -0
  124. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/changes.rs +0 -0
  125. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/config.rs +0 -0
  126. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/globs.rs +0 -0
  127. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/mod.rs +0 -0
  128. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/sources.rs +0 -0
  129. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/clustering.rs +0 -0
  130. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/fingerprints.rs +0 -0
  131. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/mod.rs +0 -0
  132. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/pairs.rs +0 -0
  133. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/sequence.rs +0 -0
  134. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/mod.rs +0 -0
  135. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/build.rs +0 -0
  136. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/diff.rs +0 -0
  137. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/mod.rs +0 -0
  138. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/rendering.rs +0 -0
  139. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/collection.rs +0 -0
  140. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/lines.rs +0 -0
  141. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/mod.rs +0 -0
  142. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/python.rs +0 -0
  143. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/rust.rs +0 -0
  144. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/web.rs +0 -0
  145. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/constants.rs +0 -0
  146. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/main/mod.rs +0 -0
  147. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/main/run_dupes.rs +0 -0
  148. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/mod.rs +0 -0
  149. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/models.rs +0 -0
  150. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/authoring.rs +0 -0
  151. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/interpreter.rs +0 -0
  152. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/metadata_exchange.rs +0 -0
  153. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/mod.rs +0 -0
  154. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/constants.rs +0 -0
  155. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/mod.rs +0 -0
  156. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_custom_check_host.rs +0 -0
  157. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_repository_custom_rule_host.rs +0 -0
  158. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_rust_custom_rule_host.rs +0 -0
  159. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_skills_metadata_host.rs +0 -0
  160. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_web_custom_rule_host.rs +0 -0
  161. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/mod.rs +0 -0
  162. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/arguments.rs +0 -0
  163. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/discovery.rs +0 -0
  164. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/layout.rs +0 -0
  165. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/mod.rs +0 -0
  166. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/packages.rs +0 -0
  167. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/reporting.rs +0 -0
  168. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/validation.rs +0 -0
  169. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/writing.rs +0 -0
  170. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/constants.rs +0 -0
  171. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/data/python.gitignore +0 -0
  172. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/main/mod.rs +0 -0
  173. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/main/run_init.rs +0 -0
  174. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/mod.rs +0 -0
  175. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/models.rs +0 -0
  176. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/lib.rs +0 -0
  177. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/main.rs +0 -0
  178. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/cache.rs +0 -0
  179. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/decoding.rs +0 -0
  180. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/execution.rs +0 -0
  181. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/identity.rs +0 -0
  182. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/index.rs +0 -0
  183. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/mod.rs +0 -0
  184. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/project.rs +0 -0
  185. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/render.rs +0 -0
  186. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/tree.rs +0 -0
  187. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/tree_policy.inc +0 -0
  188. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/constants.rs +0 -0
  189. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
  190. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
  191. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
  192. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/models.rs +0 -0
  193. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/_helpers/faults.rs +0 -0
  194. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/_helpers/mod.rs +0 -0
  195. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/_helpers/text.rs +0 -0
  196. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/constants.rs +0 -0
  197. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/main/mod.rs +0 -0
  198. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/main/report.rs +0 -0
  199. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/mod.rs +0 -0
  200. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/models.rs +0 -0
  201. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/_helpers/files.rs +0 -0
  202. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/_helpers/mod.rs +0 -0
  203. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/acquire_operation_lock.rs +0 -0
  204. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/mod.rs +0 -0
  205. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/open_repository.rs +0 -0
  206. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/read_optional.rs +0 -0
  207. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/relative_path.rs +0 -0
  208. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/write_if_unchanged.rs +0 -0
  209. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/mod.rs +0 -0
  210. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/models.rs +0 -0
  211. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/command/execution.rs +0 -0
  212. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/command/mod.rs +0 -0
  213. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/discovery.rs +0 -0
  214. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/fingerprint.rs +0 -0
  215. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/mod.rs +0 -0
  216. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/option_rendering.rs +0 -0
  217. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/rendering.rs +0 -0
  218. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/rule_rendering.rs +0 -0
  219. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/sections.rs +0 -0
  220. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/build.rs +0 -0
  221. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/exceptions.rs +0 -0
  222. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/identity.rs +0 -0
  223. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/mod.rs +0 -0
  224. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/option_validation.rs +0 -0
  225. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/options.rs +0 -0
  226. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/selection.rs +0 -0
  227. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/filesystem.rs +0 -0
  228. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/freshness.rs +0 -0
  229. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/install.rs +0 -0
  230. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/mod.rs +0 -0
  231. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/plan.rs +0 -0
  232. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/publication.rs +0 -0
  233. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/transaction.rs +0 -0
  234. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/mod.rs +0 -0
  235. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/data/skills_invariant.json +0 -0
  236. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
  237. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
  238. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
  239. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
  240. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
  241. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
  242. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/models.rs +0 -0
  243. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/addition.rs +0 -0
  244. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/arguments.rs +0 -0
  245. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/mod.rs +0 -0
  246. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/paths.rs +0 -0
  247. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/constants.rs +0 -0
  248. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/main/mod.rs +0 -0
  249. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/main/run_target.rs +0 -0
  250. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/mod.rs +0 -0
  251. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/models.rs +0 -0
  252. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/helpers.rs +0 -0
  253. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_analyzer.rs +0 -0
  254. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_dupes.rs +0 -0
  255. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_policy.rs +0 -0
  256. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_render.rs +0 -0
  257. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_rule_catalogue.rs +0 -0
  258. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_types.rs +0 -0
  259. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_web_analysis.rs +0 -0
  260. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests.rs +0 -0
  261. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check/helpers.rs +0 -0
  262. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check/test_dead_code.rs +0 -0
  263. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check/test_types.rs +0 -0
  264. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check.rs +0 -0
  265. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/helpers.rs +0 -0
  266. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_cleanup.rs +0 -0
  267. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_exceptions.rs +0 -0
  268. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_mixed_targets.rs +0 -0
  269. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_policy.rs +0 -0
  270. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_repository_custom.rs +0 -0
  271. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_validation.rs +0 -0
  272. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web.rs +0 -0
  273. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web_boundaries.rs +0 -0
  274. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web_custom.rs +0 -0
  275. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web_layout.rs +0 -0
  276. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_rule.rs +0 -0
  277. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_rust_file_placement.rs +0 -0
  278. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/web_policy_fixtures.inc +0 -0
  279. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/helpers.rs +0 -0
  280. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_config.rs +0 -0
  281. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_contracts.rs +0 -0
  282. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_detection.rs +0 -0
  283. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_reporting.rs +0 -0
  284. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_types.rs +0 -0
  285. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes.rs +0 -0
  286. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init/helpers.rs +0 -0
  287. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init/test_commands.rs +0 -0
  288. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init/test_types.rs +0 -0
  289. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init.rs +0 -0
  290. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
  291. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
  292. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/test_commands.rs +0 -0
  293. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/test_types.rs +0 -0
  294. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping.rs +0 -0
  295. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/commands.inc +0 -0
  296. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
  297. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/test_commands.rs +0 -0
  298. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
  299. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills.rs +0 -0
  300. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/Cargo.toml +0 -0
  301. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/constants.rs +0 -0
  302. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/_helpers/graph.rs +0 -0
  303. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/_helpers/mod.rs +0 -0
  304. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/analyze.rs +0 -0
  305. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/evaluate_graph.rs +0 -0
  306. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/extract.rs +0 -0
  307. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/mod.rs +0 -0
  308. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/mod.rs +0 -0
  309. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/models.rs +0 -0
  310. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/annotations.rs +0 -0
  311. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/contracts.rs +0 -0
  312. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/declarations.rs +0 -0
  313. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/functions.rs +0 -0
  314. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/harness.rs +0 -0
  315. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/hygiene.rs +0 -0
  316. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/mapping.rs +0 -0
  317. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/mod.rs +0 -0
  318. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/references.rs +0 -0
  319. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/rule_authoring.rs +0 -0
  320. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/state.rs +0 -0
  321. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/facades/facades.rs +0 -0
  322. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/bindings.rs +0 -0
  323. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/mod.rs +0 -0
  324. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/model_types.rs +0 -0
  325. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/repository_bindings.rs +0 -0
  326. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/rule_authoring_bindings.rs +0 -0
  327. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/mod.rs +0 -0
  328. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/queries/owner_symbols.rs +0 -0
  329. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
  330. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
  331. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
  332. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/models.rs +0 -0
  333. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/annotations/mod.rs +0 -0
  334. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/annotations/visitor.rs +0 -0
  335. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/category.rs +0 -0
  336. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/display.rs +0 -0
  337. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/mod.rs +0 -0
  338. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/returns.rs +0 -0
  339. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/rows.rs +0 -0
  340. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/control/conditionals.rs +0 -0
  341. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/control/mod.rs +0 -0
  342. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/declarations/mod.rs +0 -0
  343. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/declarations/rows.rs +0 -0
  344. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/calls.rs +0 -0
  345. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/dimensions.rs +0 -0
  346. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/functions.rs +0 -0
  347. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/imports.rs +0 -0
  348. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/mod.rs +0 -0
  349. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/hygiene/checks.rs +0 -0
  350. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/hygiene/mod.rs +0 -0
  351. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/functions.rs +0 -0
  352. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/lookups.rs +0 -0
  353. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/mod.rs +0 -0
  354. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/mutations.rs +0 -0
  355. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/mod.rs +0 -0
  356. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/naming/mod.rs +0 -0
  357. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/naming/names.rs +0 -0
  358. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/project/calls.rs +0 -0
  359. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/project/mod.rs +0 -0
  360. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/references/events.rs +0 -0
  361. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/references/mod.rs +0 -0
  362. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/references/test_shape.rs +0 -0
  363. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/literals.rs +0 -0
  364. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mod.rs +0 -0
  365. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mutations.rs +0 -0
  366. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/ownership.rs +0 -0
  367. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/references.rs +0 -0
  368. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/state/mod.rs +0 -0
  369. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/state/resolution.rs +0 -0
  370. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/state/scopes.rs +0 -0
  371. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/wording/mod.rs +0 -0
  372. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/wording/text.rs +0 -0
  373. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
  374. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
  375. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
  376. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
  377. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
  378. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
  379. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
  380. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
  381. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
  382. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
  383. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
  384. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
  385. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
  386. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
  387. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
  388. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
  389. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
  390. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
  391. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
  392. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
  393. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
  394. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
  395. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/models.rs +0 -0
  396. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/types.rs +0 -0
  397. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/lib.rs +0 -0
  398. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/classes.rs +0 -0
  399. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/expressions.rs +0 -0
  400. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/extraction.rs +0 -0
  401. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/functions.rs +0 -0
  402. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/imports.rs +0 -0
  403. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/mod.rs +0 -0
  404. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/constants.rs +0 -0
  405. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/extract_mapping_declarations.rs +0 -0
  406. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/extract_mapping_facts.rs +0 -0
  407. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/extract_runtime_imports.rs +0 -0
  408. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/mod.rs +0 -0
  409. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/mod.rs +0 -0
  410. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/models.rs +0 -0
  411. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/_helpers/failures.rs +0 -0
  412. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/_helpers/mod.rs +0 -0
  413. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
  414. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
  415. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
  416. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
  417. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
  418. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/_helpers/line_index.rs +0 -0
  419. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/_helpers/mod.rs +0 -0
  420. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
  421. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
  422. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
  423. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
  424. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/models.rs +0 -0
  425. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/matching.rs +0 -0
  426. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/mod.rs +0 -0
  427. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/observation_index.rs +0 -0
  428. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/repository_observation_index.rs +0 -0
  429. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/repository_paths.rs +0 -0
  430. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
  431. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
  432. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
  433. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
  434. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
  435. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
  436. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
  437. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/breadth.rs +0 -0
  438. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/children.rs +0 -0
  439. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/expression_children.rs +0 -0
  440. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/mod.rs +0 -0
  441. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/nodes.rs +0 -0
  442. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/references.rs +0 -0
  443. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/spans.rs +0 -0
  444. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/statement_children.rs +0 -0
  445. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/breadth_first_from.rs +0 -0
  446. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/breadth_first_nodes.rs +0 -0
  447. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/breadth_first_with_parents.rs +0 -0
  448. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/children.rs +0 -0
  449. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/kind_name.rs +0 -0
  450. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/mod.rs +0 -0
  451. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/push_clause_orelse.rs +0 -0
  452. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/span.rs +0 -0
  453. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/start_of.rs +0 -0
  454. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/strict_reference_parts.rs +0 -0
  455. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/mod.rs +0 -0
  456. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/types.rs +0 -0
  457. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code/helpers.rs +0 -0
  458. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code/test_reachability.rs +0 -0
  459. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code/test_types.rs +0 -0
  460. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code.rs +0 -0
  461. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_enumerate.rs +0 -0
  462. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_mapping.rs +0 -0
  463. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_rule_authoring.rs +0 -0
  464. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
  465. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts.rs +0 -0
  466. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/parsing/test_strict.rs +0 -0
  467. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
  468. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/parsing.rs +0 -0
  469. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/positions/test_locate.rs +0 -0
  470. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
  471. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/positions.rs +0 -0
  472. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
  473. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_hashing.rs +0 -0
  474. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_observations.rs +0 -0
  475. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
  476. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_walk.rs +0 -0
  477. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
  478. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/Cargo.toml +0 -0
  479. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/bindings/bindings.rs +0 -0
  480. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/bindings/generation_bindings.rs +0 -0
  481. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/bindings/python_rows.rs +0 -0
  482. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/generation/generation.rs +0 -0
  483. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/generation/replay.rs +0 -0
  484. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/mod.rs +0 -0
  485. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/persistence/database.rs +0 -0
  486. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/persistence/storage.rs +0 -0
  487. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/publication/publication.rs +0 -0
  488. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/publication/publication_merge.rs +0 -0
  489. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/records/records.rs +0 -0
  490. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/records/schema.rs +0 -0
  491. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/records/schema_values.rs +0 -0
  492. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/constants.rs +0 -0
  493. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/_dependency_kinds.rs +0 -0
  494. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/_replay_generation.rs +0 -0
  495. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
  496. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
  497. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/mod.rs +0 -0
  498. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/models.rs +0 -0
  499. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
  500. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_records.rs +0 -0
  501. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_replay.rs +0 -0
  502. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_storage.rs +0 -0
  503. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_subject_schema.rs +0 -0
  504. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
  505. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests.rs +0 -0
  506. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/types.rs +0 -0
  507. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/execution_planning.rs +0 -0
  508. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/mod.rs +0 -0
  509. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/python_rows.rs +0 -0
  510. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/reachability_bindings.rs +0 -0
  511. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/rule_bindings.rs +0 -0
  512. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/mod.rs +0 -0
  513. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/constants.rs +0 -0
  514. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
  515. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
  516. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/mod.rs +0 -0
  517. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/lib.rs +0 -0
  518. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/annotations/annotations.rs +0 -0
  519. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/assets.rs +0 -0
  520. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/autoload.rs +0 -0
  521. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/boundaries.rs +0 -0
  522. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/dagster.rs +0 -0
  523. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/definitions.rs +0 -0
  524. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/source.rs +0 -0
  525. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dead_code/dead_code.rs +0 -0
  526. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/execution_planning/execution_planning.rs +0 -0
  527. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/hygiene/hygiene.rs +0 -0
  528. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/layers/layers.rs +0 -0
  529. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/layers/local.rs +0 -0
  530. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/layers/project.rs +0 -0
  531. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/mod.rs +0 -0
  532. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/naming/naming.rs +0 -0
  533. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/naming_globs/naming_globs.rs +0 -0
  534. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/policy/generated_policy.rs +0 -0
  535. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/project_queries/project_queries.rs +0 -0
  536. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/declarations.rs +0 -0
  537. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/paths.rs +0 -0
  538. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout.rs +0 -0
  539. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout_paths.rs +0 -0
  540. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout_queries.rs +0 -0
  541. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/roles.rs +0 -0
  542. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/surfaces.rs +0 -0
  543. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/shape/shape.rs +0 -0
  544. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/function_conventions.rs +0 -0
  545. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/layout.rs +0 -0
  546. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/names.rs +0 -0
  547. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/tests.rs +0 -0
  548. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/constants.rs +0 -0
  549. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +0 -0
  550. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/evaluate_dead_code.rs +0 -0
  551. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/generated_policy_owners.rs +0 -0
  552. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
  553. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/parse_dead_code.rs +0 -0
  554. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
  555. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/plan_execution_owners.rs +0 -0
  556. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/mod.rs +0 -0
  557. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/models.rs +0 -0
  558. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/types.rs +0 -0
  559. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/README.md +0 -0
  560. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
  561. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/generated_rules.jsonl +0 -0
  562. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/project_rules.jsonl +0 -0
  563. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/helpers.rs +0 -0
  564. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/test_contracts.rs +0 -0
  565. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/test_types.rs +0 -0
  566. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules.rs +0 -0
  567. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/README.md +0 -0
  568. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lib.rs +0 -0
  569. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/cache.rs +0 -0
  570. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/canonical.rs +0 -0
  571. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/hosting.rs +0 -0
  572. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/mod.rs +0 -0
  573. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/paths.rs +0 -0
  574. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/skills.rs +0 -0
  575. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/suppressions.rs +0 -0
  576. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/constants.rs +0 -0
  577. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/errors.rs +0 -0
  578. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/apply_suppressions.rs +0 -0
  579. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/evaluate_batch.rs +0 -0
  580. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/invalidate_cache.rs +0 -0
  581. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/mod.rs +0 -0
  582. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/read_cache.rs +0 -0
  583. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/render_owned_skill.rs +0 -0
  584. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/report_summary.rs +0 -0
  585. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/run_custom_host.rs +0 -0
  586. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/serialize_findings.rs +0 -0
  587. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/skill_freshness.rs +0 -0
  588. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/sorted_findings.rs +0 -0
  589. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/write_cache.rs +0 -0
  590. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/mod.rs +0 -0
  591. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/models.rs +0 -0
  592. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/_helpers/grammar.rs +0 -0
  593. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/_helpers/mod.rs +0 -0
  594. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/_helpers/resolution.rs +0 -0
  595. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/constants.rs +0 -0
  596. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/errors.rs +0 -0
  597. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/_code_matches_selector.rs +0 -0
  598. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/mod.rs +0 -0
  599. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/resolve_catalogue_policy.rs +0 -0
  600. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/resolve_policy.rs +0 -0
  601. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/rule_code_is_exact.rs +0 -0
  602. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/rule_selector_is_valid.rs +0 -0
  603. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/validate_selector_group.rs +0 -0
  604. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/validate_unique_implementations.rs +0 -0
  605. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/mod.rs +0 -0
  606. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/models.rs +0 -0
  607. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/types.rs +0 -0
  608. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/helpers.rs +0 -0
  609. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/test_consumer_fixture.rs +0 -0
  610. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/test_lifecycle_contracts.rs +0 -0
  611. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/test_types.rs +0 -0
  612. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle.rs +0 -0
  613. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_implementation_identity.rs +0 -0
  614. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_policy_resolution.rs +0 -0
  615. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_selector_grammar.rs +0 -0
  616. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_selector_validation.rs +0 -0
  617. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_types.rs +0 -0
  618. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy.rs +0 -0
  619. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/Cargo.toml +0 -0
  620. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/_helpers/mod.rs +0 -0
  621. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/_helpers/option_values.rs +0 -0
  622. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/_helpers/repository_policy.rs +0 -0
  623. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/main/mod.rs +0 -0
  624. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/main/rule_options.rs +0 -0
  625. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/main/validate_repository_policy.rs +0 -0
  626. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/mod.rs +0 -0
  627. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/_helpers/mod.rs +0 -0
  628. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/_helpers/repository_analysis.rs +0 -0
  629. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/main/analyze_repository.rs +0 -0
  630. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/main/analyze_repository_with_ownership_roots.rs +0 -0
  631. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/main/mod.rs +0 -0
  632. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/mod.rs +0 -0
  633. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/_helpers/collection.rs +0 -0
  634. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/_helpers/mod.rs +0 -0
  635. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/main/collect_workspace_facts.rs +0 -0
  636. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/main/mod.rs +0 -0
  637. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/mod.rs +0 -0
  638. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/models.rs +0 -0
  639. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/lib.rs +0 -0
  640. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/binding_clarity.rs +0 -0
  641. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/comments.rs +0 -0
  642. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/discarded_errors.rs +0 -0
  643. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/mod.rs +0 -0
  644. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/naming.rs +0 -0
  645. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/shape.rs +0 -0
  646. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/shape_policy.rs +0 -0
  647. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/shape_project.rs +0 -0
  648. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/embedded_files.rs +0 -0
  649. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/layers.rs +0 -0
  650. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/mod.rs +0 -0
  651. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/reference_paths.rs +0 -0
  652. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/visibility.rs +0 -0
  653. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/mod.rs +0 -0
  654. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/configured_paths.rs +0 -0
  655. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/crate_contents.rs +0 -0
  656. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/mod.rs +0 -0
  657. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/package_entries.rs +0 -0
  658. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/placement_observations.rs +0 -0
  659. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/containers.rs +0 -0
  660. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/domains.rs +0 -0
  661. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/ownership.rs +0 -0
  662. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/role_files.rs +0 -0
  663. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/surfaces.rs +0 -0
  664. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/tooling.rs +0 -0
  665. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/sources/mod.rs +0 -0
  666. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/mod.rs +0 -0
  667. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/test_case_arrays.rs +0 -0
  668. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/test_mirroring.rs +0 -0
  669. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/tests_layout.rs +0 -0
  670. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/tests_shape.rs +0 -0
  671. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/check_repository_with_config.rs +0 -0
  672. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/check_scanned_workspace.rs +0 -0
  673. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/file_placement_observations.rs +0 -0
  674. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/mod.rs +0 -0
  675. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/relative_display.rs +0 -0
  676. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/scan_workspace.rs +0 -0
  677. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/use_paths.rs +0 -0
  678. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/mod.rs +0 -0
  679. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/types.rs +0 -0
  680. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/engine/test_engine.rs +0 -0
  681. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/engine/test_types.rs +0 -0
  682. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/engine.rs +0 -0
  683. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_comments.rs +0 -0
  684. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_configuration.rs +0 -0
  685. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_containers.rs +0 -0
  686. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_domains.rs +0 -0
  687. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_file_placement.rs +0 -0
  688. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_hygiene.rs +0 -0
  689. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_layers.rs +0 -0
  690. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_naming.rs +0 -0
  691. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_ownership.rs +0 -0
  692. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_role_files.rs +0 -0
  693. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_roles.rs +0 -0
  694. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_shape.rs +0 -0
  695. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_shape_policy.rs +0 -0
  696. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tests_layout.rs +0 -0
  697. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tests_shape.rs +0 -0
  698. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tooling_roles.rs +0 -0
  699. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tuple_types.rs +0 -0
  700. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_types.rs +0 -0
  701. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_visibility.rs +0 -0
  702. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/Cargo.toml +0 -0
  703. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/constants.rs +0 -0
  704. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/lib.rs +0 -0
  705. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/models.rs +0 -0
  706. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/parser.rs +0 -0
  707. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_contracts.rs +0 -0
  708. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_diagnostics.rs +0 -0
  709. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_semantics.rs +0 -0
  710. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_types.rs +0 -0
  711. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser.rs +0 -0
  712. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/Cargo.toml +0 -0
  713. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/constants.rs +0 -0
  714. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/lib.rs +0 -0
  715. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/models.rs +0 -0
  716. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/parser.rs +0 -0
  717. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_contracts.rs +0 -0
  718. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_diagnostics.rs +0 -0
  719. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_semantics.rs +0 -0
  720. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_types.rs +0 -0
  721. {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser.rs +0 -0
@@ -388,7 +388,7 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
388
388
 
389
389
  [[package]]
390
390
  name = "fensu-cli"
391
- version = "0.26.0"
391
+ version = "0.28.0"
392
392
  dependencies = [
393
393
  "cap-fs-ext",
394
394
  "cap-std",
@@ -458,7 +458,7 @@ dependencies = [
458
458
 
459
459
  [[package]]
460
460
  name = "fensu-policy"
461
- version = "0.26.0"
461
+ version = "0.28.0"
462
462
  dependencies = [
463
463
  "command-group",
464
464
  "globset",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fensu-cli
3
- Version: 0.26.0
3
+ Version: 0.28.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.26.0" # x-release-please-version
3
+ version = "0.28.0" # x-release-please-version
4
4
  edition.workspace = true
5
5
  license.workspace = true
6
6
  publish = false
@@ -1,7 +1,12 @@
1
+ use std::cmp::Reverse;
1
2
  use std::collections::{HashMap, HashSet};
2
3
  use std::path::Path;
3
4
 
4
- use crate::models::{Config, Fault, RuleException, ScopedSource};
5
+ use crate::analyzer::AnalyzerId;
6
+ use crate::configuration::main::rust_exception_symbols::rust_exception_symbols;
7
+ use crate::models::{Config, Fault, RuleException, RustExceptionSymbol, ScopedSource};
8
+
9
+ const RUST_PATH_SEPARATOR: &str = "::";
5
10
 
6
11
  type ExceptionKey = (String, String, Option<String>);
7
12
 
@@ -35,6 +40,7 @@ pub(crate) fn apply_exceptions(
35
40
  .map(|source| (source.target_path.as_str(), source))
36
41
  .collect::<HashMap<_, _>>();
37
42
  let mut applied: HashSet<ExceptionKey> = HashSet::new();
43
+ let rust_symbols_by_path = rust_symbols_by_path(config, &source_by_path)?;
38
44
  let mut retained: Vec<Fault> = Vec::new();
39
45
  for fault in faults {
40
46
  let directory = if fault.code == fensu_native::rules::constants::STALE_DEAD_CODE_ROOT_CODE {
@@ -58,9 +64,15 @@ pub(crate) fn apply_exceptions(
58
64
  break;
59
65
  }
60
66
  if owner.is_none() {
61
- owner = source_by_path
62
- .get(reported.as_str())
63
- .and_then(|source| fault_owner(&fault, source));
67
+ owner = if config.analyzer == AnalyzerId::Rust {
68
+ rust_symbols_by_path
69
+ .get(reported.as_str())
70
+ .and_then(|symbols| rust_fault_owner(&fault, symbols))
71
+ } else {
72
+ source_by_path
73
+ .get(reported.as_str())
74
+ .and_then(|source| fault_owner(&fault, source))
75
+ };
64
76
  }
65
77
  matched_symbol = owner.as_ref().and_then(|owner| {
66
78
  entry
@@ -151,6 +163,55 @@ fn fault_owner(fault: &Fault, source: &ScopedSource) -> Option<FaultOwner> {
151
163
  )
152
164
  }
153
165
 
166
+ fn rust_symbols_by_path(
167
+ config: &Config,
168
+ source_by_path: &HashMap<&str, &ScopedSource>,
169
+ ) -> Result<HashMap<String, Vec<RustExceptionSymbol>>, String> {
170
+ let mut symbols_by_path: HashMap<String, Vec<RustExceptionSymbol>> = HashMap::new();
171
+ if config.analyzer != AnalyzerId::Rust {
172
+ return Ok(symbols_by_path);
173
+ }
174
+ for entry in config
175
+ .exceptions
176
+ .iter()
177
+ .filter(|entry| !entry.symbols.is_empty())
178
+ {
179
+ if symbols_by_path.contains_key(&entry.path) {
180
+ continue;
181
+ }
182
+ let Some(source) = source_by_path.get(entry.path.as_str()) else {
183
+ continue;
184
+ };
185
+ let symbols = rust_exception_symbols(&String::from_utf8_lossy(&source.content)).map_err(
186
+ |message| {
187
+ format!(
188
+ "Could not inspect rule exception path {}: {message}",
189
+ entry.path
190
+ )
191
+ },
192
+ )?;
193
+ symbols_by_path.insert(entry.path.clone(), symbols);
194
+ }
195
+ Ok(symbols_by_path)
196
+ }
197
+
198
+ fn rust_fault_owner(fault: &Fault, symbols: &[RustExceptionSymbol]) -> Option<FaultOwner> {
199
+ let line = fault.line? as usize;
200
+ symbols
201
+ .iter()
202
+ .filter(|symbol| symbol.first_line <= line && line <= symbol.last_line)
203
+ .min_by_key(|symbol| {
204
+ (
205
+ symbol.last_line - symbol.first_line,
206
+ Reverse(symbol.name.matches(RUST_PATH_SEPARATOR).count()),
207
+ symbol.name.as_str(),
208
+ )
209
+ })
210
+ .map(|symbol| FaultOwner {
211
+ identities: vec![symbol.name.clone()],
212
+ })
213
+ }
214
+
154
215
  fn web_fault_owner(source: &ScopedSource, line: usize, column: usize) -> Option<FaultOwner> {
155
216
  let offset = source_offset(&source.content, line, column)?;
156
217
  let mut candidates: Vec<(usize, Vec<String>)> = Vec::new();
@@ -5,10 +5,15 @@ use std::path::Path;
5
5
  use fensu_facts::parsing::main::parse_strict::parse_strict;
6
6
  use ruff_python_ast::visitor::{walk_stmt, Visitor};
7
7
  use ruff_python_ast::Stmt;
8
+ use syn::ext::IdentExt;
9
+ use syn::spanned::Spanned;
8
10
 
9
11
  use crate::analyzer::AnalyzerId;
10
12
  use crate::check::main::python_version::python_version;
11
- use crate::models::Config;
13
+ use crate::models::{Config, RustExceptionSymbol};
14
+
15
+ const RUST_PATH_SEPARATOR: &str = "::";
16
+ const UNNAMED_RUST_ITEM: &str = "_";
12
17
 
13
18
  pub(crate) fn validate_targets(config: &Config, project_root: &Path) -> Result<(), String> {
14
19
  for exception in &config.exceptions {
@@ -31,10 +36,10 @@ pub(crate) fn validate_targets(config: &Config, project_root: &Path) -> Result<(
31
36
  if exception.symbols.is_empty() {
32
37
  continue;
33
38
  }
34
- let symbols = if config.analyzer == AnalyzerId::Python {
35
- defined_symbols(&path)?
36
- } else {
37
- defined_web_symbols(&path, config.analyzer)?
39
+ let symbols = match config.analyzer {
40
+ AnalyzerId::Python => defined_symbols(&path)?,
41
+ AnalyzerId::Rust => defined_rust_symbols(&path)?,
42
+ analyzer => defined_web_symbols(&path, analyzer)?,
38
43
  };
39
44
  for symbol in &exception.symbols {
40
45
  match symbols.get(symbol).copied().unwrap_or_default() {
@@ -57,6 +62,26 @@ pub(crate) fn validate_targets(config: &Config, project_root: &Path) -> Result<(
57
62
  Ok(())
58
63
  }
59
64
 
65
+ fn defined_rust_symbols(path: &Path) -> Result<HashMap<String, usize>, String> {
66
+ let bytes = fs::read(path).map_err(|error| {
67
+ format!(
68
+ "Could not inspect rule exception path {}: {error}",
69
+ path.display()
70
+ )
71
+ })?;
72
+ let source = String::from_utf8_lossy(&bytes);
73
+ let mut symbols: HashMap<String, usize> = HashMap::new();
74
+ for symbol in rust_symbols(&source).map_err(|message| {
75
+ format!(
76
+ "Could not inspect rule exception path {}: {message}",
77
+ path.display()
78
+ )
79
+ })? {
80
+ *symbols.entry(symbol.name).or_default() += 1;
81
+ }
82
+ Ok(symbols)
83
+ }
84
+
60
85
  fn defined_web_symbols(
61
86
  path: &Path,
62
87
  analyzer: AnalyzerId,
@@ -180,3 +205,107 @@ impl<'ast> Visitor<'ast> for SymbolCollector {
180
205
  }
181
206
  }
182
207
  }
208
+
209
+ pub(crate) fn rust_symbols(source: &str) -> Result<Vec<RustExceptionSymbol>, String> {
210
+ let syntax = syn::parse_file(source).map_err(|error| error.to_string())?;
211
+ Ok(item_symbols(&syntax.items, ""))
212
+ }
213
+
214
+ fn item_symbols(items: &[syn::Item], prefix: &str) -> Vec<RustExceptionSymbol> {
215
+ let mut symbols: Vec<RustExceptionSymbol> = Vec::new();
216
+ for item in items {
217
+ match item {
218
+ syn::Item::Fn(inner) => symbols.extend(symbol(prefix, &inner.sig.ident, item)),
219
+ syn::Item::Struct(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
220
+ syn::Item::Enum(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
221
+ syn::Item::Union(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
222
+ syn::Item::Type(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
223
+ syn::Item::Const(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
224
+ syn::Item::Static(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
225
+ syn::Item::Trait(inner) => {
226
+ symbols.extend(symbol(prefix, &inner.ident, item));
227
+ symbols.extend(trait_symbols(inner, &qualified(prefix, &inner.ident)));
228
+ }
229
+ syn::Item::Impl(inner) => {
230
+ if let Some(self_type) = self_type_path(&inner.self_ty) {
231
+ symbols.extend(impl_symbols(inner, &join(prefix, &self_type)));
232
+ }
233
+ }
234
+ syn::Item::Mod(inner) => {
235
+ if let Some((_, content)) = &inner.content {
236
+ symbols.extend(item_symbols(content, &qualified(prefix, &inner.ident)));
237
+ }
238
+ }
239
+ _ => {}
240
+ }
241
+ }
242
+ symbols
243
+ }
244
+
245
+ fn trait_symbols(item: &syn::ItemTrait, owner: &str) -> Vec<RustExceptionSymbol> {
246
+ let mut symbols: Vec<RustExceptionSymbol> = Vec::new();
247
+ for member in &item.items {
248
+ let ident = match member {
249
+ syn::TraitItem::Fn(inner) => &inner.sig.ident,
250
+ syn::TraitItem::Const(inner) => &inner.ident,
251
+ syn::TraitItem::Type(inner) => &inner.ident,
252
+ _ => continue,
253
+ };
254
+ symbols.extend(symbol(owner, ident, member));
255
+ }
256
+ symbols
257
+ }
258
+
259
+ fn impl_symbols(item: &syn::ItemImpl, owner: &str) -> Vec<RustExceptionSymbol> {
260
+ let mut symbols: Vec<RustExceptionSymbol> = Vec::new();
261
+ for member in &item.items {
262
+ let ident = match member {
263
+ syn::ImplItem::Fn(inner) => &inner.sig.ident,
264
+ syn::ImplItem::Const(inner) => &inner.ident,
265
+ syn::ImplItem::Type(inner) => &inner.ident,
266
+ _ => continue,
267
+ };
268
+ symbols.extend(symbol(owner, ident, member));
269
+ }
270
+ symbols
271
+ }
272
+
273
+ fn self_type_path(self_type: &syn::Type) -> Option<String> {
274
+ let syn::Type::Path(path) = self_type else {
275
+ return None;
276
+ };
277
+ if path.qself.is_some() {
278
+ return None;
279
+ }
280
+ let segments: Vec<String> = path
281
+ .path
282
+ .segments
283
+ .iter()
284
+ .map(|segment| segment.ident.unraw().to_string())
285
+ .collect();
286
+ Some(segments.join(RUST_PATH_SEPARATOR))
287
+ }
288
+
289
+ fn symbol(prefix: &str, ident: &syn::Ident, node: &impl Spanned) -> Option<RustExceptionSymbol> {
290
+ if ident == UNNAMED_RUST_ITEM {
291
+ return None;
292
+ }
293
+ let span = node.span();
294
+ Some(RustExceptionSymbol {
295
+ name: qualified(prefix, ident),
296
+ first_line: span.start().line,
297
+ last_line: span.end().line,
298
+ })
299
+ }
300
+
301
+ fn qualified(prefix: &str, ident: &syn::Ident) -> String {
302
+ join(prefix, &ident.unraw().to_string())
303
+ }
304
+
305
+ fn join(prefix: &str, name: &str) -> String {
306
+ if prefix.is_empty() {
307
+ name.to_owned()
308
+ } else {
309
+ format!("{prefix}{RUST_PATH_SEPARATOR}{name}")
310
+ }
311
+ }
@@ -5,6 +5,8 @@ use crate::configuration::_helpers::selectors::valid_code;
5
5
  use crate::constants::CUSTOM_RULE_TEST_COVERAGE_CODE;
6
6
 
7
7
  const RULE_EXCEPTION_SYMBOLS: &str = "symbols";
8
+ const CARGO_MANIFEST_SUFFIX: &str = "Cargo.toml";
9
+ const RUST_PATH_SEPARATOR: &str = "::";
8
10
 
9
11
  pub(crate) fn validate(value: Option<&toml::Value>, analyzer: AnalyzerId) -> Result<(), String> {
10
12
  validate_for(value, Some(analyzer))
@@ -46,21 +48,26 @@ fn validate_for(value: Option<&toml::Value>, analyzer: Option<AnalyzerId>) -> Re
46
48
  ));
47
49
  }
48
50
  validate_path(&path, analyzer, &rule)?;
49
- if (matches!(analyzer, Some(AnalyzerId::Rust) | None)
50
- || rule == CUSTOM_RULE_TEST_COVERAGE_CODE)
51
+ if (analyzer.is_none() || rule == CUSTOM_RULE_TEST_COVERAGE_CODE)
51
52
  && table.contains_key(RULE_EXCEPTION_SYMBOLS)
52
53
  {
53
54
  let owner = if rule == CUSTOM_RULE_TEST_COVERAGE_CODE {
54
55
  "Custom-rule coverage"
55
- } else if analyzer.is_none() {
56
- "Repository"
57
56
  } else {
58
- "Rust"
57
+ "Repository"
59
58
  };
60
59
  return Err(format!(
61
60
  "{owner} rule exceptions support file-level exceptions only."
62
61
  ));
63
62
  }
63
+ if analyzer == Some(AnalyzerId::Rust)
64
+ && path.ends_with(CARGO_MANIFEST_SUFFIX)
65
+ && table.contains_key(RULE_EXCEPTION_SYMBOLS)
66
+ {
67
+ return Err(format!(
68
+ "Rust Cargo.toml rule exceptions support file-level exceptions only: {path}."
69
+ ));
70
+ }
64
71
  let symbols = match table.get(RULE_EXCEPTION_SYMBOLS) {
65
72
  Some(value) => {
66
73
  super::validation::required_strings(Some(value), "rule_exceptions.symbols")?
@@ -76,7 +83,12 @@ fn validate_for(value: Option<&toml::Value>, analyzer: Option<AnalyzerId>) -> Re
76
83
  ));
77
84
  }
78
85
  for symbol in symbols {
79
- if !valid_qualified_symbol(&symbol) {
86
+ let valid = if analyzer == Some(AnalyzerId::Rust) {
87
+ valid_rust_symbol(&symbol)
88
+ } else {
89
+ valid_qualified_symbol(&symbol)
90
+ };
91
+ if !valid {
80
92
  return Err(format!(
81
93
  "Malformed qualified rule exception symbol: {symbol}."
82
94
  ));
@@ -105,16 +117,21 @@ fn exception_text(
105
117
 
106
118
  fn valid_qualified_symbol(value: &str) -> bool {
107
119
  let mut parts = value.split('.');
108
- let valid = |part: &str| {
109
- let mut characters = part.chars();
110
- characters
111
- .next()
112
- .is_some_and(|item| item.is_ascii_alphabetic() || item == '_')
113
- && characters.all(|item| item.is_ascii_alphanumeric() || item == '_')
114
- };
115
- let first = parts.next().is_some_and(valid);
120
+ let first = parts.next().is_some_and(valid_identifier);
116
121
  let second = parts.next();
117
- first && second.is_none_or(valid) && parts.next().is_none()
122
+ first && second.is_none_or(valid_identifier) && parts.next().is_none()
123
+ }
124
+
125
+ fn valid_rust_symbol(value: &str) -> bool {
126
+ value.split(RUST_PATH_SEPARATOR).all(valid_identifier)
127
+ }
128
+
129
+ fn valid_identifier(part: &str) -> bool {
130
+ let mut characters = part.chars();
131
+ characters
132
+ .next()
133
+ .is_some_and(|item| item.is_ascii_alphabetic() || item == '_')
134
+ && characters.all(|item| item.is_ascii_alphanumeric() || item == '_')
118
135
  }
119
136
 
120
137
  fn validate_path(path: &str, analyzer: Option<AnalyzerId>, rule: &str) -> Result<(), String> {
@@ -125,13 +142,15 @@ fn validate_path(path: &str, analyzer: Option<AnalyzerId>, rule: &str) -> Result
125
142
  } else {
126
143
  match analyzer {
127
144
  Some(AnalyzerId::Python) => path.ends_with(".py"),
128
- Some(AnalyzerId::Rust) => path.ends_with(".rs") || path.ends_with("Cargo.toml"),
145
+ Some(AnalyzerId::Rust) => {
146
+ path.ends_with(".rs") || path.ends_with(CARGO_MANIFEST_SUFFIX)
147
+ }
129
148
  Some(AnalyzerId::TypeScript) => web_source_path(path),
130
149
  Some(AnalyzerId::Svelte) => path.ends_with(".svelte") || web_source_path(path),
131
150
  None => {
132
151
  path.ends_with(".py")
133
152
  || path.ends_with(".rs")
134
- || path.ends_with("Cargo.toml")
153
+ || path.ends_with(CARGO_MANIFEST_SUFFIX)
135
154
  || path.ends_with(".svelte")
136
155
  || web_source_path(path)
137
156
  }
@@ -10,5 +10,6 @@ pub(crate) mod load_target;
10
10
  pub(crate) mod load_targets;
11
11
  pub(crate) mod render_target_config;
12
12
  pub(crate) mod resolve_target_root;
13
+ pub(crate) mod rust_exception_symbols;
13
14
  pub(crate) mod validate_document;
14
15
  pub(crate) mod validate_exception_targets;
@@ -0,0 +1,6 @@
1
+ use crate::configuration::_helpers::exception_targets;
2
+ use crate::models::RustExceptionSymbol;
3
+
4
+ pub(crate) fn rust_exception_symbols(source: &str) -> Result<Vec<RustExceptionSymbol>, String> {
5
+ exception_targets::rust_symbols(source)
6
+ }
@@ -167,6 +167,13 @@ pub(crate) struct RuleException {
167
167
  pub(crate) symbols: Vec<String>,
168
168
  }
169
169
 
170
+ #[derive(Clone, Debug)]
171
+ pub(crate) struct RustExceptionSymbol {
172
+ pub(crate) name: String,
173
+ pub(crate) first_line: usize,
174
+ pub(crate) last_line: usize,
175
+ }
176
+
170
177
  #[derive(Clone, Debug, Default)]
171
178
  pub(crate) struct RuleIgnore {
172
179
  pub(crate) rules: Vec<String>,
@@ -183,12 +183,6 @@ fn given_invalid_rust_configuration_when_checking_then_configuration_fails_close
183
183
  expected_exit_code: 2,
184
184
  expected_error: "repository-relative POSIX paths",
185
185
  },
186
- InvalidCheckConfigTestCase {
187
- description: "Rust exceptions reject symbol scope during configuration validation",
188
- config: "[[targets.rust.rule_exceptions]]\nrule = \"FPRSS010\"\npath = \"src/lib.rs\"\nsymbols = [\"value\"]\nreason = \"Unsupported symbol scope.\"\n",
189
- expected_exit_code: 2,
190
- expected_error: "Rust rule exceptions support file-level exceptions only",
191
- },
192
186
  ];
193
187
  for test_case in test_cases {
194
188
  let repository = tempfile::tempdir().expect("temporary repository");
@@ -928,6 +922,15 @@ fn given_custom_rust_policy_when_checking_then_warning_ignore_and_exception_sema
928
922
  expected_present: "Applied 1 rule exception",
929
923
  expected_absent: "XRS004 ",
930
924
  },
925
+ RustCustomPolicyTestCase {
926
+ description: "symbol exception cannot suppress a line-less custom Rust finding",
927
+ selection: "select = [\"XRS004\"]\n",
928
+ policy: "[[targets.rust.rule_exceptions]]\nrule = \"XRS004\"\npath = \"src/lib.rs\"\nsymbols = [\"value\"]\nreason = \"Accepted adapter.\"\n",
929
+ arguments: &["--no-cache"],
930
+ expected_exit_code: 2,
931
+ expected_present: "Rule exception no longer matches a fault: XRS004 src/lib.rs::value.",
932
+ expected_absent: "Rust rule exceptions support file-level exceptions only",
933
+ },
931
934
  ];
932
935
  for test_case in test_cases {
933
936
  let repository = tempfile::tempdir().expect("temporary repository");