fensu-cli 0.28.2__tar.gz → 0.29.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 (722) hide show
  1. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/Cargo.lock +2 -2
  2. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/PKG-INFO +1 -1
  3. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/Cargo.toml +1 -1
  4. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/policy.rs +4 -1
  5. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/preparation_ownership.inc +5 -4
  6. fensu_cli-0.29.0/crates/fensu-cli/src/command/main/_help.rs +3 -0
  7. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/inputs/arguments.rs +6 -1
  8. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/report/build.rs +1 -0
  9. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/report/rendering.rs +4 -2
  10. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/constants.rs +1 -1
  11. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/main/run_dupes.rs +21 -8
  12. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/models.rs +2 -0
  13. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_policy.rs +95 -0
  14. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/dupes/test_config.rs +2 -2
  15. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/dupes/test_reporting.rs +107 -1
  16. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/dupes/test_types.rs +10 -0
  17. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/roles/paths.rs +1 -5
  18. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/Cargo.toml +1 -1
  19. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/pyproject.toml +1 -1
  20. fensu_cli-0.28.2/crates/fensu-cli/src/command/main/_help.rs +0 -3
  21. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/Cargo.toml +0 -0
  22. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/README.md +0 -0
  23. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/build.rs +0 -0
  24. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/analyzer.rs +0 -0
  25. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/_helpers/arguments.rs +0 -0
  26. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/_helpers/loading.rs +0 -0
  27. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/_helpers/mod.rs +0 -0
  28. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/_helpers/options.rs +0 -0
  29. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/_helpers/policy.rs +0 -0
  30. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/_helpers/rendering.rs +0 -0
  31. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/data/catalogue.json +0 -0
  32. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/main/mod.rs +0 -0
  33. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/main/resolve_native_options.rs +0 -0
  34. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/main/rule_catalogue.rs +0 -0
  35. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/main/rule_metadata.rs +0 -0
  36. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/main/rule_output.rs +0 -0
  37. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/main/validate_config_selectors.rs +0 -0
  38. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/mod.rs +0 -0
  39. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/catalogue/models.rs +0 -0
  40. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/cache.rs +0 -0
  41. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/cleanup.rs +0 -0
  42. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/evaluation.rs +0 -0
  43. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/exceptions.rs +0 -0
  44. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/execution.rs +0 -0
  45. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/mod.rs +0 -0
  46. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/options.rs +0 -0
  47. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/preparation.rs +0 -0
  48. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/project.rs +0 -0
  49. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/repository_custom_facts.inc +0 -0
  50. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/rule_policy.rs +0 -0
  51. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/web.inc +0 -0
  52. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/web_custom_facts.inc +0 -0
  53. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/_helpers/web_policy.inc +0 -0
  54. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/constants.rs +0 -0
  55. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/check_output_options.rs +0 -0
  56. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/check_routing.rs +0 -0
  57. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/clean_caches.rs +0 -0
  58. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/discover_target_sources.rs +0 -0
  59. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/execute_check.rs +0 -0
  60. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/execute_structured_check.rs +0 -0
  61. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/mod.rs +0 -0
  62. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/prepare_cleanup.rs +0 -0
  63. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/python_version.rs +0 -0
  64. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/render_check_results.rs +0 -0
  65. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/repository_python_targets.rs +0 -0
  66. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/main/required_thresholds.rs +0 -0
  67. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/mod.rs +0 -0
  68. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/check/models.rs +0 -0
  69. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/_helpers/check_partition/execution.rs +0 -0
  70. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/_helpers/check_partition/mod.rs +0 -0
  71. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/_helpers/map/mod.rs +0 -0
  72. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/_helpers/map/parsing.rs +0 -0
  73. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/_helpers/mod.rs +0 -0
  74. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/constants.rs +0 -0
  75. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_check.rs +0 -0
  76. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_dupes.rs +0 -0
  77. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_init.rs +0 -0
  78. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_map.rs +0 -0
  79. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_rule.rs +0 -0
  80. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_run_cli.rs +0 -0
  81. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_skills.rs +0 -0
  82. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/_target.rs +0 -0
  83. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/execute_cli.rs +0 -0
  84. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
  85. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/command/mod.rs +0 -0
  86. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/discovery.rs +0 -0
  87. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/exception_targets.rs +0 -0
  88. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/exceptions.rs +0 -0
  89. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/loading.rs +0 -0
  90. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/mod.rs +0 -0
  91. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/native_rules.rs +0 -0
  92. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/parsing.rs +0 -0
  93. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/roots.rs +0 -0
  94. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/scopes.rs +0 -0
  95. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/selectors.rs +0 -0
  96. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/_helpers/validation.rs +0 -0
  97. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/constants.rs +0 -0
  98. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/configuration_directory.rs +0 -0
  99. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/expand_path_pattern.rs +0 -0
  100. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/is_rule_code.rs +0 -0
  101. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/is_rule_selector.rs +0 -0
  102. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/load_config_section.rs +0 -0
  103. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
  104. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/load_repository_rule_config.rs +0 -0
  105. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/load_repository_rule_policy.rs +0 -0
  106. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/load_target.rs +0 -0
  107. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/load_targets.rs +0 -0
  108. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
  109. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/render_target_config.rs +0 -0
  110. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/resolve_target_root.rs +0 -0
  111. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/rust_exception_symbols.rs +0 -0
  112. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/validate_document.rs +0 -0
  113. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/main/validate_exception_targets.rs +0 -0
  114. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
  115. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/constants.rs +0 -0
  116. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/contracts/classes.rs +0 -0
  117. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/contracts/forced.rs +0 -0
  118. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/contracts/mod.rs +0 -0
  119. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/inputs/changes.rs +0 -0
  120. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/inputs/config.rs +0 -0
  121. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/inputs/globs.rs +0 -0
  122. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/inputs/mod.rs +0 -0
  123. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/inputs/sources.rs +0 -0
  124. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/matching/clustering.rs +0 -0
  125. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/matching/fingerprints.rs +0 -0
  126. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/matching/mod.rs +0 -0
  127. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/matching/pairs.rs +0 -0
  128. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/matching/sequence.rs +0 -0
  129. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/mod.rs +0 -0
  130. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/report/diff.rs +0 -0
  131. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/report/mod.rs +0 -0
  132. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/units/collection.rs +0 -0
  133. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/units/lines.rs +0 -0
  134. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/units/mod.rs +0 -0
  135. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/units/python.rs +0 -0
  136. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/units/rust.rs +0 -0
  137. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/_helpers/units/web.rs +0 -0
  138. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/main/mod.rs +0 -0
  139. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/dupes/mod.rs +0 -0
  140. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/_helpers/authoring.rs +0 -0
  141. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/_helpers/interpreter.rs +0 -0
  142. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/_helpers/metadata_exchange.rs +0 -0
  143. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/_helpers/mod.rs +0 -0
  144. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/constants.rs +0 -0
  145. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/main/mod.rs +0 -0
  146. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/main/run_custom_check_host.rs +0 -0
  147. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/main/run_repository_custom_rule_host.rs +0 -0
  148. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/main/run_rust_custom_rule_host.rs +0 -0
  149. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/main/run_skills_metadata_host.rs +0 -0
  150. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/main/run_web_custom_rule_host.rs +0 -0
  151. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/hosting/mod.rs +0 -0
  152. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/arguments.rs +0 -0
  153. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/discovery.rs +0 -0
  154. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/layout.rs +0 -0
  155. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/mod.rs +0 -0
  156. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/packages.rs +0 -0
  157. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/reporting.rs +0 -0
  158. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/validation.rs +0 -0
  159. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/_helpers/writing.rs +0 -0
  160. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/constants.rs +0 -0
  161. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/data/python.gitignore +0 -0
  162. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/main/mod.rs +0 -0
  163. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/main/run_init.rs +0 -0
  164. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/mod.rs +0 -0
  165. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/init/models.rs +0 -0
  166. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/lib.rs +0 -0
  167. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/main.rs +0 -0
  168. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/cache.rs +0 -0
  169. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/decoding.rs +0 -0
  170. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/execution.rs +0 -0
  171. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/identity.rs +0 -0
  172. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/index.rs +0 -0
  173. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/mod.rs +0 -0
  174. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/project.rs +0 -0
  175. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/render.rs +0 -0
  176. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/tree.rs +0 -0
  177. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/_helpers/tree_policy.inc +0 -0
  178. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/constants.rs +0 -0
  179. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
  180. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
  181. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
  182. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/mapping/models.rs +0 -0
  183. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/models.rs +0 -0
  184. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/_helpers/faults.rs +0 -0
  185. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/_helpers/mod.rs +0 -0
  186. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/_helpers/text.rs +0 -0
  187. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/constants.rs +0 -0
  188. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/main/mod.rs +0 -0
  189. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/main/report.rs +0 -0
  190. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/mod.rs +0 -0
  191. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/reporting/models.rs +0 -0
  192. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/_helpers/files.rs +0 -0
  193. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/_helpers/mod.rs +0 -0
  194. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/main/acquire_operation_lock.rs +0 -0
  195. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/main/mod.rs +0 -0
  196. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/main/open_repository.rs +0 -0
  197. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/main/read_optional.rs +0 -0
  198. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/main/relative_path.rs +0 -0
  199. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/main/write_if_unchanged.rs +0 -0
  200. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/mod.rs +0 -0
  201. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/repository_io/models.rs +0 -0
  202. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/command/execution.rs +0 -0
  203. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/command/mod.rs +0 -0
  204. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/content/discovery.rs +0 -0
  205. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/content/fingerprint.rs +0 -0
  206. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/content/mod.rs +0 -0
  207. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/content/option_rendering.rs +0 -0
  208. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/content/rendering.rs +0 -0
  209. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/content/rule_rendering.rs +0 -0
  210. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/content/sections.rs +0 -0
  211. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/context/build.rs +0 -0
  212. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/context/exceptions.rs +0 -0
  213. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/context/identity.rs +0 -0
  214. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/context/mod.rs +0 -0
  215. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/context/option_validation.rs +0 -0
  216. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/context/options.rs +0 -0
  217. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/context/selection.rs +0 -0
  218. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/installation/filesystem.rs +0 -0
  219. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/installation/freshness.rs +0 -0
  220. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/installation/install.rs +0 -0
  221. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/installation/mod.rs +0 -0
  222. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/installation/plan.rs +0 -0
  223. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/installation/publication.rs +0 -0
  224. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/installation/transaction.rs +0 -0
  225. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/_helpers/mod.rs +0 -0
  226. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/data/skills_invariant.json +0 -0
  227. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
  228. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
  229. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
  230. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
  231. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
  232. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
  233. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/skills/models.rs +0 -0
  234. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/_helpers/addition.rs +0 -0
  235. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/_helpers/arguments.rs +0 -0
  236. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/_helpers/mod.rs +0 -0
  237. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/_helpers/paths.rs +0 -0
  238. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/constants.rs +0 -0
  239. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/main/mod.rs +0 -0
  240. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/main/run_target.rs +0 -0
  241. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/mod.rs +0 -0
  242. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/target_command/models.rs +0 -0
  243. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/helpers.rs +0 -0
  244. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/test_analyzer.rs +0 -0
  245. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/test_dupes.rs +0 -0
  246. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/test_policy.rs +0 -0
  247. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/test_render.rs +0 -0
  248. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/test_rule_catalogue.rs +0 -0
  249. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/test_types.rs +0 -0
  250. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests/test_web_analysis.rs +0 -0
  251. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/src/tests.rs +0 -0
  252. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/check/helpers.rs +0 -0
  253. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/check/test_dead_code.rs +0 -0
  254. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/check/test_types.rs +0 -0
  255. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/check.rs +0 -0
  256. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/helpers.rs +0 -0
  257. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_cleanup.rs +0 -0
  258. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_exceptions.rs +0 -0
  259. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_mixed_targets.rs +0 -0
  260. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_repository_custom.rs +0 -0
  261. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_rust.rs +0 -0
  262. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_rust_exceptions.rs +0 -0
  263. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_validation.rs +0 -0
  264. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_web.rs +0 -0
  265. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_web_boundaries.rs +0 -0
  266. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_web_custom.rs +0 -0
  267. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_check_web_layout.rs +0 -0
  268. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_rule.rs +0 -0
  269. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_rust_file_placement.rs +0 -0
  270. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/test_types.rs +0 -0
  271. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command/web_policy_fixtures.inc +0 -0
  272. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/command.rs +0 -0
  273. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/dupes/helpers.rs +0 -0
  274. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/dupes/test_contracts.rs +0 -0
  275. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/dupes/test_detection.rs +0 -0
  276. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/dupes.rs +0 -0
  277. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/init/helpers.rs +0 -0
  278. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/init/test_commands.rs +0 -0
  279. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/init/test_types.rs +0 -0
  280. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/init.rs +0 -0
  281. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
  282. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
  283. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/mapping/test_commands.rs +0 -0
  284. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/mapping/test_types.rs +0 -0
  285. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/mapping.rs +0 -0
  286. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/skills/commands.inc +0 -0
  287. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
  288. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/skills/test_commands.rs +0 -0
  289. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
  290. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-cli/tests/skills.rs +0 -0
  291. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/Cargo.toml +0 -0
  292. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/constants.rs +0 -0
  293. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/_helpers/graph.rs +0 -0
  294. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/_helpers/mod.rs +0 -0
  295. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/main/analyze.rs +0 -0
  296. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/main/evaluate_graph.rs +0 -0
  297. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/main/extract.rs +0 -0
  298. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/main/mod.rs +0 -0
  299. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/mod.rs +0 -0
  300. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/dead_code/models.rs +0 -0
  301. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/annotations.rs +0 -0
  302. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/contracts.rs +0 -0
  303. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/declarations.rs +0 -0
  304. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/functions.rs +0 -0
  305. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/harness.rs +0 -0
  306. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/hygiene.rs +0 -0
  307. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/mapping.rs +0 -0
  308. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/mod.rs +0 -0
  309. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/references.rs +0 -0
  310. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/rule_authoring.rs +0 -0
  311. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/conversion/state.rs +0 -0
  312. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/facades/facades.rs +0 -0
  313. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/gateway/bindings.rs +0 -0
  314. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/gateway/mod.rs +0 -0
  315. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/gateway/model_types.rs +0 -0
  316. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/gateway/repository_bindings.rs +0 -0
  317. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/gateway/rule_authoring_bindings.rs +0 -0
  318. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/mod.rs +0 -0
  319. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/_helpers/queries/owner_symbols.rs +0 -0
  320. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
  321. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
  322. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
  323. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/extension/models.rs +0 -0
  324. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/annotations/mod.rs +0 -0
  325. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/annotations/visitor.rs +0 -0
  326. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/contracts/category.rs +0 -0
  327. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/contracts/display.rs +0 -0
  328. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/contracts/mod.rs +0 -0
  329. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/contracts/returns.rs +0 -0
  330. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/contracts/rows.rs +0 -0
  331. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/control/conditionals.rs +0 -0
  332. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/control/mod.rs +0 -0
  333. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/declarations/mod.rs +0 -0
  334. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/declarations/rows.rs +0 -0
  335. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/harness/calls.rs +0 -0
  336. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/harness/dimensions.rs +0 -0
  337. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/harness/functions.rs +0 -0
  338. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/harness/imports.rs +0 -0
  339. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/harness/mod.rs +0 -0
  340. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/hygiene/checks.rs +0 -0
  341. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/hygiene/mod.rs +0 -0
  342. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/metrics/functions.rs +0 -0
  343. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/metrics/lookups.rs +0 -0
  344. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/metrics/mod.rs +0 -0
  345. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/metrics/mutations.rs +0 -0
  346. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/mod.rs +0 -0
  347. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/naming/mod.rs +0 -0
  348. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/naming/names.rs +0 -0
  349. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/project/calls.rs +0 -0
  350. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/project/mod.rs +0 -0
  351. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/references/events.rs +0 -0
  352. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/references/mod.rs +0 -0
  353. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/references/test_shape.rs +0 -0
  354. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/literals.rs +0 -0
  355. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mod.rs +0 -0
  356. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mutations.rs +0 -0
  357. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/ownership.rs +0 -0
  358. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/references.rs +0 -0
  359. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/state/mod.rs +0 -0
  360. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/state/resolution.rs +0 -0
  361. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/state/scopes.rs +0 -0
  362. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/wording/mod.rs +0 -0
  363. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/_helpers/wording/text.rs +0 -0
  364. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
  365. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
  366. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
  367. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
  368. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
  369. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
  370. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
  371. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
  372. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
  373. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
  374. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
  375. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
  376. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
  377. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
  378. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
  379. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
  380. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
  381. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
  382. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
  383. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
  384. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
  385. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
  386. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/models.rs +0 -0
  387. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/facts/types.rs +0 -0
  388. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/lib.rs +0 -0
  389. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/_helpers/classes.rs +0 -0
  390. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/_helpers/expressions.rs +0 -0
  391. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/_helpers/extraction.rs +0 -0
  392. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/_helpers/functions.rs +0 -0
  393. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/_helpers/imports.rs +0 -0
  394. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/_helpers/mod.rs +0 -0
  395. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/constants.rs +0 -0
  396. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/main/extract_mapping_declarations.rs +0 -0
  397. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/main/extract_mapping_facts.rs +0 -0
  398. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/main/extract_runtime_imports.rs +0 -0
  399. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/main/mod.rs +0 -0
  400. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/mod.rs +0 -0
  401. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/mapping/models.rs +0 -0
  402. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/parsing/_helpers/failures.rs +0 -0
  403. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/parsing/_helpers/mod.rs +0 -0
  404. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
  405. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
  406. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
  407. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
  408. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
  409. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/positions/_helpers/line_index.rs +0 -0
  410. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/positions/_helpers/mod.rs +0 -0
  411. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
  412. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
  413. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
  414. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
  415. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/positions/models.rs +0 -0
  416. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/_helpers/matching.rs +0 -0
  417. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/_helpers/mod.rs +0 -0
  418. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/_helpers/observation_index.rs +0 -0
  419. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/_helpers/repository_observation_index.rs +0 -0
  420. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/_helpers/repository_paths.rs +0 -0
  421. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
  422. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
  423. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
  424. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
  425. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
  426. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
  427. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
  428. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/breadth.rs +0 -0
  429. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/children.rs +0 -0
  430. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/expression_children.rs +0 -0
  431. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/mod.rs +0 -0
  432. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/nodes.rs +0 -0
  433. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/references.rs +0 -0
  434. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/spans.rs +0 -0
  435. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/_helpers/statement_children.rs +0 -0
  436. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/breadth_first_from.rs +0 -0
  437. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/breadth_first_nodes.rs +0 -0
  438. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/breadth_first_with_parents.rs +0 -0
  439. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/children.rs +0 -0
  440. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/kind_name.rs +0 -0
  441. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/mod.rs +0 -0
  442. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/push_clause_orelse.rs +0 -0
  443. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/span.rs +0 -0
  444. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/start_of.rs +0 -0
  445. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/main/strict_reference_parts.rs +0 -0
  446. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/mod.rs +0 -0
  447. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/src/syntax/types.rs +0 -0
  448. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/dead_code/helpers.rs +0 -0
  449. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/dead_code/test_reachability.rs +0 -0
  450. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/dead_code/test_types.rs +0 -0
  451. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/dead_code.rs +0 -0
  452. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/facts/test_enumerate.rs +0 -0
  453. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/facts/test_mapping.rs +0 -0
  454. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/facts/test_rule_authoring.rs +0 -0
  455. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
  456. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/facts.rs +0 -0
  457. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/parsing/test_strict.rs +0 -0
  458. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
  459. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/parsing.rs +0 -0
  460. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/positions/test_locate.rs +0 -0
  461. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
  462. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/positions.rs +0 -0
  463. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
  464. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/snapshot/test_hashing.rs +0 -0
  465. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/snapshot/test_observations.rs +0 -0
  466. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
  467. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/snapshot/test_walk.rs +0 -0
  468. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
  469. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/Cargo.toml +0 -0
  470. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/bindings/bindings.rs +0 -0
  471. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/bindings/generation_bindings.rs +0 -0
  472. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/bindings/python_rows.rs +0 -0
  473. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/generation/generation.rs +0 -0
  474. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/generation/replay.rs +0 -0
  475. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/mod.rs +0 -0
  476. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/persistence/database.rs +0 -0
  477. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/persistence/storage.rs +0 -0
  478. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/publication/publication.rs +0 -0
  479. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/publication/publication_merge.rs +0 -0
  480. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/records/records.rs +0 -0
  481. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/records/schema.rs +0 -0
  482. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/_helpers/records/schema_values.rs +0 -0
  483. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/constants.rs +0 -0
  484. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/main/_dependency_kinds.rs +0 -0
  485. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/main/_replay_generation.rs +0 -0
  486. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
  487. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
  488. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/mod.rs +0 -0
  489. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/models.rs +0 -0
  490. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
  491. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/tests/test_records.rs +0 -0
  492. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/tests/test_replay.rs +0 -0
  493. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/tests/test_storage.rs +0 -0
  494. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/tests/test_subject_schema.rs +0 -0
  495. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
  496. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/tests.rs +0 -0
  497. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/cache/types.rs +0 -0
  498. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/_helpers/evaluation/execution_planning.rs +0 -0
  499. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/_helpers/evaluation/mod.rs +0 -0
  500. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/_helpers/evaluation/python_rows.rs +0 -0
  501. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/_helpers/evaluation/reachability_bindings.rs +0 -0
  502. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/_helpers/evaluation/rule_bindings.rs +0 -0
  503. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/_helpers/mod.rs +0 -0
  504. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/constants.rs +0 -0
  505. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
  506. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
  507. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/extension/mod.rs +0 -0
  508. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/lib.rs +0 -0
  509. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/annotations/annotations.rs +0 -0
  510. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/dagster/assets.rs +0 -0
  511. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/dagster/autoload.rs +0 -0
  512. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/dagster/boundaries.rs +0 -0
  513. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/dagster/dagster.rs +0 -0
  514. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/dagster/definitions.rs +0 -0
  515. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/dagster/source.rs +0 -0
  516. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/dead_code/dead_code.rs +0 -0
  517. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/execution_planning/execution_planning.rs +0 -0
  518. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/hygiene/hygiene.rs +0 -0
  519. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/layers/layers.rs +0 -0
  520. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/layers/local.rs +0 -0
  521. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/layers/project.rs +0 -0
  522. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/mod.rs +0 -0
  523. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/naming/naming.rs +0 -0
  524. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/naming_globs/naming_globs.rs +0 -0
  525. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/policy/generated_policy.rs +0 -0
  526. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/project_queries/project_queries.rs +0 -0
  527. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/roles/declarations.rs +0 -0
  528. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout.rs +0 -0
  529. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout_paths.rs +0 -0
  530. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout_queries.rs +0 -0
  531. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/roles/roles.rs +0 -0
  532. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/roles/surfaces.rs +0 -0
  533. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/shape/shape.rs +0 -0
  534. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/tests/function_conventions.rs +0 -0
  535. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/tests/layout.rs +0 -0
  536. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/tests/names.rs +0 -0
  537. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/_helpers/tests/tests.rs +0 -0
  538. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/constants.rs +0 -0
  539. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +0 -0
  540. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/main/evaluate_dead_code.rs +0 -0
  541. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/main/generated_policy_owners.rs +0 -0
  542. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
  543. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/main/parse_dead_code.rs +0 -0
  544. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
  545. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/main/plan_execution_owners.rs +0 -0
  546. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/mod.rs +0 -0
  547. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/models.rs +0 -0
  548. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/src/rules/types.rs +0 -0
  549. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules/fixtures/README.md +0 -0
  550. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
  551. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules/fixtures/generated_rules.jsonl +0 -0
  552. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules/fixtures/project_rules.jsonl +0 -0
  553. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules/helpers.rs +0 -0
  554. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules/test_contracts.rs +0 -0
  555. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules/test_types.rs +0 -0
  556. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-native/tests/rules.rs +0 -0
  557. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/README.md +0 -0
  558. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lib.rs +0 -0
  559. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/_helpers/cache.rs +0 -0
  560. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/_helpers/canonical.rs +0 -0
  561. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/_helpers/hosting.rs +0 -0
  562. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/_helpers/mod.rs +0 -0
  563. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/_helpers/paths.rs +0 -0
  564. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/_helpers/skills.rs +0 -0
  565. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/_helpers/suppressions.rs +0 -0
  566. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/constants.rs +0 -0
  567. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/errors.rs +0 -0
  568. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/apply_suppressions.rs +0 -0
  569. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/evaluate_batch.rs +0 -0
  570. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/invalidate_cache.rs +0 -0
  571. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/mod.rs +0 -0
  572. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/read_cache.rs +0 -0
  573. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/render_owned_skill.rs +0 -0
  574. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/report_summary.rs +0 -0
  575. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/run_custom_host.rs +0 -0
  576. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/serialize_findings.rs +0 -0
  577. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/skill_freshness.rs +0 -0
  578. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/sorted_findings.rs +0 -0
  579. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/main/write_cache.rs +0 -0
  580. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/mod.rs +0 -0
  581. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/lifecycle/models.rs +0 -0
  582. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/_helpers/grammar.rs +0 -0
  583. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/_helpers/mod.rs +0 -0
  584. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/_helpers/resolution.rs +0 -0
  585. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/constants.rs +0 -0
  586. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/errors.rs +0 -0
  587. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/_code_matches_selector.rs +0 -0
  588. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/mod.rs +0 -0
  589. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/resolve_catalogue_policy.rs +0 -0
  590. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/resolve_policy.rs +0 -0
  591. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/rule_code_is_exact.rs +0 -0
  592. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/rule_selector_is_valid.rs +0 -0
  593. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/validate_selector_group.rs +0 -0
  594. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/main/validate_unique_implementations.rs +0 -0
  595. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/mod.rs +0 -0
  596. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/models.rs +0 -0
  597. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/src/policy/types.rs +0 -0
  598. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/lifecycle/helpers.rs +0 -0
  599. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/lifecycle/test_consumer_fixture.rs +0 -0
  600. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/lifecycle/test_lifecycle_contracts.rs +0 -0
  601. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/lifecycle/test_types.rs +0 -0
  602. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/lifecycle.rs +0 -0
  603. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/policy/test_implementation_identity.rs +0 -0
  604. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/policy/test_policy_resolution.rs +0 -0
  605. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/policy/test_selector_grammar.rs +0 -0
  606. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/policy/test_selector_validation.rs +0 -0
  607. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/policy/test_types.rs +0 -0
  608. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-policy/tests/policy.rs +0 -0
  609. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/Cargo.toml +0 -0
  610. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/configuration/_helpers/mod.rs +0 -0
  611. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/configuration/_helpers/option_values.rs +0 -0
  612. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/configuration/_helpers/repository_policy.rs +0 -0
  613. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/configuration/main/mod.rs +0 -0
  614. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/configuration/main/rule_options.rs +0 -0
  615. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/configuration/main/validate_repository_policy.rs +0 -0
  616. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/configuration/mod.rs +0 -0
  617. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/constants.rs +0 -0
  618. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/engine/_helpers/mod.rs +0 -0
  619. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/engine/_helpers/repository_analysis.rs +0 -0
  620. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/engine/main/analyze_repository.rs +0 -0
  621. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/engine/main/analyze_repository_with_ownership_roots.rs +0 -0
  622. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/engine/main/mod.rs +0 -0
  623. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/engine/mod.rs +0 -0
  624. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/facts/_helpers/collection.rs +0 -0
  625. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/facts/_helpers/mod.rs +0 -0
  626. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/facts/main/collect_workspace_facts.rs +0 -0
  627. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/facts/main/mod.rs +0 -0
  628. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/facts/mod.rs +0 -0
  629. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/facts/models.rs +0 -0
  630. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/lib.rs +0 -0
  631. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/models.rs +0 -0
  632. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/binding_clarity.rs +0 -0
  633. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/comments.rs +0 -0
  634. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/discarded_errors.rs +0 -0
  635. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/hygiene.rs +0 -0
  636. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/mod.rs +0 -0
  637. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/naming.rs +0 -0
  638. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/shape.rs +0 -0
  639. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/shape_policy.rs +0 -0
  640. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/functions/shape_project.rs +0 -0
  641. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/imports/embedded_files.rs +0 -0
  642. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/imports/layers.rs +0 -0
  643. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/imports/mod.rs +0 -0
  644. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/imports/reference_paths.rs +0 -0
  645. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/imports/visibility.rs +0 -0
  646. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/mod.rs +0 -0
  647. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/repository/configured_paths.rs +0 -0
  648. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/repository/crate_contents.rs +0 -0
  649. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/repository/mod.rs +0 -0
  650. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/repository/package_entries.rs +0 -0
  651. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/repository/placement_observations.rs +0 -0
  652. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/repository/project_checks.rs +0 -0
  653. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/containers.rs +0 -0
  654. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/domains.rs +0 -0
  655. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/mod.rs +0 -0
  656. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/ownership.rs +0 -0
  657. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/placement.rs +0 -0
  658. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/proc_macro_entries.rs +0 -0
  659. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/role_files.rs +0 -0
  660. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/surfaces.rs +0 -0
  661. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/roles/tooling.rs +0 -0
  662. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/sources/mod.rs +0 -0
  663. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/sources/scanning.rs +0 -0
  664. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/mod.rs +0 -0
  665. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/test_case_arrays.rs +0 -0
  666. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/test_mirroring.rs +0 -0
  667. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/tests_layout.rs +0 -0
  668. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/tests_shape.rs +0 -0
  669. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/main/check_repository_with_config.rs +0 -0
  670. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/main/check_scanned_workspace.rs +0 -0
  671. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/main/file_placement_observations.rs +0 -0
  672. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/main/mod.rs +0 -0
  673. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/main/relative_display.rs +0 -0
  674. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/main/scan_workspace.rs +0 -0
  675. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/main/use_paths.rs +0 -0
  676. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/rules/mod.rs +0 -0
  677. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/src/types.rs +0 -0
  678. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/engine/test_engine.rs +0 -0
  679. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/engine/test_types.rs +0 -0
  680. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/engine.rs +0 -0
  681. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/helpers.rs +0 -0
  682. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_comments.rs +0 -0
  683. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_configuration.rs +0 -0
  684. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_containers.rs +0 -0
  685. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_domains.rs +0 -0
  686. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_file_placement.rs +0 -0
  687. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_hygiene.rs +0 -0
  688. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_layers.rs +0 -0
  689. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_naming.rs +0 -0
  690. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_ownership.rs +0 -0
  691. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_proc_macro_roots.rs +0 -0
  692. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_role_files.rs +0 -0
  693. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_roles.rs +0 -0
  694. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_shape.rs +0 -0
  695. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_shape_policy.rs +0 -0
  696. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_tests_layout.rs +0 -0
  697. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_tests_shape.rs +0 -0
  698. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_tooling_roles.rs +0 -0
  699. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_tuple_types.rs +0 -0
  700. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_types.rs +0 -0
  701. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules/test_visibility.rs +0 -0
  702. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-rust/tests/rules.rs +0 -0
  703. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/Cargo.toml +0 -0
  704. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/src/constants.rs +0 -0
  705. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/src/lib.rs +0 -0
  706. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/src/models.rs +0 -0
  707. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/src/parser.rs +0 -0
  708. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/tests/parser/test_contracts.rs +0 -0
  709. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/tests/parser/test_diagnostics.rs +0 -0
  710. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/tests/parser/test_semantics.rs +0 -0
  711. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/tests/parser/test_types.rs +0 -0
  712. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-svelte/tests/parser.rs +0 -0
  713. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/Cargo.toml +0 -0
  714. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/src/constants.rs +0 -0
  715. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/src/lib.rs +0 -0
  716. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/src/models.rs +0 -0
  717. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/src/parser.rs +0 -0
  718. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/tests/parser/test_contracts.rs +0 -0
  719. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/tests/parser/test_diagnostics.rs +0 -0
  720. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/tests/parser/test_semantics.rs +0 -0
  721. {fensu_cli-0.28.2 → fensu_cli-0.29.0}/crates/fensu-typescript/tests/parser/test_types.rs +0 -0
  722. {fensu_cli-0.28.2 → fensu_cli-0.29.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.28.2"
391
+ version = "0.29.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.28.2"
461
+ version = "0.29.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.28.2
3
+ Version: 0.29.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.28.2" # x-release-please-version
3
+ version = "0.29.0" # x-release-please-version
4
4
  edition.workspace = true
5
5
  license.workspace = true
6
6
  publish = false
@@ -29,7 +29,10 @@ pub(crate) fn role(source: &ScopedSource) -> Option<String> {
29
29
  if source.scope == SCOPE_TOOLING && part == ROLE_RULES {
30
30
  return Some(part.clone());
31
31
  }
32
- if matches!(part.as_str(), ROLE_MAIN | ROLE_HELPERS | "classes") {
32
+ if matches!(
33
+ part.as_str(),
34
+ ROLE_MAIN | ROLE_HELPERS | "classes" | "models" | "types" | "constants" | "exceptions"
35
+ ) {
33
36
  return Some(if part == ROLE_HELPERS {
34
37
  "helpers".to_owned()
35
38
  } else {
@@ -50,10 +50,11 @@ fn resolve_ownership_roots(
50
50
  ));
51
51
  };
52
52
  let relative = relative_ownership_path(&path, source_root);
53
- if relative
54
- .split('/')
55
- .any(|part| STRUCTURAL_ROLE_DIRECTORIES.contains(&part))
56
- {
53
+ if relative.split('/').any(|part| {
54
+ STRUCTURAL_ROLE_DIRECTORIES.contains(&part)
55
+ || config.analyzer == AnalyzerId::Python
56
+ && matches!(part, "models" | "types" | "constants" | "exceptions")
57
+ }) {
57
58
  return Err(format!(
58
59
  "Configured ownership root crosses a role directory: {pattern}"
59
60
  ));
@@ -0,0 +1,3 @@
1
+ pub(super) fn help() -> String {
2
+ "Usage: fensu {init,check,dupes,rule,map,skills,target} ...\n\nCommands:\n init Initialize Fensu configuration for a repository.\n check Evaluate repository architecture rules.\n dupes Report duplicated code (advisory unless --fail-on-new).\n rule Show details for one rule.\n map Render a directional project call map.\n skills Generate and install agent guidance.\n target Add an explicit analyzer target.\n\nRun `fensu <command> --help` for command-specific options.\n".to_owned()
3
+ }
@@ -3,7 +3,7 @@
3
3
  use crate::dupes::constants::{DEFAULT_MIN_SIMILARITY, DEFAULT_MIN_TOKENS, DEFAULT_TOP, LANGUAGES};
4
4
  use crate::dupes::models::DupesOptions;
5
5
 
6
- const USAGE: &str = "usage: fensu dupes [-h] [--json] [--top TOP] [--min-similarity MIN_SIMILARITY]\n [--min-tokens MIN_TOKENS] [--lang LANG] [--path PATH]\n [--include-tests] [--since REV] [--diff]";
6
+ const USAGE: &str = "usage: fensu dupes [-h] [--json] [--top TOP] [--min-similarity MIN_SIMILARITY]\n [--min-tokens MIN_TOKENS] [--lang LANG] [--path PATH]\n [--include-tests] [--since REV] [--diff]\n [--fail-on-new]";
7
7
  const MIN_SIMILARITY_EXCLUSIVE: f64 = 0.0;
8
8
  const MAX_SIMILARITY: f64 = 1.0;
9
9
  const MIN_COUNT: usize = 1;
@@ -28,6 +28,7 @@ pub(crate) fn parse_arguments(arguments: &[String]) -> Result<Option<DupesOption
28
28
  include_tests: false,
29
29
  since: None,
30
30
  diff: false,
31
+ fail_on_new: false,
31
32
  };
32
33
  let mut position = 0;
33
34
  while position < arguments.len() {
@@ -44,6 +45,7 @@ pub(crate) fn parse_arguments(arguments: &[String]) -> Result<Option<DupesOption
44
45
  "--json" => options.json = true,
45
46
  "--include-tests" => options.include_tests = true,
46
47
  "--diff" => options.diff = true,
48
+ "--fail-on-new" => options.fail_on_new = true,
47
49
  _ => return Err(usage_error(&format!("unrecognized arguments: {argument}"))),
48
50
  }
49
51
  position += 1;
@@ -61,6 +63,9 @@ pub(crate) fn parse_arguments(arguments: &[String]) -> Result<Option<DupesOption
61
63
  options = apply_value(options, name, value)?;
62
64
  position += 1;
63
65
  }
66
+ if options.fail_on_new && options.since.is_none() {
67
+ return Err(usage_error("argument --fail-on-new: requires --since"));
68
+ }
64
69
  if options.languages.is_empty() {
65
70
  options.languages = LANGUAGES.to_vec();
66
71
  }
@@ -80,6 +80,7 @@ pub(crate) fn build_report(
80
80
  }
81
81
  Ok(DupesReport {
82
82
  since: options.since.clone(),
83
+ advisory: !options.fail_on_new,
83
84
  unit_counts,
84
85
  allowlisted_pairs: retained.len() - pairs.len(),
85
86
  contract_exempt_members: forced.difference(&retained_units).count(),
@@ -8,6 +8,7 @@ use crate::dupes::models::{CloneCluster, CloneMember, DupesReport, MemberDiff};
8
8
  const INDENT: &str = " ";
9
9
  const DIFF_INDENT: &str = " ";
10
10
  const ADVISORY: &str = "advisory; duplicated-code findings to review, not fensu check failures";
11
+ const GATED: &str = "--fail-on-new; each cluster touching changed lines fails the command";
11
12
 
12
13
  pub(crate) fn render_text(report: &DupesReport, top: usize) -> String {
13
14
  let scope = report
@@ -16,9 +17,10 @@ pub(crate) fn render_text(report: &DupesReport, top: usize) -> String {
16
17
  .map_or_else(String::new, |revision| format!(" changed since {revision}"));
17
18
  let mut lines = vec![
18
19
  format!(
19
- "fensu dupes: {} duplicated-code cluster{}{scope} ({ADVISORY})",
20
+ "fensu dupes: {} duplicated-code cluster{}{scope} ({})",
20
21
  report.clusters.len(),
21
22
  if report.clusters.len() == 1 { "" } else { "s" },
23
+ if report.advisory { ADVISORY } else { GATED },
22
24
  ),
23
25
  summary_line(report),
24
26
  ];
@@ -72,7 +74,7 @@ pub(crate) fn render_json(report: &DupesReport, top: usize) -> Result<String, St
72
74
  .collect::<Result<Vec<_>, String>>()?;
73
75
  let payload = json!({
74
76
  "command": "dupes",
75
- "advisory": true,
77
+ "advisory": report.advisory,
76
78
  "since": report.since,
77
79
  "unit_counts": report.unit_counts,
78
80
  "allowlisted_pairs": report.allowlisted_pairs,
@@ -57,4 +57,4 @@ pub(crate) const CONFIG_FORBIDDEN_OWNERS_KEY: &str = "forbidden_owners";
57
57
  pub(crate) const RUST_TEST_DIRECTORIES: &[&str] = &["tests", "benches"];
58
58
  pub(crate) const SCOPE_TEST: &str = "test";
59
59
 
60
- pub(crate) const DUPES_HELP: &str = "usage: fensu dupes [-h] [--json] [--top TOP] [--min-similarity MIN_SIMILARITY]\n [--min-tokens MIN_TOKENS]\n [--lang {python,rust,typescript,javascript,svelte}]\n [--path PATH] [--include-tests] [--since REV] [--diff]\n\nReport duplicated code (advisory). Findings never fail the command: it exits 0\nwhenever analysis succeeds and 2 for usage, configuration, or IO errors.\n\noptions:\n -h, --help show this help message and exit\n --json print deterministic JSON instead of text\n --top TOP number of clusters to print (default 30)\n --min-similarity MIN_SIMILARITY\n minimum token similarity in (0, 1] (default 0.8)\n --min-tokens MIN_TOKENS\n minimum normalised tokens per unit (default 60)\n --lang {python,rust,typescript,javascript,svelte}\n analyze one language; repeat for several\n --path PATH only clusters with a member matching this glob; repeatable\n --include-tests also analyze configured tests and Rust test code\n --since REV only clusters touching lines changed since REV,\n including uncommitted and untracked files\n --diff show where the first two visible members diverge\n";
60
+ pub(crate) const DUPES_HELP: &str = "usage: fensu dupes [-h] [--json] [--top TOP] [--min-similarity MIN_SIMILARITY]\n [--min-tokens MIN_TOKENS]\n [--lang {python,rust,typescript,javascript,svelte}]\n [--path PATH] [--include-tests] [--since REV] [--diff]\n [--fail-on-new]\n\nReport duplicated code (advisory). Findings fail the command only with\n--fail-on-new: it exits 0 whenever analysis succeeds, 1 when --fail-on-new finds\na cluster touching changed lines, and 2 for usage, configuration, or IO errors.\n\noptions:\n -h, --help show this help message and exit\n --json print deterministic JSON instead of text\n --top TOP number of clusters to print (default 30)\n --min-similarity MIN_SIMILARITY\n minimum token similarity in (0, 1] (default 0.8)\n --min-tokens MIN_TOKENS\n minimum normalised tokens per unit (default 60)\n --lang {python,rust,typescript,javascript,svelte}\n analyze one language; repeat for several\n --path PATH only clusters with a member matching this glob; repeatable\n --include-tests also analyze configured tests and Rust test code\n --since REV only clusters touching lines changed since REV,\n including uncommitted and untracked files\n --diff show where the first two visible members diverge\n --fail-on-new exit 1 when a cluster not hidden by [dupes] touches\n lines changed since --since REV\n";
@@ -11,7 +11,7 @@ use crate::dupes::_helpers::report::rendering::{render_json, render_text};
11
11
  use crate::dupes::constants::DUPES_HELP;
12
12
  use crate::models::CliOutput;
13
13
 
14
- /// Exit 0 whenever analysis succeeds, regardless of findings; errors exit 2.
14
+ /// Exit 0 when analysis succeeds, 1 when `--fail-on-new` finds a cluster, and 2 on errors.
15
15
  pub(crate) fn run_dupes(arguments: &[String]) -> Result<CliOutput, String> {
16
16
  let Some(options) = parse_arguments(arguments)? else {
17
17
  return Ok(CliOutput::success(DUPES_HELP.to_owned()));
@@ -31,14 +31,27 @@ pub(crate) fn run_dupes(arguments: &[String]) -> Result<CliOutput, String> {
31
31
  render_text(&report, options.top)
32
32
  };
33
33
  let units: usize = report.unit_counts.values().sum();
34
+ let clusters = report.clusters.len();
35
+ let plural = if clusters == 1 { "" } else { "s" };
36
+ let mut stderr = format!(
37
+ "fensu dupes: found {clusters} duplicated-code cluster{plural} across {units} units in {:.1}s",
38
+ started.elapsed().as_secs_f64()
39
+ );
40
+ let failed = options.fail_on_new && clusters > 0;
41
+ stderr.push_str(match (options.fail_on_new, failed) {
42
+ (false, _) => " (advisory)\n",
43
+ (true, false) => " (no new clusters)\n",
44
+ (true, true) => "\n",
45
+ });
46
+ if failed {
47
+ let verb = if clusters == 1 { "touches" } else { "touch" };
48
+ stderr.push_str(&format!(
49
+ "fensu dupes: failed: {clusters} new cluster{plural} {verb} changed lines; consolidate them or list them in [dupes] allowlist with a reason\n"
50
+ ));
51
+ }
34
52
  Ok(CliOutput {
35
53
  stdout,
36
- stderr: format!(
37
- "fensu dupes: found {} duplicated-code cluster{} across {units} units in {:.1}s (advisory)\n",
38
- report.clusters.len(),
39
- if report.clusters.len() == 1 { "" } else { "s" },
40
- started.elapsed().as_secs_f64()
41
- ),
42
- exit_code: 0,
54
+ stderr,
55
+ exit_code: i32::from(failed),
43
56
  })
44
57
  }
@@ -16,6 +16,7 @@ pub(crate) struct DupesOptions {
16
16
  pub(crate) include_tests: bool,
17
17
  pub(crate) since: Option<String>,
18
18
  pub(crate) diff: bool,
19
+ pub(crate) fail_on_new: bool,
19
20
  }
20
21
 
21
22
  #[derive(Clone, Debug, Default)]
@@ -163,6 +164,7 @@ pub(crate) struct CloneCluster {
163
164
  #[derive(Clone, Debug)]
164
165
  pub(crate) struct DupesReport {
165
166
  pub(crate) since: Option<String>,
167
+ pub(crate) advisory: bool,
166
168
  pub(crate) unit_counts: BTreeMap<&'static str, usize>,
167
169
  pub(crate) allowlisted_pairs: usize,
168
170
  pub(crate) contract_exempt_members: usize,
@@ -6,6 +6,101 @@ use crate::test_types::{
6
6
  OwnerPlanningTestCase, RuleOptionsCheckRoutingTestCase, TargetSkillFreshnessTestCase,
7
7
  };
8
8
 
9
+ #[test]
10
+ fn given_declaration_role_directories_when_checking_then_enforces_file_equivalent_policy() {
11
+ let test_cases = [
12
+ NativeRulePackTestCase {
13
+ description: "declarations in all four role directories are recognized",
14
+ config: "select = ['FFR101', 'FFR102', 'FFR103', 'FFR104']\n",
15
+ expected_exit_code: 0,
16
+ expected_output: "Found 0 faults",
17
+ },
18
+ NativeRulePackTestCase {
19
+ description: "mutable models retain their immutability policy",
20
+ config: "select = ['FFS201']\n",
21
+ expected_exit_code: 1,
22
+ expected_output: "models/context.py:3:0",
23
+ },
24
+ NativeRulePackTestCase {
25
+ description: "an exact file exception permits a declaration-only mutable context",
26
+ config: "select = ['FFS201']\n[[rule_exceptions]]\nrule = 'FFS201'\npath = 'src/pkg/orders/models/context.py'\nreason = 'Invocation-local progress is committed by the native coordinator.'\n",
27
+ expected_exit_code: 0,
28
+ expected_output: "Found 0 faults",
29
+ },
30
+ NativeRulePackTestCase {
31
+ description: "model packages cannot contain behavior",
32
+ config: "select = ['FFR001']\n",
33
+ expected_exit_code: 1,
34
+ expected_output: "models/behavior.py:1:0",
35
+ },
36
+ NativeRulePackTestCase {
37
+ description: "model packages cannot contain runtime statements",
38
+ config: "select = ['FFR001']\n",
39
+ expected_exit_code: 1,
40
+ expected_output: "models/runtime.py:1:0",
41
+ },
42
+ NativeRulePackTestCase {
43
+ description: "model package initializers must still be empty",
44
+ config: "select = ['FFR402']\n",
45
+ expected_exit_code: 1,
46
+ expected_output: "models/__init__.py:0:0",
47
+ },
48
+ NativeRulePackTestCase {
49
+ description: "model package modules cannot become reexport shims",
50
+ config: "select = ['FFR403']\n",
51
+ expected_exit_code: 1,
52
+ expected_output: "models/exports.py:0:0",
53
+ },
54
+ NativeRulePackTestCase {
55
+ description: "ownership roots cannot cross a declaration role directory",
56
+ config: "select = []\nownership_roots = ['src/pkg/orders/models']\n",
57
+ expected_exit_code: 2,
58
+ expected_output: "ownership root crosses a role directory",
59
+ },
60
+ ];
61
+ for test_case in test_cases {
62
+ let repository = tempfile::tempdir().expect("declaration role repository");
63
+ write(
64
+ repository.path().join("fensu.toml"),
65
+ &format!(
66
+ "roots = ['src/pkg']\ntests = []\ntooling = []\n{}",
67
+ test_case.config
68
+ ),
69
+ );
70
+ for (path, source) in [
71
+ ("models/record.py", "from dataclasses import dataclass\n@dataclass(frozen=True)\nclass Record:\n value: int\n"),
72
+ ("models/context.py", "from dataclasses import dataclass\n@dataclass(kw_only=True)\nclass Context:\n cursor: str | None\n"),
73
+ ("models/behavior.py", "def execute() -> None:\n print('work')\n"),
74
+ ("models/runtime.py", "print('work')\n"),
75
+ ("models/constants.py", "MAX_RECORDS: int = 10\n"),
76
+ ("models/__init__.py", "from .record import Record\n__all__ = ('Record',)\n"),
77
+ ("models/exports.py", "from .record import Record\n__all__ = ('Record',)\n"),
78
+ ("types/identifier.py", "type Identifier = str\n"),
79
+ ("constants/limits.py", "MAX_ITEMS: int = 10\n"),
80
+ ("exceptions/invalid.py", "class InvalidInput(Exception):\n pass\n"),
81
+ ] {
82
+ write(repository.path().join("src/pkg/orders").join(path), source);
83
+ }
84
+ let output = run_check(repository.path());
85
+ let text = format!(
86
+ "{}{}",
87
+ String::from_utf8_lossy(&output.stdout),
88
+ String::from_utf8_lossy(&output.stderr)
89
+ );
90
+ assert_eq!(
91
+ output.status.code(),
92
+ Some(test_case.expected_exit_code),
93
+ "{}: {text}",
94
+ test_case.description
95
+ );
96
+ assert!(
97
+ text.contains(test_case.expected_output),
98
+ "{}: {text}",
99
+ test_case.description
100
+ );
101
+ }
102
+ }
103
+
9
104
  #[test]
10
105
  fn given_selected_target_with_stale_skill_when_checking_then_cached_and_uncached_paths_warn() {
11
106
  let test_cases = [TargetSkillFreshnessTestCase {
@@ -188,12 +188,12 @@ fn given_invalid_configuration_or_arguments_when_running_dupes_then_errors_exit_
188
188
  expected_stderr: &["argument --lang: invalid choice: 'cobol'"],
189
189
  },
190
190
  CommandOutputTestCase {
191
- description: "help documents the advisory exit contract",
191
+ description: "help documents the exit contract",
192
192
  config: with_dupes(""),
193
193
  files: copies(),
194
194
  arguments: &["--help"],
195
195
  expected_exit_code: 0,
196
- expected_stdout: &["usage: fensu dupes", "Findings never fail the command"],
196
+ expected_stdout: &["usage: fensu dupes", "Findings fail the command only with\n--fail-on-new"],
197
197
  expected_stderr: &[],
198
198
  },
199
199
  ];
@@ -3,7 +3,9 @@ use crate::helpers::{
3
3
  spaced_summaries, summary, text, write, write_files, PYTHON_CONFIG, PYTHON_EXTRA,
4
4
  PYTHON_UNRELATED,
5
5
  };
6
- use crate::test_types::{ChangedSinceTestCase, CommandOutputTestCase, JsonShapeTestCase};
6
+ use crate::test_types::{
7
+ ChangedSinceTestCase, CommandOutputTestCase, FailOnNewTestCase, JsonShapeTestCase,
8
+ };
7
9
 
8
10
  #[test]
9
11
  fn given_clone_findings_when_rendering_text_then_output_is_advisory_ranked_and_exits_zero() {
@@ -362,3 +364,107 @@ fn given_git_changes_when_filtering_since_revision_then_only_touched_clusters_re
362
364
  );
363
365
  }
364
366
  }
367
+
368
+ #[test]
369
+ fn given_fail_on_new_when_a_changed_line_joins_a_cluster_then_only_unlisted_clusters_fail() {
370
+ let allowlisted = format!(
371
+ "{PYTHON_CONFIG}\n[dupes]\n\n[[dupes.allowlist]]\npaths = [\"src/shop/*/summary.py\"]\nreason = \"Exports mirror the order summary contract.\"\n"
372
+ );
373
+ let test_cases = [
374
+ FailOnNewTestCase {
375
+ description: "a new copy of committed code fails",
376
+ config: PYTHON_CONFIG.to_owned(),
377
+ worktree: vec![("src/shop/exports/summary.py", summary(""))],
378
+ arguments: &["--since", "HEAD", "--fail-on-new"],
379
+ expected_exit: 1,
380
+ expected_stdout:
381
+ "(--fail-on-new; each cluster touching changed lines fails the command)",
382
+ expected_stderr: "1 new cluster touches changed lines",
383
+ },
384
+ FailOnNewTestCase {
385
+ description: "an allowlisted new copy passes",
386
+ config: allowlisted,
387
+ worktree: vec![("src/shop/exports/summary.py", summary(""))],
388
+ arguments: &["--since", "HEAD", "--fail-on-new"],
389
+ expected_exit: 0,
390
+ expected_stdout: "(--fail-on-new;",
391
+ expected_stderr: "(no new clusters)",
392
+ },
393
+ FailOnNewTestCase {
394
+ description: "an existing cluster untouched by the change passes",
395
+ config: PYTHON_CONFIG.to_owned(),
396
+ worktree: vec![("src/shop/warehouse/notes.py", "NOTE = 1\n".to_owned())],
397
+ arguments: &["--since", "HEAD", "--fail-on-new"],
398
+ expected_exit: 0,
399
+ expected_stdout: "(--fail-on-new;",
400
+ expected_stderr: "(no new clusters)",
401
+ },
402
+ FailOnNewTestCase {
403
+ description: "the same new copy without the flag stays advisory",
404
+ config: PYTHON_CONFIG.to_owned(),
405
+ worktree: vec![("src/shop/exports/summary.py", summary(""))],
406
+ arguments: &["--since", "HEAD"],
407
+ expected_exit: 0,
408
+ expected_stdout: "(advisory;",
409
+ expected_stderr: "(advisory)",
410
+ },
411
+ FailOnNewTestCase {
412
+ description: "JSON output reports the run as gated",
413
+ config: PYTHON_CONFIG.to_owned(),
414
+ worktree: vec![("src/shop/exports/summary.py", summary(""))],
415
+ arguments: &["--since", "HEAD", "--fail-on-new", "--json"],
416
+ expected_exit: 1,
417
+ expected_stdout: "\"advisory\": false",
418
+ expected_stderr: "1 new cluster touches changed lines",
419
+ },
420
+ FailOnNewTestCase {
421
+ description: "the flag without a base revision is a usage error",
422
+ config: PYTHON_CONFIG.to_owned(),
423
+ worktree: vec![],
424
+ arguments: &["--fail-on-new"],
425
+ expected_exit: 2,
426
+ expected_stdout: "",
427
+ expected_stderr: "--fail-on-new: requires --since",
428
+ },
429
+ ];
430
+ for test_case in &test_cases {
431
+ let repository = tempfile::tempdir().expect("temporary repository");
432
+ write(repository.path().join("fensu.toml"), &test_case.config);
433
+ write_files(
434
+ repository.path(),
435
+ &[
436
+ ("src/shop/orders/summary.py", summary("")),
437
+ ("src/shop/billing/summary.py", summary("")),
438
+ ],
439
+ );
440
+ git(repository.path(), &["init", "--quiet"]);
441
+ git(repository.path(), &["add", "."]);
442
+ git(
443
+ repository.path(),
444
+ &["commit", "--quiet", "-m", "seed orders"],
445
+ );
446
+ write_files(repository.path(), &test_case.worktree);
447
+
448
+ let output = run_dupes(repository.path(), test_case.arguments);
449
+
450
+ assert_eq!(
451
+ output.status.code(),
452
+ Some(test_case.expected_exit),
453
+ "{}: {}",
454
+ test_case.description,
455
+ text(&output.stderr)
456
+ );
457
+ assert!(
458
+ text(&output.stdout).contains(test_case.expected_stdout),
459
+ "{}: {}",
460
+ test_case.description,
461
+ text(&output.stdout)
462
+ );
463
+ assert!(
464
+ text(&output.stderr).contains(test_case.expected_stderr),
465
+ "{}: {}",
466
+ test_case.description,
467
+ text(&output.stderr)
468
+ );
469
+ }
470
+ }
@@ -43,3 +43,13 @@ pub(crate) struct JsonShapeTestCase {
43
43
  pub(crate) expected_member_keys: &'static [&'static str],
44
44
  pub(crate) expected_diff_lines: &'static [(u64, u64, &'static str)],
45
45
  }
46
+
47
+ pub(crate) struct FailOnNewTestCase {
48
+ pub(crate) description: &'static str,
49
+ pub(crate) config: String,
50
+ pub(crate) worktree: Vec<(&'static str, String)>,
51
+ pub(crate) arguments: &'static [&'static str],
52
+ pub(crate) expected_exit: i32,
53
+ pub(crate) expected_stdout: &'static str,
54
+ pub(crate) expected_stderr: &'static str,
55
+ }
@@ -281,11 +281,7 @@ fn custom_rule_coverage_faults(code: &str, context: &NativeRuleContext) -> Vec<N
281
281
  let mut parts = answer.split('\0');
282
282
  (parts.next()? == rule_code).then(|| {
283
283
  (
284
- parts
285
- .next()
286
- .unwrap_or("0")
287
- .parse::<u32>()
288
- .map_or(0, |count| count),
284
+ parts.next().unwrap_or("0").parse::<u32>().unwrap_or(0),
289
285
  parts.next() == Some("true"),
290
286
  )
291
287
  })
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "fensu-policy"
3
- version = "0.28.2" # x-release-please-version
3
+ version = "0.29.0" # x-release-please-version
4
4
  edition.workspace = true
5
5
  license.workspace = true
6
6
  publish = true
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "fensu-cli"
7
- version = "0.28.2" # x-release-please-version
7
+ version = "0.29.0" # x-release-please-version
8
8
  description = "Native command-line executable for fensu"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -1,3 +0,0 @@
1
- pub(super) fn help() -> String {
2
- "Usage: fensu {init,check,dupes,rule,map,skills,target} ...\n\nCommands:\n init Initialize Fensu configuration for a repository.\n check Evaluate repository architecture rules.\n dupes Report duplicated code (advisory; never fails on findings).\n rule Show details for one rule.\n map Render a directional project call map.\n skills Generate and install agent guidance.\n target Add an explicit analyzer target.\n\nRun `fensu <command> --help` for command-specific options.\n".to_owned()
3
- }
File without changes
File without changes