fensu-cli 0.9.2__tar.gz → 0.9.4__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.9.2 → fensu_cli-0.9.4}/Cargo.lock +1 -1
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/PKG-INFO +1 -1
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/Cargo.toml +1 -1
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/mod.rs +1 -0
- fensu_cli-0.9.4/crates/fensu-cli/src/catalogue/main/validate_config_selectors.rs +37 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/evaluation.rs +32 -121
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/rule_policy.rs +3 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/constants.rs +0 -2
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/selection.rs +4 -1
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_policy.rs +41 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_validation.rs +24 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/commands.inc +33 -3
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/test_types.rs +6 -0
- fensu_cli-0.9.4/crates/fensu-native/src/extension/_helpers/evaluation/execution_planning.rs +113 -0
- fensu_cli-0.9.4/crates/fensu-native/src/extension/constants.rs +3 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/assets.rs +60 -13
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/autoload.rs +5 -5
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/boundaries.rs +4 -2
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/dagster.rs +63 -6
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/definitions.rs +40 -7
- fensu_cli-0.9.4/crates/fensu-native/src/rules/_helpers/execution_planning/execution_planning.rs +159 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/mod.rs +2 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/mod.rs +1 -0
- fensu_cli-0.9.4/crates/fensu-native/src/rules/main/plan_execution_owners.rs +11 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/models.rs +32 -0
- fensu_cli-0.9.4/crates/fensu-native/tests/rules/test_contracts.rs +214 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/test_types.rs +14 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/pyproject.toml +1 -1
- fensu_cli-0.9.2/crates/fensu-native/src/extension/_helpers/evaluation/execution_planning.rs +0 -195
- fensu_cli-0.9.2/crates/fensu-native/src/extension/constants.rs +0 -8
- fensu_cli-0.9.2/crates/fensu-native/tests/rules/test_contracts.rs +0 -102
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/Cargo.toml +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/README.md +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/assets/catalogue.json +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/assets/python.gitignore +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/assets/skills_invariant.json +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/build.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/arguments.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/loading.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/options.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/policy.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/_helpers/rendering.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/rule_catalogue.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/rule_metadata.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/main/rule_output.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/catalogue/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/cache.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/cleanup.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/exceptions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/execution.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/options.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/policy.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/preparation.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/_helpers/project.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/clean_caches.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/execute_check.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/prepare_cleanup.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/python_version.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/main/required_thresholds.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/check/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/map/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/map/parsing.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/execution.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/graph_rendering.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/help.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/human_rendering.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/parsing.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/structured_rendering.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/memory/values.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/check.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/execute_cli.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/help.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/init.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/map.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/memory.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/rule.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/run_cli.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/main/skills.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/command/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/discovery.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/exception_targets.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/exceptions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/loading.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/native_rules.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/parsing.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/roots.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/scopes.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/selectors.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/_helpers/validation.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/is_rule_code.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/is_rule_selector.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/validate_document.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/main/validate_exception_targets.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/configuration/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/authoring.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/interpreter.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/metadata_exchange.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/main/run_custom_check_host.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/main/run_skills_metadata_host.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/hosting/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/arguments.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/discovery.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/layout.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/packages.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/reporting.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/validation.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/_helpers/writing.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/main/run_init.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/init/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/lib.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/main.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/cache.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/decoding.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/execution.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/identity.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/project.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/render.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/tree.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/_helpers/tree_policy.inc +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/mapping/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/_helpers/faults.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/_helpers/text.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/main/report.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/reporting/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/command/execution.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/command/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/discovery.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/fingerprint.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/option_rendering.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/rendering.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/rule_rendering.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/content/sections.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/build.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/exceptions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/identity.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/option_validation.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/options.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/filesystem.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/freshness.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/install.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/plan.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/publication.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/installation/transaction.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_policy.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_render.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_rule_catalogue.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/tests.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_cleanup.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_check_exceptions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_commands.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_rule.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/command.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/test_commands.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/mapping.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills/test_commands.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/tests/skills.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/Cargo.toml +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/annotations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/contracts.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/declarations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/functions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/harness.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/hygiene.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/mapping.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/references.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/rule_authoring.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/conversion/state.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/bindings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/model_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/repository_bindings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/gateway/rule_authoring_bindings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/_helpers/queries/owner_symbols.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/extension/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/annotations/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/annotations/visitor.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/category.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/display.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/returns.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/contracts/rows.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/control/conditionals.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/control/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/declarations/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/declarations/rows.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/calls.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/dimensions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/functions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/imports.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/harness/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/hygiene/checks.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/hygiene/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/functions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/lookups.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/metrics/mutations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/naming/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/naming/names.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/project/calls.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/project/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/references/events.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/references/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/references/test_shape.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/literals.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mutations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/ownership.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/rule_authoring/references.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/state/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/state/resolution.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/state/scopes.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/wording/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/_helpers/wording/text.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/facts/types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/lib.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/classes.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/expressions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/extraction.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/functions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/imports.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/main/extract_mapping_declarations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/main/extract_mapping_facts.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/mapping/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/_helpers/failures.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/parsing/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/_helpers/line_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/positions/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/matching.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/observation_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/repository_observation_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/_helpers/repository_paths.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/snapshot/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/breadth.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/children.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/expression_children.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/nodes.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/references.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/spans.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/_helpers/statement_children.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/breadth_first_from.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/breadth_first_nodes.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/breadth_first_with_parents.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/children.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/kind_name.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/push_clause_orelse.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/span.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/start_of.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/main/strict_reference_parts.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/src/syntax/types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_enumerate.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_mapping.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_rule_authoring.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/facts.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/parsing/test_strict.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/parsing.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/positions/test_locate.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/positions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_hashing.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_observations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot/test_walk.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-facts/tests/snapshot.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/Cargo.toml +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/_helpers/loading.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/corpus/types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/archival/archive.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/archival/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/database.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/documents.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/lists.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/references.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/sections.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/skills.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/streaming.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/publication/values.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/graph_loading.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/graphs.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/overviews.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/queries.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/querying/query_values.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/diagnostics.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_core.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_markdown.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_metadata.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_skill_view.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/schema_views.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/summaries.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/_helpers/reporting/synchronization.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/errors.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/engine/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/cycles.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/dependencies.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/document_targets.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/heading_targets.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/link_resolution.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/graph/types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/lib.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/assembly.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/blocks.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/headings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/line_index.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/links.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/lists.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/obsidian.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/_helpers/text.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/markdown/types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/bootstrap.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/collisions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/discovery.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/documents.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/filesystem.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/git_tracking.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/skills.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/tree.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/_helpers/validation.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/src/source/types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus/test_loading.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/corpus.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/list_batch/test_list_batches.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_archive.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_bootstrap.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_check.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_dependencies.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_graph_query.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_overview.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_performance.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_query.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_schema.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_streaming.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_summary.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_sync.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/engine.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/test_dependencies.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/test_resolution.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/graph.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_code_blocks.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_links.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_lists.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_structure.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/markdown.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_collisions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_discovery.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_git_worktrees.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_symlinks.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-memory/tests/source.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/Cargo.toml +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/bindings/bindings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/bindings/generation_bindings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/generation/generation.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/generation/replay.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/persistence/database.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/persistence/storage.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/publication/publication.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/publication/publication_merge.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/records/records.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/records/schema.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/_helpers/records/schema_values.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/models.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/test_records.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/test_storage.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/tests.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/cache/types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/evaluation/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/evaluation/rule_bindings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/bindings.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/conversion.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/memory/registration.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/_helpers/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/extension/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/lib.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/annotations/annotations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/source.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/hygiene/hygiene.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/layers/layers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/layers/local.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/layers/project.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/naming/naming.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/naming_globs/naming_globs.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/policy/generated_policy.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/project_queries/project_queries.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/declarations.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/paths.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/project_layout.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/project_layout_paths.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/project_layout_queries.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/roles.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/roles/surfaces.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/shape/shape.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/function_conventions.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/layout.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/names.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/tests/tests.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/constants.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/generated_policy_owners.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/mod.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/extension/test_memory_conversion.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/extension/test_types.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/fixtures/README.md +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/fixtures/generated_rules.jsonl +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules/helpers.rs +0 -0
- {fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/tests/rules.rs +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//! Validate configured selectors against the activated rule catalogue.
|
|
2
|
+
|
|
3
|
+
use crate::catalogue::models::RuleMetadata;
|
|
4
|
+
use crate::models::Config;
|
|
5
|
+
|
|
6
|
+
pub(crate) fn validate_config_selectors(
|
|
7
|
+
config: &Config,
|
|
8
|
+
catalogue: &[&RuleMetadata],
|
|
9
|
+
) -> Result<(), String> {
|
|
10
|
+
for (name, selectors) in [
|
|
11
|
+
("select", &config.select),
|
|
12
|
+
("warn", &config.warn),
|
|
13
|
+
("ignore", &config.ignore),
|
|
14
|
+
] {
|
|
15
|
+
validate_selector_group(name, selectors, catalogue)?;
|
|
16
|
+
}
|
|
17
|
+
for entry in &config.rule_ignores {
|
|
18
|
+
validate_selector_group("rule_ignores.rules", &entry.rules, catalogue)?;
|
|
19
|
+
}
|
|
20
|
+
Ok(())
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
fn validate_selector_group(
|
|
24
|
+
name: &str,
|
|
25
|
+
selectors: &[String],
|
|
26
|
+
catalogue: &[&RuleMetadata],
|
|
27
|
+
) -> Result<(), String> {
|
|
28
|
+
for selector in selectors {
|
|
29
|
+
if catalogue.iter().any(|rule| rule.code.starts_with(selector)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
return Err(format!(
|
|
33
|
+
"Config key {name} contains selector {selector}, but it matches no rules in the configured catalogue. Activate the required rule pack, or correct or remove the selector."
|
|
34
|
+
));
|
|
35
|
+
}
|
|
36
|
+
Ok(())
|
|
37
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
use std::collections::{
|
|
1
|
+
use std::collections::{HashMap, HashSet};
|
|
2
2
|
use std::path::Path;
|
|
3
3
|
|
|
4
4
|
use fensu_facts::extension::models::ProgramHandle;
|
|
5
5
|
use fensu_native::rules::main::evaluate_core_rules::evaluate_core_rules;
|
|
6
6
|
use fensu_native::rules::main::plan_core_rule_queries::plan_core_rule_queries;
|
|
7
|
-
use fensu_native::rules::
|
|
7
|
+
use fensu_native::rules::main::plan_execution_owners::plan_execution_owners;
|
|
8
|
+
use fensu_native::rules::models::{NativeExecutionRule, NativeExecutionTarget, NativeRuleContext};
|
|
8
9
|
use rayon::iter::{IndexedParallelIterator, IntoParallelRefIterator, ParallelIterator};
|
|
9
10
|
|
|
10
11
|
use crate::catalogue::main::rule_metadata::rule_metadata;
|
|
@@ -20,9 +21,7 @@ use crate::check::_helpers::rule_policy::{
|
|
|
20
21
|
validate_unique_implementations,
|
|
21
22
|
};
|
|
22
23
|
use crate::check::models::EvaluationRequest;
|
|
23
|
-
use crate::constants::
|
|
24
|
-
OWNER_FILE, OWNER_PACKAGE, ROLE_HELPERS, ROLE_MAIN, SCOPE_TEST, SUFFIX_INIT,
|
|
25
|
-
};
|
|
24
|
+
use crate::constants::SCOPE_TEST;
|
|
26
25
|
use crate::models::{Config, Fault, ScopedSource, ThresholdUse};
|
|
27
26
|
use crate::reporting::main::report::report;
|
|
28
27
|
use crate::reporting::models::ReportRequest;
|
|
@@ -50,7 +49,7 @@ pub(crate) fn evaluate_and_render(request: EvaluationRequest<'_>) -> Result<(Str
|
|
|
50
49
|
.iter()
|
|
51
50
|
.map(|rule| rule.code.as_str())
|
|
52
51
|
.collect::<HashSet<_>>();
|
|
53
|
-
let codes_by_source = owner_plan(sources, &all_rules)
|
|
52
|
+
let codes_by_source = owner_plan(sources, &all_rules)?;
|
|
54
53
|
let project = project_plane(root, config, sources)?;
|
|
55
54
|
let program_by_path = sources
|
|
56
55
|
.iter()
|
|
@@ -241,120 +240,32 @@ fn package_name(source: &ScopedSource) -> String {
|
|
|
241
240
|
.unwrap_or_else(|| source.root_text.clone())
|
|
242
241
|
}
|
|
243
242
|
|
|
244
|
-
pub(crate) fn owner_plan(
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
if let Some(index) = indexes
|
|
266
|
-
.iter()
|
|
267
|
-
.min_by_key(|index| anchor_key(&sources[**index], &rule.execution_owner))
|
|
268
|
-
{
|
|
269
|
-
planned[*index].push(rule.code.clone());
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
planned
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
pub(crate) fn family_applies(family: &str, scope: &str) -> bool {
|
|
277
|
-
if scope == SCOPE_TEST {
|
|
278
|
-
matches!(family, "annotations" | "tests")
|
|
279
|
-
} else {
|
|
280
|
-
!matches!(family, "tests" | "custom")
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
pub(crate) fn owner_identity(source: &ScopedSource, owner: &str) -> Option<String> {
|
|
285
|
-
let domain = source
|
|
286
|
-
.relative_parts
|
|
287
|
-
.first()
|
|
288
|
-
.filter(|part| !part.ends_with(".py"));
|
|
289
|
-
let subdomain = source
|
|
290
|
-
.relative_parts
|
|
291
|
-
.get(1)
|
|
292
|
-
.filter(|part| !part.ends_with(".py") && !is_role_directory(part));
|
|
293
|
-
match owner {
|
|
294
|
-
"project" => Some("project".to_owned()),
|
|
295
|
-
"scope" => Some(format!("{}\0{}", source.scope, source.root_text)),
|
|
296
|
-
"package" => source
|
|
297
|
-
.path
|
|
298
|
-
.parent()
|
|
299
|
-
.map(|path| path.to_string_lossy().into_owned()),
|
|
300
|
-
"domain" => domain.map(|value| format!("{}\0{}\0{value}", source.scope, source.root_text)),
|
|
301
|
-
"subdomain" => subdomain.map(|value| {
|
|
302
|
-
format!(
|
|
303
|
-
"{}\0{}\0{}\0{value}",
|
|
304
|
-
source.scope,
|
|
305
|
-
source.root_text,
|
|
306
|
-
domain.map(String::as_str).unwrap_or_default()
|
|
307
|
-
)
|
|
308
|
-
}),
|
|
309
|
-
"leaf" => domain.map(|value| {
|
|
310
|
-
format!(
|
|
311
|
-
"{}\0{}\0{value}\0{}",
|
|
312
|
-
source.scope,
|
|
313
|
-
source.root_text,
|
|
314
|
-
subdomain.map(String::as_str).unwrap_or_default()
|
|
243
|
+
pub(crate) fn owner_plan(
|
|
244
|
+
sources: &[ScopedSource],
|
|
245
|
+
rules: &[&RuleMetadata],
|
|
246
|
+
) -> Result<Vec<Vec<String>>, String> {
|
|
247
|
+
let targets: Vec<NativeExecutionTarget> = sources
|
|
248
|
+
.iter()
|
|
249
|
+
.map(|source| NativeExecutionTarget {
|
|
250
|
+
repository_path: source.repository_path.clone(),
|
|
251
|
+
scope: source.scope.clone(),
|
|
252
|
+
root: source.root_text.clone(),
|
|
253
|
+
relative_parts: source.relative_parts.clone(),
|
|
254
|
+
direct: true,
|
|
255
|
+
})
|
|
256
|
+
.collect();
|
|
257
|
+
let native_rules: Vec<NativeExecutionRule> = rules
|
|
258
|
+
.iter()
|
|
259
|
+
.map(|rule| {
|
|
260
|
+
NativeExecutionRule::new(
|
|
261
|
+
rule.code.clone(),
|
|
262
|
+
rule.family.clone(),
|
|
263
|
+
rule.execution_owner.clone(),
|
|
315
264
|
)
|
|
316
|
-
})
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
let init = source
|
|
323
|
-
.relative_parts
|
|
324
|
-
.last()
|
|
325
|
-
.is_some_and(|part| part == SUFFIX_INIT);
|
|
326
|
-
let expected_depth = match owner {
|
|
327
|
-
"scope" => Some(1),
|
|
328
|
-
"domain" => Some(2),
|
|
329
|
-
"subdomain" => Some(3),
|
|
330
|
-
"leaf" => Some(
|
|
331
|
-
if source
|
|
332
|
-
.relative_parts
|
|
333
|
-
.get(1)
|
|
334
|
-
.is_some_and(|part| !part.ends_with(".py") && !is_role_directory(part))
|
|
335
|
-
{
|
|
336
|
-
3
|
|
337
|
-
} else {
|
|
338
|
-
2
|
|
339
|
-
},
|
|
340
|
-
),
|
|
341
|
-
_ => None,
|
|
342
|
-
};
|
|
343
|
-
let owner_init = if owner == OWNER_PACKAGE {
|
|
344
|
-
init
|
|
345
|
-
} else {
|
|
346
|
-
init && expected_depth == Some(source.relative_parts.len())
|
|
347
|
-
};
|
|
348
|
-
(
|
|
349
|
-
!owner_init,
|
|
350
|
-
source.relative_parts.len(),
|
|
351
|
-
source.repository_path.clone(),
|
|
352
|
-
)
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
fn is_role_directory(part: &str) -> bool {
|
|
356
|
-
matches!(
|
|
357
|
-
part,
|
|
358
|
-
ROLE_MAIN | ROLE_HELPERS | "classes" | "models" | "types" | "constants" | "exceptions"
|
|
359
|
-
)
|
|
265
|
+
})
|
|
266
|
+
.collect();
|
|
267
|
+
Ok(plan_execution_owners(&targets, &native_rules)?
|
|
268
|
+
.into_iter()
|
|
269
|
+
.map(|plan| plan.codes)
|
|
270
|
+
.collect())
|
|
360
271
|
}
|
|
@@ -3,6 +3,7 @@ use std::collections::{HashMap, HashSet};
|
|
|
3
3
|
|
|
4
4
|
use crate::catalogue::main::rule_catalogue::configured_rule_catalogue;
|
|
5
5
|
use crate::catalogue::main::rule_metadata::rule_metadata;
|
|
6
|
+
use crate::catalogue::main::validate_config_selectors::validate_config_selectors;
|
|
6
7
|
use crate::catalogue::models::RuleMetadata;
|
|
7
8
|
use crate::check::_helpers::policy::{path_matches, role};
|
|
8
9
|
use crate::models::{Config, ScopedSource, ThresholdUse};
|
|
@@ -47,6 +48,8 @@ pub(crate) fn selected_rules(
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
pub(crate) fn validate_config_tiers(config: &Config) -> Result<(), String> {
|
|
51
|
+
let catalogue = configured_rule_catalogue(&config.rule_packs)?;
|
|
52
|
+
validate_config_selectors(config, &catalogue)?;
|
|
50
53
|
let blocking = selected_rules(config, &config.select, &[])?;
|
|
51
54
|
let warnings = selected_rules(config, &config.warn, &[])?;
|
|
52
55
|
let warning_codes = warnings
|
|
@@ -3,8 +3,6 @@ pub(crate) const COLOR_AUTO: &str = "auto";
|
|
|
3
3
|
pub(crate) const COLOR_NEVER: &str = "never";
|
|
4
4
|
pub(crate) const GLOB_ALL: &str = "**";
|
|
5
5
|
pub(crate) const OPTION_COLOR: &str = "--color";
|
|
6
|
-
pub(crate) const OWNER_FILE: &str = "file";
|
|
7
|
-
pub(crate) const OWNER_PACKAGE: &str = "package";
|
|
8
6
|
pub(crate) const ROLE_HELPERS: &str = "_helpers";
|
|
9
7
|
pub(crate) const ROLE_MAIN: &str = "main";
|
|
10
8
|
pub(crate) const ROLE_RULES: &str = "rules";
|
{fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-cli/src/skills/_helpers/context/selection.rs
RENAMED
|
@@ -4,6 +4,7 @@ use std::path::Path;
|
|
|
4
4
|
use serde_json::json;
|
|
5
5
|
|
|
6
6
|
use crate::catalogue::main::rule_catalogue::configured_rule_catalogue;
|
|
7
|
+
use crate::catalogue::main::validate_config_selectors::validate_config_selectors;
|
|
7
8
|
use crate::catalogue::models::RuleMetadata;
|
|
8
9
|
use crate::configuration::constants::{
|
|
9
10
|
CONTRACT_BEHAVIORS, DEFAULT_THRESHOLDS, RULE_CONFIGURATION_INPUTS,
|
|
@@ -47,7 +48,9 @@ pub(crate) fn selection(config: &Config, project_root: &Path) -> Result<RuleSele
|
|
|
47
48
|
{
|
|
48
49
|
return hosted_selection(project_root);
|
|
49
50
|
}
|
|
50
|
-
let
|
|
51
|
+
let configured_catalogue = configured_rule_catalogue(&config.rule_packs)?;
|
|
52
|
+
validate_config_selectors(config, &configured_catalogue)?;
|
|
53
|
+
let catalogue = configured_catalogue
|
|
51
54
|
.into_iter()
|
|
52
55
|
.cloned()
|
|
53
56
|
.collect::<Vec<_>>();
|
|
@@ -81,6 +81,47 @@ fn given_native_dagster_alias_when_checking_then_executes_core_kernel_under_pack
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
#[test]
|
|
85
|
+
fn given_native_dagster_rule_when_checking_then_executes_pack_kernel() {
|
|
86
|
+
let test_cases = [NativeRulePackTestCase {
|
|
87
|
+
description: "selected native Dagster rule reports an invalid asset main module",
|
|
88
|
+
config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nrule_packs = [\"dagster\"]\nselect = [\"FPDG004\"]\n",
|
|
89
|
+
expected_exit_code: 1,
|
|
90
|
+
expected_output: "FPDG004 Dagster main.py must contain only imports and one main()",
|
|
91
|
+
}];
|
|
92
|
+
|
|
93
|
+
for test_case in &test_cases {
|
|
94
|
+
let repository = tempfile::tempdir().expect("temporary repository");
|
|
95
|
+
write(repository.path().join("fensu.toml"), test_case.config);
|
|
96
|
+
write(
|
|
97
|
+
repository
|
|
98
|
+
.path()
|
|
99
|
+
.join("src/pkg/defs/assets/example/assets.py"),
|
|
100
|
+
"assets: tuple[object, ...] = ()\n",
|
|
101
|
+
);
|
|
102
|
+
write(
|
|
103
|
+
repository.path().join("src/pkg/defs/assets/example/main.py"),
|
|
104
|
+
"def helper() -> int:\n return 1\n\ndef main() -> dg.MaterializeResult:\n return dg.MaterializeResult()\n",
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
let output = run_check(repository.path());
|
|
108
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
109
|
+
|
|
110
|
+
assert_eq!(
|
|
111
|
+
output.status.code(),
|
|
112
|
+
Some(test_case.expected_exit_code),
|
|
113
|
+
"{}: {}",
|
|
114
|
+
test_case.description,
|
|
115
|
+
String::from_utf8_lossy(&output.stderr)
|
|
116
|
+
);
|
|
117
|
+
assert!(
|
|
118
|
+
stdout.contains(test_case.expected_output),
|
|
119
|
+
"{}: {stdout}",
|
|
120
|
+
test_case.description
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
84
125
|
#[test]
|
|
85
126
|
fn given_core_and_alias_in_one_tier_when_checking_then_rejects_duplicate_implementation() {
|
|
86
127
|
let test_cases = [NativeRulePackTestCase {
|
|
@@ -24,6 +24,30 @@ fn given_invalid_native_policy_when_checking_then_configuration_fails_closed() {
|
|
|
24
24
|
expected_exit_code: 2,
|
|
25
25
|
expected_error: "Config key ignore contains invalid selector wrong.",
|
|
26
26
|
},
|
|
27
|
+
InvalidCheckConfigTestCase {
|
|
28
|
+
description: "unmatched blocking selector is rejected",
|
|
29
|
+
config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = [\"FFX\"]\n",
|
|
30
|
+
expected_exit_code: 2,
|
|
31
|
+
expected_error: "Config key select contains selector FFX, but it matches no rules in the configured catalogue.",
|
|
32
|
+
},
|
|
33
|
+
InvalidCheckConfigTestCase {
|
|
34
|
+
description: "unmatched warning selector is rejected",
|
|
35
|
+
config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = []\nwarn = [\"FFX\"]\n",
|
|
36
|
+
expected_exit_code: 2,
|
|
37
|
+
expected_error: "Config key warn contains selector FFX, but it matches no rules in the configured catalogue.",
|
|
38
|
+
},
|
|
39
|
+
InvalidCheckConfigTestCase {
|
|
40
|
+
description: "unmatched Dagster alias ignore is rejected",
|
|
41
|
+
config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nrule_packs = [\"dagster\"]\nselect = [\"FPDG\"]\nignore = [\"FPDGL101\"]\n",
|
|
42
|
+
expected_exit_code: 2,
|
|
43
|
+
expected_error: "Config key ignore contains selector FPDGL101, but it matches no rules in the configured catalogue.",
|
|
44
|
+
},
|
|
45
|
+
InvalidCheckConfigTestCase {
|
|
46
|
+
description: "unmatched path-scoped ignore selector is rejected",
|
|
47
|
+
config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = [\"FFA001\"]\n\n[[rule_ignores]]\nrules = [\"FFX\"]\npaths = [\"src/pkg/**\"]\nreason = \"Generated source.\"\n",
|
|
48
|
+
expected_exit_code: 2,
|
|
49
|
+
expected_error: "Config key rule_ignores.rules contains selector FFX, but it matches no rules in the configured catalogue.",
|
|
50
|
+
},
|
|
27
51
|
InvalidCheckConfigTestCase {
|
|
28
52
|
description: "blocking and warning tiers cannot overlap",
|
|
29
53
|
config: "roots = [\"src/pkg\"]\ntests = []\ntooling = []\nselect = [\"FFA001\"]\nwarn = [\"FFA001\"]\n",
|
|
@@ -7,10 +7,40 @@ use crate::helpers::{
|
|
|
7
7
|
CONFIG,
|
|
8
8
|
};
|
|
9
9
|
use crate::test_types::{
|
|
10
|
-
ExceptionSymbolTestCase, FreshnessTestCase,
|
|
11
|
-
RepositoryGuidanceTestCase, SkillsCommandTestCase,
|
|
10
|
+
ExceptionSymbolTestCase, FreshnessTestCase, InvalidSkillsConfigTestCase,
|
|
11
|
+
PublicationRaceTestCase, RepositoryGuidanceTestCase, SkillsCommandTestCase,
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
+
#[test]
|
|
15
|
+
fn given_unmatched_selector_when_generating_skills_then_configuration_fails_closed() {
|
|
16
|
+
let test_cases = [InvalidSkillsConfigTestCase {
|
|
17
|
+
description: "skills reject selectors absent from the configured catalogue",
|
|
18
|
+
expected_exit_code: 2,
|
|
19
|
+
expected_error: "Config key ignore contains selector FFX, but it matches no rules in the configured catalogue.",
|
|
20
|
+
}];
|
|
21
|
+
for test_case in test_cases {
|
|
22
|
+
let repository = project();
|
|
23
|
+
let configured = CONFIG.replace("select = [\"FF\"]", "select = [\"FF\"]\nignore = [\"FFX\"]");
|
|
24
|
+
write(repository.path().join("fensu.toml"), configured);
|
|
25
|
+
|
|
26
|
+
let result = native(repository.path(), &["--target", "agents"]);
|
|
27
|
+
|
|
28
|
+
assert_eq!(
|
|
29
|
+
result.status.code(),
|
|
30
|
+
Some(test_case.expected_exit_code),
|
|
31
|
+
"{}: {}",
|
|
32
|
+
test_case.description,
|
|
33
|
+
text(&result.stderr)
|
|
34
|
+
);
|
|
35
|
+
assert!(
|
|
36
|
+
text(&result.stderr).contains(test_case.expected_error),
|
|
37
|
+
"{}: {}",
|
|
38
|
+
test_case.description,
|
|
39
|
+
text(&result.stderr)
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
14
44
|
#[test]
|
|
15
45
|
fn given_canonical_role_policy_when_generating_skill_then_guidance_is_owned_and_complete() {
|
|
16
46
|
let test_cases = [RepositoryGuidanceTestCase {
|
|
@@ -711,7 +741,7 @@ def always(module: ast.Module, ctx: RuleContext) -> list[Fault]:
|
|
|
711
741
|
let incompatible = repository.path().join("incompatible-host");
|
|
712
742
|
write(
|
|
713
743
|
&incompatible,
|
|
714
|
-
b"#!/bin/sh\nprintf '{\"protocol\":1,\"package_version\":\"0\",\"catalogue\":[],\"blocking\":[],\"warnings\":[],\"ignored\":[]}\\n'\n",
|
|
744
|
+
b"#!/bin/sh\ncat >/dev/null\nprintf '{\"protocol\":1,\"package_version\":\"0\",\"catalogue\":[],\"blocking\":[],\"warnings\":[],\"ignored\":[]}\\n'\n",
|
|
715
745
|
);
|
|
716
746
|
fs::set_permissions(&incompatible, fs::Permissions::from_mode(0o755))
|
|
717
747
|
.expect("incompatible host mode");
|
|
@@ -5,6 +5,12 @@ pub(crate) struct SkillsCommandTestCase {
|
|
|
5
5
|
pub(crate) expected_exit_code: i32,
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
pub(crate) struct InvalidSkillsConfigTestCase {
|
|
9
|
+
pub(crate) description: &'static str,
|
|
10
|
+
pub(crate) expected_exit_code: i32,
|
|
11
|
+
pub(crate) expected_error: &'static str,
|
|
12
|
+
}
|
|
13
|
+
|
|
8
14
|
pub(crate) struct FreshnessTestCase {
|
|
9
15
|
pub(crate) description: &'static str,
|
|
10
16
|
pub(crate) expected_state: &'static str,
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
//! Native file selection and deterministic execution-owner planning.
|
|
2
|
+
|
|
3
|
+
use std::collections::HashSet;
|
|
4
|
+
|
|
5
|
+
use globset::{GlobBuilder, GlobSet, GlobSetBuilder};
|
|
6
|
+
use pyo3::exceptions::PyValueError;
|
|
7
|
+
use pyo3::{pyfunction, PyResult};
|
|
8
|
+
|
|
9
|
+
use crate::extension::constants::RECURSIVE_GLOB;
|
|
10
|
+
use crate::rules::main::plan_execution_owners::plan_execution_owners;
|
|
11
|
+
use crate::rules::models::{NativeExecutionRule, NativeExecutionTarget};
|
|
12
|
+
|
|
13
|
+
type TargetTuple = (String, String, String, Vec<String>, bool);
|
|
14
|
+
type RuleTuple = (String, String, String);
|
|
15
|
+
type PlannedTargetTuple = (Vec<String>, Vec<(String, String)>);
|
|
16
|
+
|
|
17
|
+
#[pyfunction]
|
|
18
|
+
pub(crate) fn select_native_execution_files(
|
|
19
|
+
paths: Vec<String>,
|
|
20
|
+
includes: Vec<String>,
|
|
21
|
+
excludes: Vec<String>,
|
|
22
|
+
) -> PyResult<(Option<Vec<usize>>, usize)> {
|
|
23
|
+
if includes.is_empty() && excludes.is_empty() {
|
|
24
|
+
return Ok((None, 0));
|
|
25
|
+
}
|
|
26
|
+
let include_set = build_patterns(&includes)?;
|
|
27
|
+
let exclude_set = build_patterns(&excludes)?;
|
|
28
|
+
for pattern in &includes {
|
|
29
|
+
let matcher = build_patterns(std::slice::from_ref(pattern))?;
|
|
30
|
+
if !paths.iter().any(|path| matcher.is_match(path)) {
|
|
31
|
+
return Err(PyValueError::new_err(format!(
|
|
32
|
+
"Evaluation include pattern matched no discovered Python files: {pattern}."
|
|
33
|
+
)));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
let selected: Vec<usize> = paths
|
|
37
|
+
.iter()
|
|
38
|
+
.enumerate()
|
|
39
|
+
.filter_map(|(index, path)| {
|
|
40
|
+
let included = includes.is_empty() || include_set.is_match(path);
|
|
41
|
+
(included && !exclude_set.is_match(path)).then_some(index)
|
|
42
|
+
})
|
|
43
|
+
.collect();
|
|
44
|
+
if selected.is_empty() && !paths.is_empty() {
|
|
45
|
+
return Err(PyValueError::new_err(
|
|
46
|
+
"Evaluation configuration selects zero Python files; exclusions removed all targets.",
|
|
47
|
+
));
|
|
48
|
+
}
|
|
49
|
+
let excluded = paths.len().saturating_sub(selected.len());
|
|
50
|
+
Ok((Some(selected), excluded))
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#[pyfunction]
|
|
54
|
+
pub(crate) fn plan_native_execution_owners(
|
|
55
|
+
targets: Vec<TargetTuple>,
|
|
56
|
+
rules: Vec<RuleTuple>,
|
|
57
|
+
) -> PyResult<Vec<PlannedTargetTuple>> {
|
|
58
|
+
let native_targets: Vec<NativeExecutionTarget> = targets
|
|
59
|
+
.into_iter()
|
|
60
|
+
.map(
|
|
61
|
+
|(repository_path, scope, root, relative_parts, direct)| NativeExecutionTarget {
|
|
62
|
+
repository_path,
|
|
63
|
+
scope,
|
|
64
|
+
root,
|
|
65
|
+
relative_parts,
|
|
66
|
+
direct,
|
|
67
|
+
},
|
|
68
|
+
)
|
|
69
|
+
.collect();
|
|
70
|
+
let native_rules: Vec<NativeExecutionRule> = rules
|
|
71
|
+
.into_iter()
|
|
72
|
+
.map(|(code, family, owner)| NativeExecutionRule::new(code, family, owner))
|
|
73
|
+
.collect();
|
|
74
|
+
let plans =
|
|
75
|
+
plan_execution_owners(&native_targets, &native_rules).map_err(PyValueError::new_err)?;
|
|
76
|
+
Ok(plans
|
|
77
|
+
.into_iter()
|
|
78
|
+
.map(|plan| (plan.codes, plan.identities))
|
|
79
|
+
.collect())
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#[pyfunction]
|
|
83
|
+
pub(crate) fn partition_native_execution_targets(
|
|
84
|
+
ordered_paths: Vec<String>,
|
|
85
|
+
work_paths: Vec<String>,
|
|
86
|
+
) -> Vec<usize> {
|
|
87
|
+
let work: HashSet<String> = work_paths.into_iter().collect();
|
|
88
|
+
ordered_paths
|
|
89
|
+
.iter()
|
|
90
|
+
.enumerate()
|
|
91
|
+
.filter_map(|(index, path)| work.contains(path).then_some(index))
|
|
92
|
+
.collect()
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
fn build_patterns(patterns: &[String]) -> PyResult<GlobSet> {
|
|
96
|
+
let mut builder = GlobSetBuilder::new();
|
|
97
|
+
for pattern in patterns {
|
|
98
|
+
let pattern = if pattern.contains('/') || pattern == RECURSIVE_GLOB {
|
|
99
|
+
pattern.clone()
|
|
100
|
+
} else {
|
|
101
|
+
format!("{{{pattern},**/{pattern}}}")
|
|
102
|
+
};
|
|
103
|
+
let glob = GlobBuilder::new(&pattern)
|
|
104
|
+
.literal_separator(true)
|
|
105
|
+
.backslash_escape(false)
|
|
106
|
+
.build()
|
|
107
|
+
.map_err(|error| PyValueError::new_err(error.to_string()))?;
|
|
108
|
+
builder.add(glob);
|
|
109
|
+
}
|
|
110
|
+
builder
|
|
111
|
+
.build()
|
|
112
|
+
.map_err(|error| PyValueError::new_err(error.to_string()))
|
|
113
|
+
}
|
{fensu_cli-0.9.2 → fensu_cli-0.9.4}/crates/fensu-native/src/rules/_helpers/dagster/assets.rs
RENAMED
|
@@ -133,22 +133,54 @@ pub(super) fn assets_delegate_to_main(
|
|
|
133
133
|
faults.push(path_fault(code, None));
|
|
134
134
|
}
|
|
135
135
|
for callback in callbacks {
|
|
136
|
-
|
|
137
|
-
let direct = body
|
|
138
|
-
.lines()
|
|
139
|
-
.skip(1)
|
|
140
|
-
.filter(|line| !line.trim().is_empty())
|
|
141
|
-
.collect::<Vec<_>>();
|
|
142
|
-
let valid = direct.len() == 1
|
|
143
|
-
&& (direct[0].trim_start().starts_with("return main(")
|
|
144
|
-
|| direct[0].trim_start().starts_with("yield from main("));
|
|
145
|
-
if !valid {
|
|
136
|
+
if !direct_main_delegation(program, callback.line) {
|
|
146
137
|
faults.push(fault(code, callback.line, callback.column));
|
|
147
138
|
}
|
|
148
139
|
}
|
|
149
140
|
faults
|
|
150
141
|
}
|
|
151
142
|
|
|
143
|
+
fn direct_main_delegation(program: &ProgramHandle, line: u32) -> bool {
|
|
144
|
+
let source = function_source(program, line);
|
|
145
|
+
let mut signature_complete = false;
|
|
146
|
+
let mut delimiter_balance: i32 = 0;
|
|
147
|
+
let mut body_indentation: Option<usize> = None;
|
|
148
|
+
let mut direct_statements: Vec<&str> = Vec::new();
|
|
149
|
+
for text in source.lines() {
|
|
150
|
+
if !signature_complete {
|
|
151
|
+
delimiter_balance += text.chars().fold(0, |balance, character| {
|
|
152
|
+
balance
|
|
153
|
+
+ match character {
|
|
154
|
+
'(' | '[' | '{' => 1,
|
|
155
|
+
')' | ']' | '}' => -1,
|
|
156
|
+
_ => 0,
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
signature_complete = delimiter_balance == 0 && text.trim_end().ends_with(':');
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if text.trim().is_empty() {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
let indentation = text.len().saturating_sub(text.trim_start().len());
|
|
166
|
+
let body_indentation = *body_indentation.get_or_insert(indentation);
|
|
167
|
+
if indentation == body_indentation && delimiter_balance == 0 {
|
|
168
|
+
direct_statements.push(text.trim_start());
|
|
169
|
+
}
|
|
170
|
+
delimiter_balance += text.chars().fold(0, |balance, character| {
|
|
171
|
+
balance
|
|
172
|
+
+ match character {
|
|
173
|
+
'(' | '[' | '{' => 1,
|
|
174
|
+
')' | ']' | '}' => -1,
|
|
175
|
+
_ => 0,
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
direct_statements.len() == 1
|
|
180
|
+
&& (direct_statements[0].starts_with("return main(")
|
|
181
|
+
|| direct_statements[0].starts_with("yield from main("))
|
|
182
|
+
}
|
|
183
|
+
|
|
152
184
|
fn approved_main_return(signature: &str) -> bool {
|
|
153
185
|
signature.contains("MaterializeResult")
|
|
154
186
|
|| signature.contains("Iterator[")
|
|
@@ -263,6 +295,20 @@ fn nearest_asset_owner(
|
|
|
263
295
|
}
|
|
264
296
|
}
|
|
265
297
|
|
|
298
|
+
fn ancestor_asset_owners(owner: &str) -> Vec<String> {
|
|
299
|
+
let parts: Vec<&str> = owner.split('.').collect();
|
|
300
|
+
(4..parts.len())
|
|
301
|
+
.map(|depth| parts[..depth].join("."))
|
|
302
|
+
.collect()
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
fn owner_supports_target(owner: &str, target: &str) -> bool {
|
|
306
|
+
target.starts_with(&format!("{owner}._helpers."))
|
|
307
|
+
|| ["constants", "exceptions", "models", "types"]
|
|
308
|
+
.iter()
|
|
309
|
+
.any(|role| target == format!("{owner}.{role}"))
|
|
310
|
+
}
|
|
311
|
+
|
|
266
312
|
pub(super) fn import_boundaries(
|
|
267
313
|
program: &ProgramHandle,
|
|
268
314
|
code: &str,
|
|
@@ -275,6 +321,7 @@ pub(super) fn import_boundaries(
|
|
|
275
321
|
let Some(owner) = nearest_asset_owner(context, project) else {
|
|
276
322
|
return Vec::new();
|
|
277
323
|
};
|
|
324
|
+
let ancestor_owners = ancestor_asset_owners(&owner);
|
|
278
325
|
let package = &context.package_name;
|
|
279
326
|
let mut faults: Vec<NativeFaultRow> = Vec::new();
|
|
280
327
|
for row in &program.reference_rows().imports {
|
|
@@ -290,10 +337,10 @@ pub(super) fn import_boundaries(
|
|
|
290
337
|
&& !private
|
|
291
338
|
&& import_public(row);
|
|
292
339
|
let owned = target == format!("{owner}.main")
|
|
293
|
-
||
|
|
294
|
-
||
|
|
340
|
+
|| owner_supports_target(&owner, &target)
|
|
341
|
+
|| ancestor_owners
|
|
295
342
|
.iter()
|
|
296
|
-
.any(|
|
|
343
|
+
.any(|ancestor| owner_supports_target(ancestor, &target));
|
|
297
344
|
let dependency = row.from_import && target.ends_with(".assets");
|
|
298
345
|
if !shared && !owned && !dependency {
|
|
299
346
|
faults.push(fault(code, row.line, row.column));
|