fensu-cli 0.4.1__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.
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/Cargo.lock +1 -1
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/PKG-INFO +1 -1
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/Cargo.toml +1 -1
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/loading.rs +3 -1
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/parsing.rs +5 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/validation.rs +15 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_evaluation.rs +21 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_policy.rs +1 -1
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/rule.rs +75 -2
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/models.rs +34 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/fingerprint.rs +3 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/mod.rs +1 -0
- fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/content/option_rendering.rs +83 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/rendering.rs +2 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/mod.rs +1 -0
- fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/context/option_validation.rs +123 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/selection.rs +12 -5
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_policy.rs +95 -3
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/test_types.rs +9 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.inc +63 -10
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/core_rule_bindings.rs +2 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/constants.rs +1 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +26 -1
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/models.rs +9 -1
- fensu_cli-0.5.0/crates/fensu-native/tests/rules/contracts.rs +82 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/helpers.rs +1 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/test_types.rs +9 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/pyproject.toml +1 -1
- fensu_cli-0.4.1/crates/fensu-native/tests/rules/contracts.rs +0 -21
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/Cargo.toml +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/README.md +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/assets/catalogue.json +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/assets/python.gitignore +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/assets/skills_invariant.json +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/build.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/map_parsing.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_execution.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_graph_rendering.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_help.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_human_rendering.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_parsing.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_structured_rendering.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_values.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/check.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/help.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/init.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/map.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/memory.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/rule.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/run_cli.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/skills.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/discovery.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/exceptions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/cache.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_cleanup.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_execution.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_project.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/init.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/process.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/render.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/lib.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/main.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/cache.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/decoding.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/execution.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/identity.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/project.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/render.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree_policy.inc +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/execution.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/discovery.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/sections.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/build.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/exceptions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/identity.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/options.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/filesystem.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/freshness.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/install.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/plan.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/publication.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/transaction.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_cleanup.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/commands.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/Cargo.toml +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/annotations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/contracts.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/declarations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/functions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/harness.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/hygiene.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mapping.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/references.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/rule_authoring.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/state.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/bindings.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/model_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/repository_bindings.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/rule_authoring_bindings.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/visitor.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/category.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/display.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/returns.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/rows.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/conditionals.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/rows.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/calls.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/dimensions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/functions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/imports.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/checks.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/functions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/lookups.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mutations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/names.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/calls.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/events.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/test_shape.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/literals.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mutations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/ownership.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/references.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/breadth.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/children.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/expression_children.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/nodes.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/spans.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/statement_children.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/resolution.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/scopes.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/text.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/classes.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/expressions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/extraction.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/functions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/imports.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_declarations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_facts.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/lib.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/failures.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/line_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/matching.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/observation_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_observation_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_paths.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/enumerate.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/mapping.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/rule_authoring.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/strict.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/locate.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/hashing.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/observations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/walk.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/Cargo.toml +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/loading.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/errors.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/archive.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/database.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/documents.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/lists.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/references.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/sections.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/skills.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/streaming.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/values.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graph_loading.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graphs.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/overviews.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/queries.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/query_values.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/diagnostics.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_core.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_markdown.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_metadata.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_skill_view.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_views.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/summaries.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/synchronization.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/cycles.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/dependencies.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/document_targets.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/heading_targets.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/link_resolution.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/lib.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/assembly.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/blocks.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/headings.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/line_index.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/links.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/lists.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/obsidian.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/text.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/bootstrap.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/collisions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/discovery.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/documents.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/filesystem.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/git_tracking.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/skills.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/tree.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/validation.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/loading.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/archive.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/bootstrap.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/check.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/dependencies.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/graph_query.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/list_batches.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/overview.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/performance.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/query.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/schema.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/summary.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/sync.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/dependencies.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/resolution.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/code_blocks.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/links.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/lists.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/structure.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/collisions.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/discovery.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/git_worktrees.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/symlinks.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/Cargo.toml +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/bindings.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/database.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/generation.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication_merge.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/records.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/replay.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema_values.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/storage.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/models.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/records.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/storage.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/constants.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/execution_planning.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_bindings.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_conversion.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_registration.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/lib.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/annotations/annotations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/hygiene/hygiene.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/layers.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/local.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/project.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming/naming.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming_globs/naming_globs.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/project_queries/project_queries.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/declarations.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/paths.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_paths.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_queries.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/roles.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/surfaces.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/shape/shape.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/layout.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/names.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/tests.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/mod.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/memory_conversion.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/test_types.rs +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
- {fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules.rs +0 -0
|
@@ -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()
|
|
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)
|
{fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/validation.rs
RENAMED
|
@@ -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-
|
|
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()
|
|
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"
|
|
@@ -57,6 +57,39 @@ pub(crate) struct RuleMetadata {
|
|
|
57
57
|
pub(crate) source: Option<String>,
|
|
58
58
|
#[serde(default = "crate::helpers::rule::cacheable_default")]
|
|
59
59
|
pub(crate) cacheable: bool,
|
|
60
|
+
#[serde(default)]
|
|
61
|
+
pub(crate) options: Vec<RuleOptionMetadata>,
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
65
|
+
#[serde(deny_unknown_fields)]
|
|
66
|
+
pub(crate) struct RuleOptionMetadata {
|
|
67
|
+
pub(crate) name: String,
|
|
68
|
+
pub(crate) kind: String,
|
|
69
|
+
pub(crate) required: bool,
|
|
70
|
+
pub(crate) default: Option<RuleOptionValue>,
|
|
71
|
+
pub(crate) current_value: RuleOptionValue,
|
|
72
|
+
pub(crate) description: Option<String>,
|
|
73
|
+
pub(crate) choices: Option<Vec<String>>,
|
|
74
|
+
pub(crate) minimum: Option<i64>,
|
|
75
|
+
pub(crate) maximum: Option<i64>,
|
|
76
|
+
pub(crate) minimum_items: Option<usize>,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
80
|
+
#[serde(untagged)]
|
|
81
|
+
pub(crate) enum RuleOptionValue {
|
|
82
|
+
Boolean(bool),
|
|
83
|
+
Integer(i64),
|
|
84
|
+
String(String),
|
|
85
|
+
List(Vec<RuleOptionListValue>),
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
89
|
+
#[serde(untagged)]
|
|
90
|
+
pub(crate) enum RuleOptionListValue {
|
|
91
|
+
Integer(i64),
|
|
92
|
+
String(String),
|
|
60
93
|
}
|
|
61
94
|
|
|
62
95
|
#[derive(Clone, Debug, Default)]
|
|
@@ -69,6 +102,7 @@ pub(crate) struct Config {
|
|
|
69
102
|
pub(crate) ignore: Vec<String>,
|
|
70
103
|
pub(crate) rule_paths: Vec<String>,
|
|
71
104
|
pub(crate) rule_modules: Vec<String>,
|
|
105
|
+
pub(crate) rule_options: toml::map::Map<String, toml::Value>,
|
|
72
106
|
pub(crate) cache_enabled: bool,
|
|
73
107
|
pub(crate) cache_require_cacheable: bool,
|
|
74
108
|
pub(crate) evaluation_include: Vec<String>,
|
{fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/fingerprint.rs
RENAMED
|
@@ -274,6 +274,8 @@ fn rules_value(rules: &[RuleMetadata]) -> Value {
|
|
|
274
274
|
sorted
|
|
275
275
|
.into_iter()
|
|
276
276
|
.map(|rule| {
|
|
277
|
+
let mut options = rule.options.iter().collect::<Vec<_>>();
|
|
278
|
+
options.sort_by(|left, right| left.name.cmp(&right.name));
|
|
277
279
|
json!({
|
|
278
280
|
"code": rule.code,
|
|
279
281
|
"family": rule.family,
|
|
@@ -286,6 +288,7 @@ fn rules_value(rules: &[RuleMetadata]) -> Value {
|
|
|
286
288
|
"enabled_by_default": rule.enabled_by_default,
|
|
287
289
|
"cacheable": rule.cacheable,
|
|
288
290
|
"execution_owner": rule.execution_owner,
|
|
291
|
+
"options": options,
|
|
289
292
|
})
|
|
290
293
|
})
|
|
291
294
|
.collect(),
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
use serde_json::json;
|
|
2
|
+
|
|
3
|
+
use crate::models::{RuleMetadata, RuleOptionMetadata, RuleOptionValue};
|
|
4
|
+
use crate::skills::helpers::content::sections::py_json;
|
|
5
|
+
|
|
6
|
+
pub(crate) fn rule_option_lines(rule: &RuleMetadata) -> Vec<String> {
|
|
7
|
+
if rule.options.is_empty() {
|
|
8
|
+
return Vec::new();
|
|
9
|
+
}
|
|
10
|
+
let mut options = rule.options.iter().collect::<Vec<_>>();
|
|
11
|
+
options.sort_by(|left, right| left.name.cmp(&right.name));
|
|
12
|
+
let mut lines = vec!["Options:".to_owned(), String::new()];
|
|
13
|
+
for option in options {
|
|
14
|
+
lines.push(format!("#### `{}`", option.name));
|
|
15
|
+
lines.push(String::new());
|
|
16
|
+
lines.extend(skill_option_fields(option));
|
|
17
|
+
lines.push(String::new());
|
|
18
|
+
}
|
|
19
|
+
lines
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
fn skill_option_fields(option: &RuleOptionMetadata) -> Vec<String> {
|
|
23
|
+
vec![
|
|
24
|
+
format!("- Type: `{}`", skill_option_type(&option.kind)),
|
|
25
|
+
format!("- Required: `{}`", option.required),
|
|
26
|
+
format!(
|
|
27
|
+
"- Default: {}",
|
|
28
|
+
if option.required {
|
|
29
|
+
"required".to_owned()
|
|
30
|
+
} else {
|
|
31
|
+
skill_option_value(option.default.as_ref())
|
|
32
|
+
}
|
|
33
|
+
),
|
|
34
|
+
format!(
|
|
35
|
+
"- Current value: {}",
|
|
36
|
+
skill_option_value(Some(&option.current_value))
|
|
37
|
+
),
|
|
38
|
+
format!(
|
|
39
|
+
"- Description: {}",
|
|
40
|
+
option.description.as_deref().unwrap_or("None")
|
|
41
|
+
),
|
|
42
|
+
format!(
|
|
43
|
+
"- Choices: {}",
|
|
44
|
+
option.choices.as_ref().map_or_else(
|
|
45
|
+
|| "None".to_owned(),
|
|
46
|
+
|value| py_json(&json!(value)).unwrap_or_else(|_| "None".to_owned())
|
|
47
|
+
)
|
|
48
|
+
),
|
|
49
|
+
format!(
|
|
50
|
+
"- Minimum: {}",
|
|
51
|
+
option
|
|
52
|
+
.minimum
|
|
53
|
+
.map_or_else(|| "None".to_owned(), |value| value.to_string())
|
|
54
|
+
),
|
|
55
|
+
format!(
|
|
56
|
+
"- Maximum: {}",
|
|
57
|
+
option
|
|
58
|
+
.maximum
|
|
59
|
+
.map_or_else(|| "None".to_owned(), |value| value.to_string())
|
|
60
|
+
),
|
|
61
|
+
format!(
|
|
62
|
+
"- Minimum items: {}",
|
|
63
|
+
option
|
|
64
|
+
.minimum_items
|
|
65
|
+
.map_or_else(|| "None".to_owned(), |value| value.to_string())
|
|
66
|
+
),
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
fn skill_option_type(kind: &str) -> &str {
|
|
71
|
+
match kind {
|
|
72
|
+
"string_list" => "list[string]",
|
|
73
|
+
"integer_list" => "list[integer]",
|
|
74
|
+
other => other,
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
fn skill_option_value(value: Option<&RuleOptionValue>) -> String {
|
|
79
|
+
value.map_or_else(
|
|
80
|
+
|| "None".to_owned(),
|
|
81
|
+
|value| py_json(&json!(value)).unwrap_or_else(|_| "None".to_owned()),
|
|
82
|
+
)
|
|
83
|
+
}
|
{fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/rendering.rs
RENAMED
|
@@ -5,6 +5,7 @@ use std::sync::OnceLock;
|
|
|
5
5
|
use serde_json::{json, Value};
|
|
6
6
|
|
|
7
7
|
use crate::models::RuleMetadata;
|
|
8
|
+
use crate::skills::helpers::content::option_rendering::rule_option_lines;
|
|
8
9
|
use crate::skills::helpers::content::sections::{
|
|
9
10
|
display_project_path, effective_config_lines, expand_repository_profile, governed_path, py_json,
|
|
10
11
|
};
|
|
@@ -327,6 +328,7 @@ fn tier_lines(heading: &str, rules: &[RuleMetadata]) -> Vec<String> {
|
|
|
327
328
|
),
|
|
328
329
|
String::new(),
|
|
329
330
|
]);
|
|
331
|
+
lines.extend(rule_option_lines(rule));
|
|
330
332
|
}
|
|
331
333
|
lines
|
|
332
334
|
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
use std::collections::HashSet;
|
|
2
|
+
|
|
3
|
+
use crate::models::{RuleMetadata, RuleOptionListValue, RuleOptionMetadata, RuleOptionValue};
|
|
4
|
+
|
|
5
|
+
const INTEGER_KIND: &str = "integer";
|
|
6
|
+
const INTEGER_LIST_KIND: &str = "integer_list";
|
|
7
|
+
const STRING_KIND: &str = "string";
|
|
8
|
+
const STRING_LIST_KIND: &str = "string_list";
|
|
9
|
+
|
|
10
|
+
pub(crate) fn validate_rule_options(rule: &RuleMetadata) -> Result<(), String> {
|
|
11
|
+
let mut names = HashSet::new();
|
|
12
|
+
for option in &rule.options {
|
|
13
|
+
if !valid_option_name(&option.name)
|
|
14
|
+
|| !names.insert(option.name.as_str())
|
|
15
|
+
|| option.required == option.default.is_some()
|
|
16
|
+
|| !option_value_matches_kind(&option.current_value, &option.kind)
|
|
17
|
+
|| option
|
|
18
|
+
.default
|
|
19
|
+
.as_ref()
|
|
20
|
+
.is_some_and(|value| !option_value_matches_kind(value, &option.kind))
|
|
21
|
+
|| option
|
|
22
|
+
.description
|
|
23
|
+
.as_deref()
|
|
24
|
+
.is_some_and(|description| description.trim().is_empty())
|
|
25
|
+
|| !valid_option_constraints(option)
|
|
26
|
+
{
|
|
27
|
+
return Err(format!(
|
|
28
|
+
"Catalogue rule {} option {} contains incompatible metadata.",
|
|
29
|
+
rule.code, option.name
|
|
30
|
+
));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
Ok(())
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fn valid_option_name(name: &str) -> bool {
|
|
37
|
+
!name.is_empty()
|
|
38
|
+
&& name.split('_').all(|part| {
|
|
39
|
+
!part.is_empty()
|
|
40
|
+
&& part.as_bytes()[0].is_ascii_lowercase()
|
|
41
|
+
&& part
|
|
42
|
+
.as_bytes()
|
|
43
|
+
.iter()
|
|
44
|
+
.all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit())
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
fn option_value_matches_kind(value: &RuleOptionValue, kind: &str) -> bool {
|
|
49
|
+
match (kind, value) {
|
|
50
|
+
("boolean", RuleOptionValue::Boolean(_))
|
|
51
|
+
| (INTEGER_KIND, RuleOptionValue::Integer(_))
|
|
52
|
+
| (STRING_KIND, RuleOptionValue::String(_)) => true,
|
|
53
|
+
(STRING_LIST_KIND, RuleOptionValue::List(values)) => values
|
|
54
|
+
.iter()
|
|
55
|
+
.all(|value| matches!(value, RuleOptionListValue::String(_))),
|
|
56
|
+
(INTEGER_LIST_KIND, RuleOptionValue::List(values)) => values
|
|
57
|
+
.iter()
|
|
58
|
+
.all(|value| matches!(value, RuleOptionListValue::Integer(_))),
|
|
59
|
+
_ => false,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
fn valid_option_constraints(option: &RuleOptionMetadata) -> bool {
|
|
64
|
+
let choices_valid = match (&option.kind[..], &option.choices) {
|
|
65
|
+
(STRING_KIND, Some(choices)) => {
|
|
66
|
+
!choices.is_empty()
|
|
67
|
+
&& choices.iter().collect::<HashSet<_>>().len() == choices.len()
|
|
68
|
+
&& option_values_in_choices(option, choices)
|
|
69
|
+
}
|
|
70
|
+
(STRING_KIND, None) => true,
|
|
71
|
+
(_, None) => true,
|
|
72
|
+
(_, Some(_)) => false,
|
|
73
|
+
};
|
|
74
|
+
let integer_bounds_valid = if option.kind == INTEGER_KIND {
|
|
75
|
+
option
|
|
76
|
+
.minimum
|
|
77
|
+
.zip(option.maximum)
|
|
78
|
+
.is_none_or(|(min, max)| min <= max)
|
|
79
|
+
&& option_values_in_bounds(option)
|
|
80
|
+
} else {
|
|
81
|
+
option.minimum.is_none() && option.maximum.is_none()
|
|
82
|
+
};
|
|
83
|
+
let minimum_items_valid =
|
|
84
|
+
if matches!(option.kind.as_str(), STRING_LIST_KIND | INTEGER_LIST_KIND) {
|
|
85
|
+
option
|
|
86
|
+
.minimum_items
|
|
87
|
+
.is_none_or(|minimum| option_values_have_minimum_items(option, minimum))
|
|
88
|
+
} else {
|
|
89
|
+
option.minimum_items.is_none()
|
|
90
|
+
};
|
|
91
|
+
choices_valid && integer_bounds_valid && minimum_items_valid
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
fn option_values_in_choices(option: &RuleOptionMetadata, choices: &[String]) -> bool {
|
|
95
|
+
[
|
|
96
|
+
&option.current_value,
|
|
97
|
+
option.default.as_ref().unwrap_or(&option.current_value),
|
|
98
|
+
]
|
|
99
|
+
.into_iter()
|
|
100
|
+
.all(|value| matches!(value, RuleOptionValue::String(value) if choices.contains(value)))
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
fn option_values_in_bounds(option: &RuleOptionMetadata) -> bool {
|
|
104
|
+
[
|
|
105
|
+
&option.current_value,
|
|
106
|
+
option.default.as_ref().unwrap_or(&option.current_value),
|
|
107
|
+
]
|
|
108
|
+
.into_iter()
|
|
109
|
+
.all(|value| {
|
|
110
|
+
matches!(value, RuleOptionValue::Integer(value)
|
|
111
|
+
if option.minimum.is_none_or(|minimum| *value >= minimum)
|
|
112
|
+
&& option.maximum.is_none_or(|maximum| *value <= maximum))
|
|
113
|
+
})
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
fn option_values_have_minimum_items(option: &RuleOptionMetadata, minimum: usize) -> bool {
|
|
117
|
+
[
|
|
118
|
+
&option.current_value,
|
|
119
|
+
option.default.as_ref().unwrap_or(&option.current_value),
|
|
120
|
+
]
|
|
121
|
+
.into_iter()
|
|
122
|
+
.all(|value| matches!(value, RuleOptionValue::List(values) if values.len() >= minimum))
|
|
123
|
+
}
|
{fensu_cli-0.4.1 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/selection.rs
RENAMED
|
@@ -5,6 +5,7 @@ use serde_json::json;
|
|
|
5
5
|
|
|
6
6
|
use crate::helpers::{process, rule};
|
|
7
7
|
use crate::models::{Config, RuleMetadata};
|
|
8
|
+
use crate::skills::helpers::context::option_validation::validate_rule_options;
|
|
8
9
|
use crate::skills::models::{HostResponse, RuleSelection};
|
|
9
10
|
|
|
10
11
|
const CORE_KIND: &str = "core";
|
|
@@ -13,6 +14,7 @@ const CORE_RULE_CODE_LENGTH: usize = 6;
|
|
|
13
14
|
const CUSTOM_KIND: &str = "custom";
|
|
14
15
|
const CUSTOM_PREFIX: char = 'X';
|
|
15
16
|
const MAX_CORE_SELECTOR_SUFFIX: usize = 4;
|
|
17
|
+
const METADATA_PROTOCOL: u32 = 2;
|
|
16
18
|
|
|
17
19
|
pub(crate) fn validate_config_policy(config: &Config) -> Result<(), String> {
|
|
18
20
|
for (name, selectors) in [
|
|
@@ -32,7 +34,10 @@ pub(crate) fn validate_config_policy(config: &Config) -> Result<(), String> {
|
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
pub(crate) fn selection(config: &Config, project_root: &Path) -> Result<RuleSelection, String> {
|
|
35
|
-
if !config.rule_paths.is_empty()
|
|
37
|
+
if !config.rule_paths.is_empty()
|
|
38
|
+
|| !config.rule_modules.is_empty()
|
|
39
|
+
|| !config.rule_options.is_empty()
|
|
40
|
+
{
|
|
36
41
|
return hosted_selection(project_root);
|
|
37
42
|
}
|
|
38
43
|
let catalogue = rule::catalogue().to_vec();
|
|
@@ -57,7 +62,7 @@ pub(crate) fn selection(config: &Config, project_root: &Path) -> Result<RuleSele
|
|
|
57
62
|
|
|
58
63
|
fn hosted_selection(project_root: &Path) -> Result<RuleSelection, String> {
|
|
59
64
|
let request = serde_json::to_vec(&json!({
|
|
60
|
-
"protocol":
|
|
65
|
+
"protocol": METADATA_PROTOCOL,
|
|
61
66
|
"project_root": project_root.to_string_lossy(),
|
|
62
67
|
}))
|
|
63
68
|
.map_err(|error| error.to_string())?;
|
|
@@ -65,10 +70,10 @@ fn hosted_selection(project_root: &Path) -> Result<RuleSelection, String> {
|
|
|
65
70
|
validate_host_shape(&raw)?;
|
|
66
71
|
let response: HostResponse = serde_json::from_slice(&raw)
|
|
67
72
|
.map_err(|error| format!("Invalid custom-rule metadata host response: {error}"))?;
|
|
68
|
-
if response.protocol !=
|
|
73
|
+
if response.protocol != METADATA_PROTOCOL {
|
|
69
74
|
return Err(format!(
|
|
70
|
-
"Incompatible custom-rule metadata protocol {}; expected
|
|
71
|
-
response.protocol
|
|
75
|
+
"Incompatible custom-rule metadata protocol {}; expected {}.",
|
|
76
|
+
response.protocol, METADATA_PROTOCOL
|
|
72
77
|
));
|
|
73
78
|
}
|
|
74
79
|
if response.package_version != env!("CARGO_PKG_VERSION") {
|
|
@@ -115,6 +120,7 @@ fn validate_host_shape(raw: &[u8]) -> Result<(), String> {
|
|
|
115
120
|
"kind",
|
|
116
121
|
"source",
|
|
117
122
|
"cacheable",
|
|
123
|
+
"options",
|
|
118
124
|
]);
|
|
119
125
|
for rule in catalogue {
|
|
120
126
|
let fields = rule
|
|
@@ -174,6 +180,7 @@ fn validate_host_catalogue(catalogue: &[RuleMetadata]) -> Result<(), String> {
|
|
|
174
180
|
item.code
|
|
175
181
|
));
|
|
176
182
|
}
|
|
183
|
+
validate_rule_options(item)?;
|
|
177
184
|
}
|
|
178
185
|
Ok(())
|
|
179
186
|
}
|