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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/Cargo.lock +1 -1
  2. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/PKG-INFO +1 -1
  3. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/Cargo.toml +1 -1
  4. fensu_cli-0.5.0/crates/fensu-cli/src/command/constants.rs +19 -0
  5. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/map_parsing.rs +14 -2
  6. fensu_cli-0.5.0/crates/fensu-cli/src/command/main/help.rs +3 -0
  7. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/loading.rs +3 -1
  8. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/parsing.rs +5 -0
  9. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/validation.rs +15 -0
  10. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_evaluation.rs +21 -0
  11. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_policy.rs +1 -1
  12. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/rule.rs +75 -2
  13. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/constants.rs +2 -0
  14. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/execution.rs +7 -2
  15. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree_policy.inc +230 -9
  16. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/models.rs +8 -0
  17. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/models.rs +34 -0
  18. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/fingerprint.rs +3 -0
  19. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/mod.rs +1 -0
  20. fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/content/option_rendering.rs +83 -0
  21. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/rendering.rs +3 -1
  22. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/mod.rs +1 -0
  23. fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/context/option_validation.rs +123 -0
  24. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/selection.rs +12 -5
  25. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_policy.rs +95 -3
  26. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/test_types.rs +9 -0
  27. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.inc +153 -2
  28. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/helpers.rs +29 -1
  29. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.inc +63 -10
  30. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/core_rule_bindings.rs +2 -0
  31. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/constants.rs +1 -0
  32. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +26 -1
  33. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/models.rs +9 -1
  34. fensu_cli-0.5.0/crates/fensu-native/tests/rules/contracts.rs +82 -0
  35. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/helpers.rs +1 -0
  36. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/test_types.rs +9 -0
  37. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/pyproject.toml +1 -1
  38. fensu_cli-0.4.0/crates/fensu-cli/src/command/constants.rs +0 -19
  39. fensu_cli-0.4.0/crates/fensu-cli/src/command/main/help.rs +0 -3
  40. fensu_cli-0.4.0/crates/fensu-native/tests/rules/contracts.rs +0 -21
  41. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/Cargo.toml +0 -0
  42. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/README.md +0 -0
  43. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/assets/catalogue.json +0 -0
  44. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/assets/python.gitignore +0 -0
  45. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/assets/skills_invariant.json +0 -0
  46. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/build.rs +0 -0
  47. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_execution.rs +0 -0
  48. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_graph_rendering.rs +0 -0
  49. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_help.rs +0 -0
  50. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_human_rendering.rs +0 -0
  51. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_parsing.rs +0 -0
  52. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_structured_rendering.rs +0 -0
  53. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_values.rs +0 -0
  54. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/mod.rs +0 -0
  55. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/check.rs +0 -0
  56. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/init.rs +0 -0
  57. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/map.rs +0 -0
  58. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/memory.rs +0 -0
  59. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
  60. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/rule.rs +0 -0
  61. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/run_cli.rs +0 -0
  62. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/skills.rs +0 -0
  63. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/mod.rs +0 -0
  64. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/models.rs +0 -0
  65. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/discovery.rs +0 -0
  66. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/exceptions.rs +0 -0
  67. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/mod.rs +0 -0
  68. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
  69. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
  70. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
  71. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
  72. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
  73. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/constants.rs +0 -0
  74. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/cache.rs +0 -0
  75. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_cleanup.rs +0 -0
  76. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_execution.rs +0 -0
  77. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_project.rs +0 -0
  78. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/init.rs +0 -0
  79. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/mod.rs +0 -0
  80. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/process.rs +0 -0
  81. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/render.rs +0 -0
  82. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/lib.rs +0 -0
  83. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/main.rs +0 -0
  84. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/cache.rs +0 -0
  85. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/decoding.rs +0 -0
  86. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/identity.rs +0 -0
  87. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/index.rs +0 -0
  88. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/mod.rs +0 -0
  89. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/project.rs +0 -0
  90. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/render.rs +0 -0
  91. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree.rs +0 -0
  92. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
  93. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
  94. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
  95. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/execution.rs +0 -0
  96. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/mod.rs +0 -0
  97. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/discovery.rs +0 -0
  98. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/sections.rs +0 -0
  99. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/build.rs +0 -0
  100. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/exceptions.rs +0 -0
  101. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/identity.rs +0 -0
  102. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/options.rs +0 -0
  103. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/filesystem.rs +0 -0
  104. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/freshness.rs +0 -0
  105. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/install.rs +0 -0
  106. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/mod.rs +0 -0
  107. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/plan.rs +0 -0
  108. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/publication.rs +0 -0
  109. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/transaction.rs +0 -0
  110. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/mod.rs +0 -0
  111. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
  112. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
  113. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
  114. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
  115. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
  116. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
  117. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/models.rs +0 -0
  118. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_cleanup.rs +0 -0
  119. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/commands.rs +0 -0
  120. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/helpers.rs +0 -0
  121. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command.rs +0 -0
  122. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.rs +0 -0
  123. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping.rs +0 -0
  124. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.rs +0 -0
  125. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
  126. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
  127. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills.rs +0 -0
  128. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/Cargo.toml +0 -0
  129. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/constants.rs +0 -0
  130. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/annotations.rs +0 -0
  131. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/contracts.rs +0 -0
  132. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/declarations.rs +0 -0
  133. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/functions.rs +0 -0
  134. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/harness.rs +0 -0
  135. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/hygiene.rs +0 -0
  136. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mapping.rs +0 -0
  137. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mod.rs +0 -0
  138. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/references.rs +0 -0
  139. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/rule_authoring.rs +0 -0
  140. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/state.rs +0 -0
  141. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/bindings.rs +0 -0
  142. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/mod.rs +0 -0
  143. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/model_types.rs +0 -0
  144. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/repository_bindings.rs +0 -0
  145. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/rule_authoring_bindings.rs +0 -0
  146. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/mod.rs +0 -0
  147. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
  148. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
  149. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
  150. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/models.rs +0 -0
  151. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/mod.rs +0 -0
  152. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/visitor.rs +0 -0
  153. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/category.rs +0 -0
  154. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/display.rs +0 -0
  155. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/mod.rs +0 -0
  156. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/returns.rs +0 -0
  157. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/rows.rs +0 -0
  158. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/conditionals.rs +0 -0
  159. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/mod.rs +0 -0
  160. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/mod.rs +0 -0
  161. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/rows.rs +0 -0
  162. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/calls.rs +0 -0
  163. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/dimensions.rs +0 -0
  164. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/functions.rs +0 -0
  165. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/imports.rs +0 -0
  166. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/mod.rs +0 -0
  167. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/checks.rs +0 -0
  168. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/mod.rs +0 -0
  169. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/functions.rs +0 -0
  170. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/lookups.rs +0 -0
  171. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mod.rs +0 -0
  172. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mutations.rs +0 -0
  173. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/mod.rs +0 -0
  174. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/mod.rs +0 -0
  175. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/names.rs +0 -0
  176. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/calls.rs +0 -0
  177. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/mod.rs +0 -0
  178. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/events.rs +0 -0
  179. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/mod.rs +0 -0
  180. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/test_shape.rs +0 -0
  181. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/literals.rs +0 -0
  182. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mod.rs +0 -0
  183. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mutations.rs +0 -0
  184. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/ownership.rs +0 -0
  185. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/references.rs +0 -0
  186. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/breadth.rs +0 -0
  187. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/children.rs +0 -0
  188. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/expression_children.rs +0 -0
  189. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/mod.rs +0 -0
  190. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/nodes.rs +0 -0
  191. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/spans.rs +0 -0
  192. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/statement_children.rs +0 -0
  193. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/mod.rs +0 -0
  194. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/resolution.rs +0 -0
  195. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/scopes.rs +0 -0
  196. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/mod.rs +0 -0
  197. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/text.rs +0 -0
  198. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
  199. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
  200. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
  201. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
  202. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
  203. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
  204. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
  205. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
  206. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
  207. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
  208. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
  209. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
  210. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
  211. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
  212. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
  213. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
  214. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
  215. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
  216. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
  217. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
  218. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
  219. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/constants.rs +0 -0
  220. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/classes.rs +0 -0
  221. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/expressions.rs +0 -0
  222. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/extraction.rs +0 -0
  223. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/functions.rs +0 -0
  224. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/imports.rs +0 -0
  225. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/mod.rs +0 -0
  226. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_declarations.rs +0 -0
  227. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_facts.rs +0 -0
  228. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/mod.rs +0 -0
  229. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/mod.rs +0 -0
  230. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/models.rs +0 -0
  231. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
  232. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/models.rs +0 -0
  233. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/types.rs +0 -0
  234. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/lib.rs +0 -0
  235. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/failures.rs +0 -0
  236. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/mod.rs +0 -0
  237. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
  238. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
  239. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
  240. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
  241. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
  242. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/line_index.rs +0 -0
  243. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/mod.rs +0 -0
  244. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
  245. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
  246. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
  247. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
  248. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/models.rs +0 -0
  249. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
  250. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/matching.rs +0 -0
  251. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/mod.rs +0 -0
  252. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/observation_index.rs +0 -0
  253. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_observation_index.rs +0 -0
  254. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_paths.rs +0 -0
  255. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
  256. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
  257. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
  258. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
  259. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
  260. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
  261. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/enumerate.rs +0 -0
  262. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/mapping.rs +0 -0
  263. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/rule_authoring.rs +0 -0
  264. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
  265. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts.rs +0 -0
  266. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/strict.rs +0 -0
  267. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
  268. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing.rs +0 -0
  269. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/locate.rs +0 -0
  270. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
  271. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions.rs +0 -0
  272. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/hashing.rs +0 -0
  273. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
  274. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/observations.rs +0 -0
  275. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
  276. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/walk.rs +0 -0
  277. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
  278. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/Cargo.toml +0 -0
  279. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/loading.rs +0 -0
  280. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/mod.rs +0 -0
  281. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
  282. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
  283. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
  284. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/mod.rs +0 -0
  285. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/models.rs +0 -0
  286. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/types.rs +0 -0
  287. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/constants.rs +0 -0
  288. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/errors.rs +0 -0
  289. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/archive.rs +0 -0
  290. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/mod.rs +0 -0
  291. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/mod.rs +0 -0
  292. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/database.rs +0 -0
  293. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/documents.rs +0 -0
  294. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/lists.rs +0 -0
  295. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/mod.rs +0 -0
  296. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/references.rs +0 -0
  297. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/sections.rs +0 -0
  298. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/skills.rs +0 -0
  299. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/streaming.rs +0 -0
  300. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/values.rs +0 -0
  301. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graph_loading.rs +0 -0
  302. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graphs.rs +0 -0
  303. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/mod.rs +0 -0
  304. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/overviews.rs +0 -0
  305. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/queries.rs +0 -0
  306. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/query_values.rs +0 -0
  307. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/diagnostics.rs +0 -0
  308. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/mod.rs +0 -0
  309. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_core.rs +0 -0
  310. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_markdown.rs +0 -0
  311. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_metadata.rs +0 -0
  312. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_skill_view.rs +0 -0
  313. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_views.rs +0 -0
  314. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/summaries.rs +0 -0
  315. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/synchronization.rs +0 -0
  316. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
  317. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
  318. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
  319. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
  320. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
  321. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
  322. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
  323. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
  324. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
  325. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
  326. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
  327. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
  328. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
  329. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/mod.rs +0 -0
  330. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/models.rs +0 -0
  331. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/cycles.rs +0 -0
  332. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/dependencies.rs +0 -0
  333. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/document_targets.rs +0 -0
  334. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/heading_targets.rs +0 -0
  335. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/link_resolution.rs +0 -0
  336. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/mod.rs +0 -0
  337. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
  338. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
  339. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/mod.rs +0 -0
  340. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/models.rs +0 -0
  341. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/types.rs +0 -0
  342. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/lib.rs +0 -0
  343. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/constants.rs +0 -0
  344. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/assembly.rs +0 -0
  345. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/blocks.rs +0 -0
  346. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/headings.rs +0 -0
  347. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/line_index.rs +0 -0
  348. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/links.rs +0 -0
  349. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/lists.rs +0 -0
  350. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/mod.rs +0 -0
  351. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/obsidian.rs +0 -0
  352. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/text.rs +0 -0
  353. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
  354. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
  355. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/mod.rs +0 -0
  356. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/models.rs +0 -0
  357. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/types.rs +0 -0
  358. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/constants.rs +0 -0
  359. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/bootstrap.rs +0 -0
  360. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/collisions.rs +0 -0
  361. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/discovery.rs +0 -0
  362. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/documents.rs +0 -0
  363. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/filesystem.rs +0 -0
  364. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/git_tracking.rs +0 -0
  365. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/mod.rs +0 -0
  366. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/skills.rs +0 -0
  367. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/tree.rs +0 -0
  368. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/validation.rs +0 -0
  369. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
  370. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
  371. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/mod.rs +0 -0
  372. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/mod.rs +0 -0
  373. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/models.rs +0 -0
  374. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/types.rs +0 -0
  375. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
  376. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/loading.rs +0 -0
  377. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
  378. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus.rs +0 -0
  379. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/archive.rs +0 -0
  380. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/bootstrap.rs +0 -0
  381. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/check.rs +0 -0
  382. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/dependencies.rs +0 -0
  383. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/graph_query.rs +0 -0
  384. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
  385. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/list_batches.rs +0 -0
  386. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
  387. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/overview.rs +0 -0
  388. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/performance.rs +0 -0
  389. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/query.rs +0 -0
  390. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/schema.rs +0 -0
  391. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
  392. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming.rs +0 -0
  393. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/summary.rs +0 -0
  394. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/sync.rs +0 -0
  395. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
  396. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine.rs +0 -0
  397. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/dependencies.rs +0 -0
  398. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
  399. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/resolution.rs +0 -0
  400. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
  401. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph.rs +0 -0
  402. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/code_blocks.rs +0 -0
  403. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/links.rs +0 -0
  404. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/lists.rs +0 -0
  405. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/structure.rs +0 -0
  406. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
  407. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown.rs +0 -0
  408. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/collisions.rs +0 -0
  409. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/discovery.rs +0 -0
  410. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/git_worktrees.rs +0 -0
  411. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/helpers.rs +0 -0
  412. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/symlinks.rs +0 -0
  413. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/test_types.rs +0 -0
  414. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source.rs +0 -0
  415. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/Cargo.toml +0 -0
  416. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/constants.rs +0 -0
  417. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/bindings.rs +0 -0
  418. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/database.rs +0 -0
  419. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/generation.rs +0 -0
  420. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/mod.rs +0 -0
  421. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication.rs +0 -0
  422. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication_merge.rs +0 -0
  423. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/records.rs +0 -0
  424. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/replay.rs +0 -0
  425. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema.rs +0 -0
  426. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema_values.rs +0 -0
  427. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/storage.rs +0 -0
  428. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
  429. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
  430. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
  431. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/mod.rs +0 -0
  432. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/models.rs +0 -0
  433. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
  434. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/records.rs +0 -0
  435. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/storage.rs +0 -0
  436. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
  437. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests.rs +0 -0
  438. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/types.rs +0 -0
  439. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/constants.rs +0 -0
  440. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/execution_planning.rs +0 -0
  441. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_bindings.rs +0 -0
  442. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_conversion.rs +0 -0
  443. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_registration.rs +0 -0
  444. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/mod.rs +0 -0
  445. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
  446. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
  447. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/mod.rs +0 -0
  448. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/lib.rs +0 -0
  449. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/annotations/annotations.rs +0 -0
  450. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/hygiene/hygiene.rs +0 -0
  451. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/layers.rs +0 -0
  452. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/local.rs +0 -0
  453. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/project.rs +0 -0
  454. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/mod.rs +0 -0
  455. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming/naming.rs +0 -0
  456. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming_globs/naming_globs.rs +0 -0
  457. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/project_queries/project_queries.rs +0 -0
  458. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/declarations.rs +0 -0
  459. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/paths.rs +0 -0
  460. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout.rs +0 -0
  461. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_paths.rs +0 -0
  462. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_queries.rs +0 -0
  463. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/roles.rs +0 -0
  464. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/surfaces.rs +0 -0
  465. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/shape/shape.rs +0 -0
  466. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/layout.rs +0 -0
  467. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/names.rs +0 -0
  468. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/tests.rs +0 -0
  469. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
  470. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
  471. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/mod.rs +0 -0
  472. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/memory_conversion.rs +0 -0
  473. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/test_types.rs +0 -0
  474. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
  475. {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules.rs +0 -0
@@ -392,7 +392,7 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
392
392
 
393
393
  [[package]]
394
394
  name = "fensu-cli"
395
- version = "0.4.0"
395
+ version = "0.5.0"
396
396
  dependencies = [
397
397
  "cap-fs-ext",
398
398
  "cap-std",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fensu-cli
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "fensu-cli"
3
- version = "0.4.0" # x-release-please-version
3
+ version = "0.5.0" # x-release-please-version
4
4
  edition.workspace = true
5
5
  license.workspace = true
6
6
  publish = false
@@ -0,0 +1,19 @@
1
+ pub(crate) const MEMORY_SCHEMA_PREFIX: &str = "memory.";
2
+ pub(crate) const OPTION_TERMINATOR: &str = "--";
3
+ pub(crate) const MAP_SHORT_HELP: &str = "-h";
4
+ pub(crate) const LONG_OPTION_PREFIX: &str = "--";
5
+ pub(crate) const QUERY_FORMAT_LONG: &str = "long";
6
+ pub(crate) const QUERY_FORMAT_TABLE: &str = "table";
7
+ pub(crate) const QUERY_FORMAT_JSON: &str = "json";
8
+ pub(crate) const QUERY_FORMAT_CSV: &str = "csv";
9
+ pub(crate) const RELATION_KIND_TABLE: &str = "table";
10
+ pub(crate) const RELATION_KIND_VIEW: &str = "view";
11
+ pub(crate) const ARCHIVE_STATE_ARCHIVED: &str = "archived";
12
+ pub(crate) const RESOLUTION_STATUS_RESOLVED: &str = "resolved";
13
+ pub(crate) const DEFAULT_QUERY_LIMIT: usize = 20;
14
+ pub(crate) const MAX_QUERY_LIMIT: usize = 1000;
15
+ pub(crate) const MAP_USAGE: &str = "usage: fensu map [-h] [--direction {downstream,upstream}] [--depth DEPTH]\n [--root ROOTS] [--paths {absolute,relative,compact,none}]\n [--color {auto,always,never}] [--cache | --no-cache]\n [--cache-stats]\n symbol";
16
+ pub(crate) const MAP_HELP: &str = "usage: fensu map [-h] [--direction {downstream,upstream}] [--depth DEPTH]\n [--root ROOTS] [--paths {absolute,relative,compact,none}]\n [--color {auto,always,never}] [--cache | --no-cache]\n [--cache-stats]\n symbol\n\npositional arguments:\n symbol bare, dotted, or path::function project symbol\n\noptions:\n -h, --help show this help message and exit\n --direction {downstream,upstream}\n --depth DEPTH maximum call depth\n --root ROOTS Python import root to map; repeat for multiple roots\n --paths {absolute,relative,compact,none}\n path display style\n --color {auto,always,never}\n ANSI color behavior\n --cache enable map index caching\n --no-cache disable map index caching\n --cache-stats write map cache operation counts to stderr\n";
17
+ pub(crate) const DEFAULT_GRAPH_DEPTH: usize = 2;
18
+ pub(crate) const DEFAULT_GRAPH_NODES: usize = 50;
19
+ pub(crate) const DEFAULT_GRAPH_EDGES: usize = 100;
@@ -1,5 +1,6 @@
1
1
  use crate::command::constants::{LONG_OPTION_PREFIX, MAP_SHORT_HELP, MAP_USAGE, OPTION_TERMINATOR};
2
- use crate::mapping::models::{MapOptions, PathMode};
2
+ use crate::mapping::constants::{MAP_DIRECTION_DOWNSTREAM, MAP_DIRECTION_UPSTREAM};
3
+ use crate::mapping::models::{MapDirection, MapOptions, PathMode};
3
4
 
4
5
  const LONG_OPTIONS: &[&str] = &[
5
6
  "--help",
@@ -15,6 +16,7 @@ const LONG_OPTIONS: &[&str] = &[
15
16
 
16
17
  pub(crate) fn parse(arguments: &[String]) -> Result<Option<MapOptions>, String> {
17
18
  let mut symbol = None;
19
+ let mut direction = MapDirection::Downstream;
18
20
  let mut depth = 3;
19
21
  let mut roots = Vec::new();
20
22
  let mut path_mode = PathMode::Relative;
@@ -49,7 +51,16 @@ pub(crate) fn parse(arguments: &[String]) -> Result<Option<MapOptions>, String>
49
51
  "-h" | "--help" => return Ok(None),
50
52
  "--direction" => {
51
53
  let value = option_value(arguments, &mut position, resolved, inline)?;
52
- choice(resolved, value, &["downstream"])?;
54
+ choice(
55
+ resolved,
56
+ value,
57
+ &[MAP_DIRECTION_DOWNSTREAM, MAP_DIRECTION_UPSTREAM],
58
+ )?;
59
+ direction = if value == MAP_DIRECTION_UPSTREAM {
60
+ MapDirection::Upstream
61
+ } else {
62
+ MapDirection::Downstream
63
+ };
53
64
  }
54
65
  "--depth" => {
55
66
  let value = option_value(arguments, &mut position, resolved, inline)?;
@@ -117,6 +128,7 @@ pub(crate) fn parse(arguments: &[String]) -> Result<Option<MapOptions>, String>
117
128
  symbol.ok_or_else(|| parser_error("the following arguments are required: symbol"))?;
118
129
  Ok(Some(MapOptions {
119
130
  symbol,
131
+ direction,
120
132
  depth,
121
133
  roots,
122
134
  path_mode,
@@ -0,0 +1,3 @@
1
+ pub(crate) fn help() -> String {
2
+ "Usage: fensu {init,check,rule,map,skills,memory} ...\n\nCommands:\n init Initialize Fensu configuration for a repository.\n check Evaluate repository architecture rules.\n rule Show details for one rule.\n map Render a directional project call map.\n skills Generate and install agent guidance.\n memory Synchronize, inspect, and query persistent repository memory.\n\nRun `fensu <command> --help` for command-specific options.\n".to_owned()
3
+ }
@@ -38,5 +38,7 @@ pub(crate) fn load_optional(start: &Path) -> Result<Option<(PathBuf, Config)>, S
38
38
 
39
39
  pub(crate) fn custom_rules_are_configured(start: &Path) -> Result<bool, String> {
40
40
  let (_, config) = load(start)?;
41
- Ok(!config.rule_paths.is_empty() || !config.rule_modules.is_empty())
41
+ Ok(!config.rule_paths.is_empty()
42
+ || !config.rule_modules.is_empty()
43
+ || !config.rule_options.is_empty())
42
44
  }
@@ -30,6 +30,11 @@ pub(crate) fn build(
30
30
  ignore: strings(table.get("ignore")),
31
31
  rule_paths: strings(table.get("rule_paths")),
32
32
  rule_modules: strings(table.get("rule_modules")),
33
+ rule_options: table
34
+ .get("rule_options")
35
+ .and_then(toml::Value::as_table)
36
+ .cloned()
37
+ .unwrap_or_default(),
33
38
  cache_enabled: cache
34
39
  .and_then(|values| values.get("enabled"))
35
40
  .and_then(toml::Value::as_bool)
@@ -19,6 +19,7 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
19
19
  "ignore",
20
20
  "rule_paths",
21
21
  "rule_modules",
22
+ "rule_options",
22
23
  "thresholds",
23
24
  "roles",
24
25
  "contracts",
@@ -37,6 +38,7 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
37
38
  validate_optional_table(table, "cache", &["enabled", "require_cacheable"])?;
38
39
  validate_optional_table(table, "evaluation", &["include", "exclude"])?;
39
40
  validate_optional_table(table, "skills", &["name"])?;
41
+ validate_rule_options(table.get("rule_options"))?;
40
42
  for name in [
41
43
  "tests",
42
44
  "tooling",
@@ -63,6 +65,19 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
63
65
  Ok(())
64
66
  }
65
67
 
68
+ fn validate_rule_options(value: Option<&toml::Value>) -> Result<(), String> {
69
+ let Some(value) = value else {
70
+ return Ok(());
71
+ };
72
+ let rules = value
73
+ .as_table()
74
+ .ok_or_else(|| "Config key rule_options must be a table.".to_owned())?;
75
+ if rules.values().any(|options| !options.is_table()) {
76
+ return Err("Config key rule_options must contain rule-code tables.".to_owned());
77
+ }
78
+ Ok(())
79
+ }
80
+
66
81
  fn validate_nested_roots(roots: Vec<String>) -> Result<(), String> {
67
82
  for (index, first) in roots.iter().enumerate() {
68
83
  let first = first.split('/').collect::<Vec<_>>();
@@ -78,6 +78,7 @@ pub(crate) fn evaluate_and_render(
78
78
  observations: HashMap::new(),
79
79
  custom_registrations: Vec::new(),
80
80
  repo_root: root.to_string_lossy().into_owned(),
81
+ rule_options: native_rule_options(codes)?,
81
82
  };
82
83
  let plans = plan_core_rule_queries(program(source), codes, &context);
83
84
  context.observations = observe(root, &plans, &program_by_path, &program_by_module);
@@ -156,6 +157,26 @@ pub(crate) fn evaluate_and_render(
156
157
  Ok((output, i32::from(!blocking_faults.is_empty())))
157
158
  }
158
159
 
160
+ fn native_rule_options(
161
+ codes: &[String],
162
+ ) -> Result<HashMap<String, HashMap<String, String>>, String> {
163
+ let mut by_code = HashMap::new();
164
+ for code in codes {
165
+ let rule = rule::rule(code).ok_or_else(|| format!("Unknown native rule code: {code}"))?;
166
+ let mut values = HashMap::new();
167
+ for option in &rule.options {
168
+ values.insert(
169
+ option.name.clone(),
170
+ serde_json::to_string(&option.current_value).map_err(|error| error.to_string())?,
171
+ );
172
+ }
173
+ if !values.is_empty() {
174
+ by_code.insert(rule.code.clone(), values);
175
+ }
176
+ }
177
+ Ok(by_code)
178
+ }
179
+
159
180
  pub(crate) fn selected_rules(select: &[String], ignore: &[String]) -> Vec<&'static RuleMetadata> {
160
181
  rule::catalogue()
161
182
  .iter()
@@ -270,7 +270,7 @@ pub(crate) fn check_identity(
270
270
  warnings: bool,
271
271
  ) -> String {
272
272
  let mut digest = Sha256::new();
273
- digest.update(b"fensu-native-check-v2\0");
273
+ digest.update(b"fensu-native-check-v3\0");
274
274
  digest.update(env!("CARGO_PKG_VERSION").as_bytes());
275
275
  digest.update(&config.raw);
276
276
  digest.update([u8::from(warnings)]);
@@ -5,7 +5,7 @@ use std::sync::OnceLock;
5
5
 
6
6
  use crate::configuration::main::load;
7
7
  use crate::constants::{COLOR_ALWAYS, COLOR_AUTO, COLOR_NEVER, OPTION_COLOR};
8
- use crate::models::{Config, RuleMetadata};
8
+ use crate::models::{Config, RuleMetadata, RuleOptionMetadata, RuleOptionValue};
9
9
  use crate::skills::main::catalogue::load_rule_catalogue;
10
10
 
11
11
  static CATALOGUE: OnceLock<Vec<RuleMetadata>> = OnceLock::new();
@@ -24,7 +24,10 @@ pub(crate) fn rule_output(arguments: &[String]) -> Result<String, String> {
24
24
  let project_root = config_path
25
25
  .parent()
26
26
  .ok_or_else(|| "Configuration has no parent directory.".to_owned())?;
27
- let catalogue = if loaded.rule_paths.is_empty() && loaded.rule_modules.is_empty() {
27
+ let catalogue = if loaded.rule_paths.is_empty()
28
+ && loaded.rule_modules.is_empty()
29
+ && loaded.rule_options.is_empty()
30
+ {
28
31
  catalogue().to_vec()
29
32
  } else {
30
33
  load_rule_catalogue(&loaded, project_root)?
@@ -91,11 +94,81 @@ fn render(metadata: &RuleMetadata, config: &Config, color: bool) -> String {
91
94
  };
92
95
  let mut output = format!("{header}\n");
93
96
  render_metadata(&mut output, metadata, color);
97
+ render_options(&mut output, metadata);
94
98
  render_exceptions(&mut output, metadata, config);
95
99
  render_rule_ignores(&mut output, metadata, config);
96
100
  output
97
101
  }
98
102
 
103
+ fn render_options(output: &mut String, metadata: &RuleMetadata) {
104
+ if metadata.options.is_empty() {
105
+ return;
106
+ }
107
+ let mut options = metadata.options.iter().collect::<Vec<_>>();
108
+ options.sort_by(|left, right| left.name.cmp(&right.name));
109
+ output.push_str("\nOptions:\n");
110
+ for option in options {
111
+ output.push_str(&format!(" {}\n", option.name));
112
+ for (label, value) in option_lines(option) {
113
+ output.push_str(&format!(" {label}: {value}\n"));
114
+ }
115
+ }
116
+ }
117
+
118
+ fn option_lines(option: &RuleOptionMetadata) -> [(&'static str, String); 9] {
119
+ [
120
+ ("Type", option_type(&option.kind).to_owned()),
121
+ ("Required", option.required.to_string()),
122
+ (
123
+ "Default",
124
+ if option.required {
125
+ "required".to_owned()
126
+ } else {
127
+ option_value(option.default.as_ref())
128
+ },
129
+ ),
130
+ ("Current value", option_value(Some(&option.current_value))),
131
+ (
132
+ "Description",
133
+ option
134
+ .description
135
+ .clone()
136
+ .unwrap_or_else(|| "None".to_owned()),
137
+ ),
138
+ (
139
+ "Choices",
140
+ serde_json::to_string(&option.choices).unwrap_or_else(|_| "null".to_owned()),
141
+ ),
142
+ ("Minimum", optional_number(option.minimum)),
143
+ ("Maximum", optional_number(option.maximum)),
144
+ (
145
+ "Minimum items",
146
+ option
147
+ .minimum_items
148
+ .map_or_else(|| "None".to_owned(), |value| value.to_string()),
149
+ ),
150
+ ]
151
+ }
152
+
153
+ fn option_type(kind: &str) -> &str {
154
+ match kind {
155
+ "string_list" => "list[string]",
156
+ "integer_list" => "list[integer]",
157
+ other => other,
158
+ }
159
+ }
160
+
161
+ fn option_value(value: Option<&RuleOptionValue>) -> String {
162
+ value.map_or_else(
163
+ || "None".to_owned(),
164
+ |value| serde_json::to_string(value).unwrap_or_else(|_| "null".to_owned()),
165
+ )
166
+ }
167
+
168
+ fn optional_number(value: Option<i64>) -> String {
169
+ value.map_or_else(|| "None".to_owned(), |value| value.to_string())
170
+ }
171
+
99
172
  fn render_metadata(output: &mut String, metadata: &RuleMetadata, color: bool) {
100
173
  let enabled = if metadata.enabled_by_default {
101
174
  "yes"
@@ -5,6 +5,8 @@ pub(crate) const EXPRESSION_STRING: &str = "string";
5
5
  pub(crate) const EXPRESSION_SUBSCRIPT: &str = "subscript";
6
6
  pub(crate) const INIT_MODULE_FILE: &str = "__init__.py";
7
7
  pub(crate) const INIT_MODULE: &str = "__init__";
8
+ pub(crate) const MAP_DIRECTION_DOWNSTREAM: &str = "downstream";
9
+ pub(crate) const MAP_DIRECTION_UPSTREAM: &str = "upstream";
8
10
  pub(crate) const SELF_RECEIVER: &str = "self";
9
11
  pub(crate) const CLASS_RECEIVER: &str = "cls";
10
12
  pub(crate) const MAX_COMPACT_PATH_PARTS: usize = 4;
@@ -3,7 +3,9 @@ use std::io::{self, IsTerminal};
3
3
  use std::path::Path;
4
4
 
5
5
  use crate::mapping::helpers::{cache, index, project, render, tree};
6
- use crate::mapping::models::{MapCacheStats, MapOptions, ProjectIndex, SourceSnapshot};
6
+ use crate::mapping::models::{
7
+ MapCacheStats, MapDirection, MapOptions, ProjectIndex, SourceSnapshot,
8
+ };
7
9
  use crate::models::CliOutput;
8
10
 
9
11
  pub(crate) fn execute(options: MapOptions) -> Result<CliOutput, String> {
@@ -19,7 +21,10 @@ pub(crate) fn execute(options: MapOptions) -> Result<CliOutput, String> {
19
21
  (index::build(&snapshots)?, None)
20
22
  };
21
23
  let root = index::select(&project_index.functions, &options.symbol)?;
22
- let call_tree = tree::build_tree(root, &project_index, options.depth);
24
+ let call_tree = match options.direction {
25
+ MapDirection::Downstream => tree::build_tree(root, &project_index, options.depth),
26
+ MapDirection::Upstream => tree::build_upstream_tree(root, &project_index, options.depth),
27
+ };
23
28
  let use_color = env::var_os("NO_COLOR").is_none()
24
29
  && match options.color.as_str() {
25
30
  "always" => true,
@@ -10,8 +10,16 @@ use crate::mapping::models::{
10
10
  MappingExpression, MappingStatement, ProjectIndex, ResolvedCallable, UnresolvedCall,
11
11
  };
12
12
 
13
- type MethodCache = BTreeMap<(String, String, bool), Option<FunctionDefinition>>;
13
+ type CallableStateKey = (String, Option<String>);
14
+ type MethodCache = BTreeMap<(String, String, bool), Option<String>>;
14
15
  type ReceiverState = BTreeMap<String, Option<String>>;
16
+ type IncomingCallers = BTreeMap<CallableStateKey, BTreeMap<CallableStateKey, CallableState>>;
17
+
18
+ #[derive(Clone)]
19
+ struct CallableState {
20
+ definition_key: String,
21
+ dispatch_class_key: Option<String>,
22
+ }
15
23
 
16
24
  pub(crate) fn build_tree(
17
25
  root: FunctionDefinition,
@@ -32,6 +40,216 @@ pub(crate) fn build_tree(
32
40
  )
33
41
  }
34
42
 
43
+ pub(crate) fn build_upstream_tree(
44
+ root: FunctionDefinition,
45
+ index: &ProjectIndex,
46
+ depth: usize,
47
+ ) -> CallMapNode {
48
+ let dispatch = root
49
+ .owning_class
50
+ .as_deref()
51
+ .map(|class| build_class_key(&root.module_name, class));
52
+ let callers = incoming_callers(index);
53
+ build_upstream_node(
54
+ root,
55
+ dispatch,
56
+ index,
57
+ &callers,
58
+ depth,
59
+ &BTreeSet::new(),
60
+ true,
61
+ )
62
+ }
63
+
64
+ fn build_upstream_node(
65
+ definition: FunctionDefinition,
66
+ dispatch_class_key: Option<String>,
67
+ index: &ProjectIndex,
68
+ callers: &IncomingCallers,
69
+ remaining_depth: usize,
70
+ ancestors: &BTreeSet<CallableStateKey>,
71
+ aggregate_dispatch: bool,
72
+ ) -> CallMapNode {
73
+ let key = (definition.key(), dispatch_class_key.clone());
74
+ let dispatch_class_name =
75
+ dispatch_class_name(&definition, dispatch_class_key.as_deref(), index);
76
+ if ancestors.contains(&key) {
77
+ return CallMapNode {
78
+ definition,
79
+ entries: Vec::new(),
80
+ dispatch_class_name,
81
+ cycle: true,
82
+ truncated: false,
83
+ };
84
+ }
85
+ let incoming = incoming_states(&key, callers, aggregate_dispatch);
86
+ if remaining_depth == 0 {
87
+ return CallMapNode {
88
+ definition,
89
+ entries: Vec::new(),
90
+ dispatch_class_name,
91
+ cycle: false,
92
+ truncated: !incoming.is_empty(),
93
+ };
94
+ }
95
+ let mut next_ancestors = ancestors.clone();
96
+ next_ancestors.insert(key);
97
+ let entries = incoming
98
+ .into_iter()
99
+ .filter_map(|caller| {
100
+ let caller_definition = index.functions.get(&caller.definition_key)?.clone();
101
+ Some(CallMapEntry::Node(Box::new(build_upstream_node(
102
+ caller_definition,
103
+ caller.dispatch_class_key.clone(),
104
+ index,
105
+ callers,
106
+ remaining_depth - 1,
107
+ &next_ancestors,
108
+ false,
109
+ ))))
110
+ })
111
+ .collect();
112
+ CallMapNode {
113
+ definition,
114
+ entries,
115
+ dispatch_class_name,
116
+ cycle: false,
117
+ truncated: false,
118
+ }
119
+ }
120
+
121
+ fn incoming_states<'a>(
122
+ target: &CallableStateKey,
123
+ callers: &'a IncomingCallers,
124
+ aggregate_dispatch: bool,
125
+ ) -> Vec<&'a CallableState> {
126
+ let mut states = BTreeMap::new();
127
+ if aggregate_dispatch {
128
+ for ((definition_key, _), incoming) in callers {
129
+ if definition_key == &target.0 {
130
+ states.extend(incoming.iter().map(|(key, state)| (key.clone(), state)));
131
+ }
132
+ }
133
+ } else if let Some(incoming) = callers.get(target) {
134
+ states.extend(incoming.iter().map(|(key, state)| (key.clone(), state)));
135
+ }
136
+ states.into_values().collect()
137
+ }
138
+
139
+ fn incoming_callers(index: &ProjectIndex) -> IncomingCallers {
140
+ let mut callers = IncomingCallers::new();
141
+ let mut method_cache = MethodCache::new();
142
+ for caller in callable_states(index, &mut method_cache) {
143
+ let Some(definition) = index.functions.get(&caller.definition_key) else {
144
+ continue;
145
+ };
146
+ for entry in call_entries(
147
+ definition,
148
+ caller.dispatch_class_key.as_deref(),
149
+ index,
150
+ &mut method_cache,
151
+ ) {
152
+ let PendingEntry::Resolved(target) = entry else {
153
+ continue;
154
+ };
155
+ let target_key = (target.definition.key(), target.dispatch_class_key);
156
+ let caller_key = (
157
+ caller.definition_key.clone(),
158
+ caller.dispatch_class_key.clone(),
159
+ );
160
+ callers
161
+ .entry(target_key)
162
+ .or_default()
163
+ .insert(caller_key, caller.clone());
164
+ }
165
+ }
166
+ callers
167
+ }
168
+
169
+ fn callable_states(index: &ProjectIndex, method_cache: &mut MethodCache) -> Vec<CallableState> {
170
+ let descendants = inheritance_descendants(index);
171
+ let mut states = BTreeMap::new();
172
+ for definition in index.functions.values() {
173
+ let Some(owner) = definition.owning_class.as_deref() else {
174
+ let state = CallableState {
175
+ definition_key: definition.key(),
176
+ dispatch_class_key: None,
177
+ };
178
+ states.insert((definition.key(), None), state);
179
+ continue;
180
+ };
181
+ let owner_key = build_class_key(&definition.module_name, owner);
182
+ for class_key in descendants.get(&owner_key).into_iter().flatten() {
183
+ let Some(class) = index.classes.get(class_key) else {
184
+ continue;
185
+ };
186
+ let resolved = method_definition(
187
+ class,
188
+ &definition.name,
189
+ index,
190
+ method_cache,
191
+ &mut BTreeSet::new(),
192
+ false,
193
+ );
194
+ if resolved.as_ref().map(FunctionDefinition::key) != Some(definition.key()) {
195
+ continue;
196
+ }
197
+ let dispatch_class_key = Some(class.key());
198
+ states.insert(
199
+ (definition.key(), dispatch_class_key.clone()),
200
+ CallableState {
201
+ definition_key: definition.key(),
202
+ dispatch_class_key,
203
+ },
204
+ );
205
+ }
206
+ }
207
+ states.into_values().collect()
208
+ }
209
+
210
+ fn inheritance_descendants(index: &ProjectIndex) -> BTreeMap<String, BTreeSet<String>> {
211
+ let mut descendants = index
212
+ .classes
213
+ .keys()
214
+ .map(|key| (key.clone(), BTreeSet::from([key.clone()])))
215
+ .collect::<BTreeMap<_, _>>();
216
+ for class_key in index.classes.keys() {
217
+ let mut ancestors = BTreeSet::new();
218
+ collect_class_ancestors(
219
+ class_key,
220
+ index,
221
+ &mut BTreeSet::new(),
222
+ &mut ancestors,
223
+ );
224
+ for ancestor in ancestors {
225
+ descendants
226
+ .entry(ancestor)
227
+ .or_default()
228
+ .insert(class_key.clone());
229
+ }
230
+ }
231
+ descendants
232
+ }
233
+
234
+ fn collect_class_ancestors(
235
+ class_key: &str,
236
+ index: &ProjectIndex,
237
+ active: &mut BTreeSet<String>,
238
+ ancestors: &mut BTreeSet<String>,
239
+ ) {
240
+ if !active.insert(class_key.to_owned()) {
241
+ return;
242
+ }
243
+ if let Some(class) = index.classes.get(class_key) {
244
+ for base_key in &class.base_keys {
245
+ if index.classes.contains_key(base_key) && ancestors.insert(base_key.clone()) {
246
+ collect_class_ancestors(base_key, index, active, ancestors);
247
+ }
248
+ }
249
+ }
250
+ active.remove(class_key);
251
+ }
252
+
35
253
  fn build_node(
36
254
  definition: FunctionDefinition,
37
255
  dispatch_class_key: Option<String>,
@@ -416,7 +634,10 @@ fn method_definition(
416
634
  ) -> Option<FunctionDefinition> {
417
635
  let cache_key = (class.key(), method_name.to_owned(), exclude_protocol_bases);
418
636
  if let Some(cached) = cache.get(&cache_key) {
419
- return cached.clone();
637
+ return cached
638
+ .as_deref()
639
+ .and_then(|key| index.functions.get(key))
640
+ .cloned();
420
641
  }
421
642
  let active_key = (class.key(), method_name.to_owned());
422
643
  if !active.insert(active_key.clone()) {
@@ -424,11 +645,11 @@ fn method_definition(
424
645
  }
425
646
  let direct_key = build_function_key(&class.module_name, method_name, Some(&class.name));
426
647
  if let Some(direct) = index.functions.get(&direct_key).cloned() {
427
- cache.insert(cache_key, Some(direct.clone()));
648
+ cache.insert(cache_key, Some(direct_key));
428
649
  active.remove(&active_key);
429
650
  return Some(direct);
430
651
  }
431
- let mut candidates = BTreeMap::new();
652
+ let mut candidates = BTreeSet::new();
432
653
  for base in &class.bases {
433
654
  let owner = class_as_function(class);
434
655
  let Some(base_class) = resolve_class_expression(base, &owner, index, false) else {
@@ -445,15 +666,15 @@ fn method_definition(
445
666
  active,
446
667
  exclude_protocol_bases,
447
668
  ) {
448
- candidates.insert(inherited.key(), inherited);
669
+ candidates.insert(inherited.key());
449
670
  }
450
671
  }
451
672
  active.remove(&active_key);
452
- let result = (candidates.len() == 1)
453
- .then(|| candidates.into_values().next())
673
+ let result_key = (candidates.len() == 1)
674
+ .then(|| candidates.into_iter().next())
454
675
  .flatten();
455
- cache.insert(cache_key, result.clone());
456
- result
676
+ cache.insert(cache_key, result_key.clone());
677
+ result_key.and_then(|key| index.functions.get(&key).cloned())
457
678
  }
458
679
 
459
680
  fn resolve_class_expression(
@@ -184,6 +184,13 @@ pub(crate) enum PathMode {
184
184
  None,
185
185
  }
186
186
 
187
+ #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
188
+ pub(crate) enum MapDirection {
189
+ #[default]
190
+ Downstream,
191
+ Upstream,
192
+ }
193
+
187
194
  #[derive(Clone, Copy, Debug, Default)]
188
195
  pub(crate) struct MapCacheStats {
189
196
  pub(crate) manifest_hit: bool,
@@ -197,6 +204,7 @@ pub(crate) struct MapCacheStats {
197
204
  #[derive(Debug)]
198
205
  pub(crate) struct MapOptions {
199
206
  pub(crate) symbol: String,
207
+ pub(crate) direction: MapDirection,
200
208
  pub(crate) depth: usize,
201
209
  pub(crate) roots: Vec<String>,
202
210
  pub(crate) path_mode: PathMode,