fensu-cli 0.2.1__tar.gz → 0.4.0__tar.gz

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