fensu-cli 0.4.0__tar.gz → 0.4.1__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 (472) hide show
  1. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/Cargo.lock +1 -1
  2. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/PKG-INFO +1 -1
  3. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/Cargo.toml +1 -1
  4. fensu_cli-0.4.1/crates/fensu-cli/src/command/constants.rs +19 -0
  5. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/map_parsing.rs +14 -2
  6. fensu_cli-0.4.1/crates/fensu-cli/src/command/main/help.rs +3 -0
  7. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/constants.rs +2 -0
  8. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/execution.rs +7 -2
  9. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/tree_policy.inc +230 -9
  10. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/models.rs +8 -0
  11. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/content/rendering.rs +1 -1
  12. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/mapping/commands.inc +153 -2
  13. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/mapping/helpers.rs +29 -1
  14. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/pyproject.toml +1 -1
  15. fensu_cli-0.4.0/crates/fensu-cli/src/command/constants.rs +0 -19
  16. fensu_cli-0.4.0/crates/fensu-cli/src/command/main/help.rs +0 -3
  17. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/Cargo.toml +0 -0
  18. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/README.md +0 -0
  19. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/assets/catalogue.json +0 -0
  20. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/assets/python.gitignore +0 -0
  21. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/assets/skills_invariant.json +0 -0
  22. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/build.rs +0 -0
  23. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/memory_execution.rs +0 -0
  24. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/memory_graph_rendering.rs +0 -0
  25. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/memory_help.rs +0 -0
  26. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/memory_human_rendering.rs +0 -0
  27. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/memory_parsing.rs +0 -0
  28. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/memory_structured_rendering.rs +0 -0
  29. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/memory_values.rs +0 -0
  30. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/helpers/mod.rs +0 -0
  31. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/check.rs +0 -0
  32. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/init.rs +0 -0
  33. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/map.rs +0 -0
  34. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/memory.rs +0 -0
  35. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/mod.rs +0 -0
  36. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/rule.rs +0 -0
  37. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/run_cli.rs +0 -0
  38. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/main/skills.rs +0 -0
  39. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/mod.rs +0 -0
  40. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/command/models.rs +0 -0
  41. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/helpers/discovery.rs +0 -0
  42. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/helpers/exceptions.rs +0 -0
  43. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/helpers/loading.rs +0 -0
  44. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/helpers/mod.rs +0 -0
  45. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/helpers/parsing.rs +0 -0
  46. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/helpers/validation.rs +0 -0
  47. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
  48. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
  49. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
  50. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
  51. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/configuration/mod.rs +0 -0
  52. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/constants.rs +0 -0
  53. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/cache.rs +0 -0
  54. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/check_cleanup.rs +0 -0
  55. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/check_evaluation.rs +0 -0
  56. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/check_execution.rs +0 -0
  57. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/check_policy.rs +0 -0
  58. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/check_project.rs +0 -0
  59. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/init.rs +0 -0
  60. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/mod.rs +0 -0
  61. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/process.rs +0 -0
  62. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/render.rs +0 -0
  63. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/helpers/rule.rs +0 -0
  64. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/lib.rs +0 -0
  65. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/main.rs +0 -0
  66. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/cache.rs +0 -0
  67. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/decoding.rs +0 -0
  68. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/identity.rs +0 -0
  69. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/index.rs +0 -0
  70. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/mod.rs +0 -0
  71. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/project.rs +0 -0
  72. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/render.rs +0 -0
  73. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/helpers/tree.rs +0 -0
  74. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
  75. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
  76. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/mapping/mod.rs +0 -0
  77. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/models.rs +0 -0
  78. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/command/execution.rs +0 -0
  79. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/command/mod.rs +0 -0
  80. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/content/discovery.rs +0 -0
  81. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/content/fingerprint.rs +0 -0
  82. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/content/mod.rs +0 -0
  83. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/content/sections.rs +0 -0
  84. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/context/build.rs +0 -0
  85. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/context/exceptions.rs +0 -0
  86. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/context/identity.rs +0 -0
  87. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/context/mod.rs +0 -0
  88. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/context/options.rs +0 -0
  89. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/context/selection.rs +0 -0
  90. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/installation/filesystem.rs +0 -0
  91. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/installation/freshness.rs +0 -0
  92. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/installation/install.rs +0 -0
  93. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/installation/mod.rs +0 -0
  94. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/installation/plan.rs +0 -0
  95. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/installation/publication.rs +0 -0
  96. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/installation/transaction.rs +0 -0
  97. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/helpers/mod.rs +0 -0
  98. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
  99. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
  100. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
  101. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
  102. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
  103. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/mod.rs +0 -0
  104. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/src/skills/models.rs +0 -0
  105. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/command/check_cleanup.rs +0 -0
  106. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/command/check_policy.rs +0 -0
  107. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/command/commands.rs +0 -0
  108. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/command/helpers.rs +0 -0
  109. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/command/test_types.rs +0 -0
  110. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/command.rs +0 -0
  111. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/mapping/commands.rs +0 -0
  112. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/mapping.rs +0 -0
  113. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/skills/commands.inc +0 -0
  114. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/skills/commands.rs +0 -0
  115. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
  116. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
  117. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-cli/tests/skills.rs +0 -0
  118. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/Cargo.toml +0 -0
  119. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/constants.rs +0 -0
  120. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/annotations.rs +0 -0
  121. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/contracts.rs +0 -0
  122. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/declarations.rs +0 -0
  123. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/functions.rs +0 -0
  124. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/harness.rs +0 -0
  125. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/hygiene.rs +0 -0
  126. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/mapping.rs +0 -0
  127. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/mod.rs +0 -0
  128. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/references.rs +0 -0
  129. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/rule_authoring.rs +0 -0
  130. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/conversion/state.rs +0 -0
  131. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/gateway/bindings.rs +0 -0
  132. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/gateway/mod.rs +0 -0
  133. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/gateway/model_types.rs +0 -0
  134. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/gateway/repository_bindings.rs +0 -0
  135. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/gateway/rule_authoring_bindings.rs +0 -0
  136. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/helpers/mod.rs +0 -0
  137. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
  138. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
  139. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/mod.rs +0 -0
  140. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/extension/models.rs +0 -0
  141. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/annotations/mod.rs +0 -0
  142. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/annotations/visitor.rs +0 -0
  143. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/contracts/category.rs +0 -0
  144. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/contracts/display.rs +0 -0
  145. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/contracts/mod.rs +0 -0
  146. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/contracts/returns.rs +0 -0
  147. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/contracts/rows.rs +0 -0
  148. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/control/conditionals.rs +0 -0
  149. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/control/mod.rs +0 -0
  150. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/declarations/mod.rs +0 -0
  151. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/declarations/rows.rs +0 -0
  152. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/harness/calls.rs +0 -0
  153. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/harness/dimensions.rs +0 -0
  154. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/harness/functions.rs +0 -0
  155. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/harness/imports.rs +0 -0
  156. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/harness/mod.rs +0 -0
  157. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/hygiene/checks.rs +0 -0
  158. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/hygiene/mod.rs +0 -0
  159. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/metrics/functions.rs +0 -0
  160. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/metrics/lookups.rs +0 -0
  161. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/metrics/mod.rs +0 -0
  162. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/metrics/mutations.rs +0 -0
  163. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/mod.rs +0 -0
  164. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/naming/mod.rs +0 -0
  165. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/naming/names.rs +0 -0
  166. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/project/calls.rs +0 -0
  167. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/project/mod.rs +0 -0
  168. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/references/events.rs +0 -0
  169. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/references/mod.rs +0 -0
  170. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/references/test_shape.rs +0 -0
  171. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/rule_authoring/literals.rs +0 -0
  172. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/rule_authoring/mod.rs +0 -0
  173. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/rule_authoring/mutations.rs +0 -0
  174. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/rule_authoring/ownership.rs +0 -0
  175. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/rule_authoring/references.rs +0 -0
  176. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/shape/breadth.rs +0 -0
  177. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/shape/children.rs +0 -0
  178. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/shape/expression_children.rs +0 -0
  179. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/shape/mod.rs +0 -0
  180. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/shape/nodes.rs +0 -0
  181. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/shape/spans.rs +0 -0
  182. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/shape/statement_children.rs +0 -0
  183. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/state/mod.rs +0 -0
  184. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/state/resolution.rs +0 -0
  185. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/state/scopes.rs +0 -0
  186. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/wording/mod.rs +0 -0
  187. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/helpers/wording/text.rs +0 -0
  188. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
  189. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
  190. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
  191. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
  192. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
  193. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
  194. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
  195. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
  196. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
  197. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
  198. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
  199. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
  200. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
  201. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
  202. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
  203. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
  204. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
  205. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
  206. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
  207. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
  208. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
  209. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/constants.rs +0 -0
  210. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/helpers/classes.rs +0 -0
  211. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/helpers/expressions.rs +0 -0
  212. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/helpers/extraction.rs +0 -0
  213. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/helpers/functions.rs +0 -0
  214. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/helpers/imports.rs +0 -0
  215. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/helpers/mod.rs +0 -0
  216. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_declarations.rs +0 -0
  217. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_facts.rs +0 -0
  218. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/main/mod.rs +0 -0
  219. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/mod.rs +0 -0
  220. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mapping/models.rs +0 -0
  221. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/mod.rs +0 -0
  222. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/models.rs +0 -0
  223. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/facts/types.rs +0 -0
  224. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/lib.rs +0 -0
  225. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/parsing/helpers/failures.rs +0 -0
  226. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/parsing/helpers/mod.rs +0 -0
  227. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
  228. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
  229. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
  230. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/parsing/mod.rs +0 -0
  231. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/parsing/models.rs +0 -0
  232. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/positions/helpers/line_index.rs +0 -0
  233. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/positions/helpers/mod.rs +0 -0
  234. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
  235. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
  236. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
  237. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/positions/mod.rs +0 -0
  238. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/positions/models.rs +0 -0
  239. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
  240. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/helpers/matching.rs +0 -0
  241. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/helpers/mod.rs +0 -0
  242. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/helpers/observation_index.rs +0 -0
  243. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/helpers/repository_observation_index.rs +0 -0
  244. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/helpers/repository_paths.rs +0 -0
  245. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
  246. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
  247. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
  248. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
  249. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
  250. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/src/snapshot/models.rs +0 -0
  251. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/facts/enumerate.rs +0 -0
  252. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/facts/mapping.rs +0 -0
  253. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/facts/rule_authoring.rs +0 -0
  254. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
  255. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/facts.rs +0 -0
  256. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/parsing/strict.rs +0 -0
  257. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
  258. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/parsing.rs +0 -0
  259. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/positions/locate.rs +0 -0
  260. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
  261. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/positions.rs +0 -0
  262. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/snapshot/hashing.rs +0 -0
  263. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
  264. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/snapshot/observations.rs +0 -0
  265. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
  266. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/snapshot/walk.rs +0 -0
  267. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-facts/tests/snapshot.rs +0 -0
  268. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/Cargo.toml +0 -0
  269. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/helpers/loading.rs +0 -0
  270. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/helpers/mod.rs +0 -0
  271. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
  272. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
  273. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
  274. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/mod.rs +0 -0
  275. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/models.rs +0 -0
  276. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/corpus/types.rs +0 -0
  277. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/constants.rs +0 -0
  278. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/errors.rs +0 -0
  279. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/archival/archive.rs +0 -0
  280. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/archival/mod.rs +0 -0
  281. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/mod.rs +0 -0
  282. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/database.rs +0 -0
  283. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/documents.rs +0 -0
  284. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/lists.rs +0 -0
  285. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/mod.rs +0 -0
  286. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/references.rs +0 -0
  287. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/sections.rs +0 -0
  288. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/skills.rs +0 -0
  289. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/streaming.rs +0 -0
  290. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/publication/values.rs +0 -0
  291. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/querying/graph_loading.rs +0 -0
  292. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/querying/graphs.rs +0 -0
  293. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/querying/mod.rs +0 -0
  294. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/querying/overviews.rs +0 -0
  295. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/querying/queries.rs +0 -0
  296. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/querying/query_values.rs +0 -0
  297. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/diagnostics.rs +0 -0
  298. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/mod.rs +0 -0
  299. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/schema_core.rs +0 -0
  300. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/schema_markdown.rs +0 -0
  301. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/schema_metadata.rs +0 -0
  302. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/schema_skill_view.rs +0 -0
  303. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/schema_views.rs +0 -0
  304. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/summaries.rs +0 -0
  305. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/helpers/reporting/synchronization.rs +0 -0
  306. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
  307. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
  308. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
  309. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
  310. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
  311. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
  312. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
  313. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
  314. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
  315. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
  316. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
  317. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
  318. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
  319. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/mod.rs +0 -0
  320. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/engine/models.rs +0 -0
  321. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/helpers/cycles.rs +0 -0
  322. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/helpers/dependencies.rs +0 -0
  323. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/helpers/document_targets.rs +0 -0
  324. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/helpers/heading_targets.rs +0 -0
  325. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/helpers/link_resolution.rs +0 -0
  326. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/helpers/mod.rs +0 -0
  327. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
  328. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
  329. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/mod.rs +0 -0
  330. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/models.rs +0 -0
  331. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/graph/types.rs +0 -0
  332. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/lib.rs +0 -0
  333. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/constants.rs +0 -0
  334. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/assembly.rs +0 -0
  335. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/blocks.rs +0 -0
  336. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/headings.rs +0 -0
  337. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/line_index.rs +0 -0
  338. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/links.rs +0 -0
  339. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/lists.rs +0 -0
  340. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/mod.rs +0 -0
  341. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/obsidian.rs +0 -0
  342. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/helpers/text.rs +0 -0
  343. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
  344. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
  345. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/mod.rs +0 -0
  346. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/models.rs +0 -0
  347. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/markdown/types.rs +0 -0
  348. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/constants.rs +0 -0
  349. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/bootstrap.rs +0 -0
  350. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/collisions.rs +0 -0
  351. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/discovery.rs +0 -0
  352. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/documents.rs +0 -0
  353. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/filesystem.rs +0 -0
  354. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/git_tracking.rs +0 -0
  355. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/mod.rs +0 -0
  356. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/skills.rs +0 -0
  357. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/tree.rs +0 -0
  358. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/helpers/validation.rs +0 -0
  359. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
  360. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
  361. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/main/mod.rs +0 -0
  362. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/mod.rs +0 -0
  363. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/models.rs +0 -0
  364. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/src/source/types.rs +0 -0
  365. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
  366. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/corpus/loading.rs +0 -0
  367. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
  368. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/corpus.rs +0 -0
  369. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/archive.rs +0 -0
  370. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/bootstrap.rs +0 -0
  371. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/check.rs +0 -0
  372. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/dependencies.rs +0 -0
  373. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/graph_query.rs +0 -0
  374. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
  375. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/list_batch/list_batches.rs +0 -0
  376. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
  377. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/overview.rs +0 -0
  378. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/performance.rs +0 -0
  379. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/query.rs +0 -0
  380. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/schema.rs +0 -0
  381. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
  382. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/streaming.rs +0 -0
  383. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/summary.rs +0 -0
  384. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/sync.rs +0 -0
  385. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
  386. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/engine.rs +0 -0
  387. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/graph/dependencies.rs +0 -0
  388. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
  389. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/graph/resolution.rs +0 -0
  390. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
  391. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/graph.rs +0 -0
  392. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/markdown/code_blocks.rs +0 -0
  393. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/markdown/links.rs +0 -0
  394. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/markdown/lists.rs +0 -0
  395. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/markdown/structure.rs +0 -0
  396. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
  397. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/markdown.rs +0 -0
  398. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/source/collisions.rs +0 -0
  399. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/source/discovery.rs +0 -0
  400. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/source/git_worktrees.rs +0 -0
  401. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/source/helpers.rs +0 -0
  402. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/source/symlinks.rs +0 -0
  403. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/source/test_types.rs +0 -0
  404. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-memory/tests/source.rs +0 -0
  405. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/Cargo.toml +0 -0
  406. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/constants.rs +0 -0
  407. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/bindings.rs +0 -0
  408. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/database.rs +0 -0
  409. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/generation.rs +0 -0
  410. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/mod.rs +0 -0
  411. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/publication.rs +0 -0
  412. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/publication_merge.rs +0 -0
  413. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/records.rs +0 -0
  414. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/replay.rs +0 -0
  415. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/schema.rs +0 -0
  416. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/schema_values.rs +0 -0
  417. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/helpers/storage.rs +0 -0
  418. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/main/mod.rs +0 -0
  419. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
  420. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
  421. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/mod.rs +0 -0
  422. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/models.rs +0 -0
  423. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
  424. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/tests/records.rs +0 -0
  425. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/tests/storage.rs +0 -0
  426. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
  427. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/tests.rs +0 -0
  428. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/cache/types.rs +0 -0
  429. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/constants.rs +0 -0
  430. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/helpers/core_rule_bindings.rs +0 -0
  431. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/helpers/execution_planning.rs +0 -0
  432. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/helpers/memory_bindings.rs +0 -0
  433. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/helpers/memory_conversion.rs +0 -0
  434. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/helpers/memory_registration.rs +0 -0
  435. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/helpers/mod.rs +0 -0
  436. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/main/mod.rs +0 -0
  437. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
  438. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/extension/mod.rs +0 -0
  439. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/lib.rs +0 -0
  440. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/constants.rs +0 -0
  441. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/annotations/annotations.rs +0 -0
  442. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/hygiene/hygiene.rs +0 -0
  443. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/layers/layers.rs +0 -0
  444. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/layers/local.rs +0 -0
  445. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/layers/project.rs +0 -0
  446. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/mod.rs +0 -0
  447. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/naming/naming.rs +0 -0
  448. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/naming_globs/naming_globs.rs +0 -0
  449. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/project_queries/project_queries.rs +0 -0
  450. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/roles/declarations.rs +0 -0
  451. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/roles/paths.rs +0 -0
  452. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/roles/project_layout.rs +0 -0
  453. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/roles/project_layout_paths.rs +0 -0
  454. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/roles/project_layout_queries.rs +0 -0
  455. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/roles/roles.rs +0 -0
  456. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/roles/surfaces.rs +0 -0
  457. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/shape/shape.rs +0 -0
  458. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/tests/layout.rs +0 -0
  459. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/tests/names.rs +0 -0
  460. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/helpers/tests/tests.rs +0 -0
  461. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +0 -0
  462. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/main/mod.rs +0 -0
  463. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
  464. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/mod.rs +0 -0
  465. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/src/rules/models.rs +0 -0
  466. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/tests/extension/memory_conversion.rs +0 -0
  467. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/tests/extension/test_types.rs +0 -0
  468. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/tests/rules/contracts.rs +0 -0
  469. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
  470. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/tests/rules/helpers.rs +0 -0
  471. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/crates/fensu-native/tests/rules/test_types.rs +0 -0
  472. {fensu_cli-0.4.0 → fensu_cli-0.4.1}/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.4.1"
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.4.1
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.4.1" # 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
+ }
@@ -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,
@@ -47,7 +47,7 @@ pub(crate) fn generate(context: &SkillContext) -> Result<String, String> {
47
47
  String::new(),
48
48
  "- Run `fensu check` after architecture-relevant changes.".to_owned(),
49
49
  "- Run `fensu rule <CODE>` to inspect a diagnostic and its remediation.".to_owned(),
50
- "- Run `fensu map <SYMBOL>` for a conservative downstream project call tree.".to_owned(),
50
+ "- Run `fensu map <SYMBOL>` for proven callees, or add `--direction upstream` for proven callers.".to_owned(),
51
51
  "- Run `fensu skills` after changing rule selection or custom rules.".to_owned(),
52
52
  String::new(),
53
53
  ];
@@ -1,6 +1,9 @@
1
1
  use std::fs;
2
2
 
3
- use crate::helpers::{basic_project, method_project, run, run_colored, text, write, write_bytes};
3
+ use crate::helpers::{
4
+ ambiguous_protocol_project, basic_project, method_project, run, run_colored,
5
+ sibling_method_project, text, write, write_bytes,
6
+ };
4
7
 
5
8
  #[test]
6
9
  fn given_native_map_when_python_is_missing_then_direct_calls_cycles_and_depth_are_deterministic() {
@@ -15,16 +18,163 @@ fn given_native_map_when_python_is_missing_then_direct_calls_cycles_and_depth_ar
15
18
  repository.path(),
16
19
  &["pkg.entry.run", "--depth", "3", "--no-cache"],
17
20
  );
21
+ let explicit = run(
22
+ repository.path(),
23
+ &[
24
+ "pkg.entry.run",
25
+ "--direction",
26
+ "downstream",
27
+ "--depth",
28
+ "3",
29
+ "--no-cache",
30
+ ],
31
+ );
18
32
  let stdout = text(&first.stdout);
19
33
 
20
34
  assert_eq!(first.status.code(), Some(0), "{}", text(&first.stderr));
21
35
  assert_eq!(first.stdout, second.stdout);
36
+ assert_eq!(first.stdout, explicit.stdout);
22
37
  assert!(stdout.ends_with('\n'));
23
38
  assert!(stdout.contains("step(...) src/pkg/steps.py:3"));
24
39
  assert!(stdout.contains("callback(...) src/pkg/entry.py:5 (unresolved parameter call)"));
25
40
  assert!(stdout.contains("run(...) src/pkg/entry.py:3 (cycle)"));
26
41
  }
27
42
 
43
+ #[test]
44
+ fn given_upstream_direction_when_mapping_then_proven_callers_cycles_and_depth_are_deterministic() {
45
+ let repository = tempfile::tempdir().expect("temporary repository");
46
+ basic_project(repository.path());
47
+
48
+ let output = run(
49
+ repository.path(),
50
+ &[
51
+ "pkg.steps.step",
52
+ "--direction",
53
+ "upstream",
54
+ "--depth",
55
+ "3",
56
+ "--no-cache",
57
+ ],
58
+ );
59
+ let stdout = text(&output.stdout);
60
+
61
+ assert_eq!(output.status.code(), Some(0), "{}", text(&output.stderr));
62
+ assert_eq!(
63
+ stdout,
64
+ "step(...) src/pkg/steps.py:3\n└── run(...) src/pkg/entry.py:3\n └── finish(...) src/pkg/finish.py:3\n └── step(...) src/pkg/steps.py:3 (cycle)\n"
65
+ );
66
+ assert!(!stdout.contains("callback"));
67
+
68
+ let limited = run(
69
+ repository.path(),
70
+ &[
71
+ "pkg.steps.step",
72
+ "--direction",
73
+ "upstream",
74
+ "--depth",
75
+ "1",
76
+ "--no-cache",
77
+ ],
78
+ );
79
+ assert!(text(&limited.stdout).contains("run(...) src/pkg/entry.py:3 (depth limit)"));
80
+ }
81
+
82
+ #[test]
83
+ fn given_inherited_method_dispatch_when_mapping_upstream_then_concrete_callers_are_preserved() {
84
+ let repository = tempfile::tempdir().expect("temporary repository");
85
+ method_project(repository.path());
86
+
87
+ let output = run(
88
+ repository.path(),
89
+ &[
90
+ "methods.workers.Worker.hook",
91
+ "--direction",
92
+ "upstream",
93
+ "--depth",
94
+ "3",
95
+ "--no-cache",
96
+ ],
97
+ );
98
+ let stdout = text(&output.stdout);
99
+
100
+ assert_eq!(output.status.code(), Some(0), "{}", text(&output.stderr));
101
+ assert!(stdout.contains("Worker.hook(...)"));
102
+ assert!(stdout.contains("Worker.run(...)"));
103
+ assert!(stdout.contains("Worker.execute(...)"));
104
+ assert!(stdout.contains("run(...) src/methods/entry.py:4"));
105
+ assert!(!stdout.contains("dynamic.execute"));
106
+ }
107
+
108
+ #[test]
109
+ fn given_sibling_method_dispatch_when_mapping_upstream_then_callers_do_not_cross_subclasses() {
110
+ let repository = tempfile::tempdir().expect("temporary repository");
111
+ sibling_method_project(repository.path());
112
+
113
+ let output = run(
114
+ repository.path(),
115
+ &[
116
+ "siblings.workers.ChildA.hook",
117
+ "--direction",
118
+ "upstream",
119
+ "--depth",
120
+ "2",
121
+ "--no-cache",
122
+ ],
123
+ );
124
+ let stdout = text(&output.stdout);
125
+
126
+ assert_eq!(output.status.code(), Some(0), "{}", text(&output.stderr));
127
+ assert!(stdout.contains("ChildA.run(...)"));
128
+ assert!(stdout.contains("call_a(...)"));
129
+ assert!(!stdout.contains("ChildB.run(...)"));
130
+ assert!(!stdout.contains("call_b(...)"));
131
+ }
132
+
133
+ #[test]
134
+ fn given_unique_protocol_dispatch_when_mapping_upstream_then_proven_protocol_caller_is_included() {
135
+ let repository = tempfile::tempdir().expect("temporary repository");
136
+ method_project(repository.path());
137
+
138
+ let output = run(
139
+ repository.path(),
140
+ &[
141
+ "methods.workers.Worker.execute",
142
+ "--direction",
143
+ "upstream",
144
+ "--depth",
145
+ "1",
146
+ "--no-cache",
147
+ ],
148
+ );
149
+
150
+ assert_eq!(output.status.code(), Some(0), "{}", text(&output.stderr));
151
+ assert!(text(&output.stdout).contains("run_protocol(...)"));
152
+ }
153
+
154
+ #[test]
155
+ fn given_ambiguous_protocol_dispatch_when_mapping_upstream_then_caller_is_not_invented() {
156
+ let repository = tempfile::tempdir().expect("temporary repository");
157
+ ambiguous_protocol_project(repository.path());
158
+
159
+ let output = run(
160
+ repository.path(),
161
+ &[
162
+ "protocols.workers.First.execute",
163
+ "--direction",
164
+ "upstream",
165
+ "--depth",
166
+ "2",
167
+ "--no-cache",
168
+ ],
169
+ );
170
+
171
+ assert_eq!(output.status.code(), Some(0), "{}", text(&output.stderr));
172
+ assert_eq!(
173
+ text(&output.stdout),
174
+ "First.execute(...) src/protocols/workers.py:4\n"
175
+ );
176
+ }
177
+
28
178
  #[test]
29
179
  fn given_selector_forms_when_mapping_then_full_partial_path_and_ambiguity_match_contract() {
30
180
  let repository = tempfile::tempdir().expect("temporary repository");
@@ -239,10 +389,11 @@ fn given_map_help_and_invalid_arguments_when_parsing_then_argparse_surface_is_pr
239
389
  let help = run(repository.path(), &["--help"]);
240
390
  assert_eq!(help.status.code(), Some(0));
241
391
  assert!(text(&help.stdout).contains("--cache | --no-cache"));
392
+ assert!(text(&help.stdout).contains("--direction {downstream,upstream}"));
242
393
  for arguments in [
243
394
  vec![],
244
395
  vec!["run", "--depth", "-1"],
245
- vec!["run", "--direction", "upstream"],
396
+ vec!["run", "--direction", "sideways"],
246
397
  vec!["run", "--cache", "--no-cache"],
247
398
  ] {
248
399
  let output = run(repository.path(), &arguments);
@@ -66,7 +66,35 @@ pub(crate) fn method_project(root: &Path) {
66
66
  );
67
67
  write(
68
68
  root.join("src/methods/entry.py"),
69
- "from methods.contracts import Runner\nfrom methods.workers import Worker, make\n\ndef run(runner: Runner, dynamic) -> None:\n worker = Worker()\n worker.execute()\n make().execute()\n runner.execute()\n dynamic.execute()\n",
69
+ "from methods.contracts import Runner\nfrom methods.workers import Worker, make\n\ndef run(runner: Runner, dynamic) -> None:\n worker = Worker()\n worker.execute()\n make().execute()\n runner.execute()\n dynamic.execute()\n\ndef run_protocol(runner: Runner) -> None:\n runner.execute()\n",
70
+ );
71
+ }
72
+
73
+ pub(crate) fn sibling_method_project(root: &Path) {
74
+ write(root.join("fensu.toml"), "roots = [\"src/siblings\"]\n");
75
+ write(
76
+ root.join("src/siblings/workers.py"),
77
+ "class Base:\n def run(self) -> None:\n self.hook()\n\nclass ChildA(Base):\n def hook(self) -> None:\n return None\n\nclass ChildB(Base):\n def hook(self) -> None:\n return None\n",
78
+ );
79
+ write(
80
+ root.join("src/siblings/entry.py"),
81
+ "from siblings.workers import ChildA, ChildB\n\ndef call_a() -> None:\n ChildA().run()\n\ndef call_b() -> None:\n ChildB().run()\n",
82
+ );
83
+ }
84
+
85
+ pub(crate) fn ambiguous_protocol_project(root: &Path) {
86
+ write(root.join("fensu.toml"), "roots = [\"src/protocols\"]\n");
87
+ write(
88
+ root.join("src/protocols/contracts.py"),
89
+ "from typing import Protocol\n\nclass Runner(Protocol):\n def execute(self) -> None:\n ...\n",
90
+ );
91
+ write(
92
+ root.join("src/protocols/workers.py"),
93
+ "from protocols.contracts import Runner\n\nclass First(Runner):\n def execute(self) -> None:\n return None\n\nclass Second(Runner):\n def execute(self) -> None:\n return None\n",
94
+ );
95
+ write(
96
+ root.join("src/protocols/entry.py"),
97
+ "from protocols.contracts import Runner\n\ndef run(runner: Runner) -> None:\n runner.execute()\n",
70
98
  );
71
99
  }
72
100
 
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "fensu-cli"
7
- version = "0.4.0" # x-release-please-version
7
+ version = "0.4.1" # x-release-please-version
8
8
  description = "Native command-line executable for fensu"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"