# Tests excluded from `cargo miri test`. Each entry must carry a
# one-line justification. Format: `<substring>  # reason`
# Blank lines and lines starting with `#` are ignored.
#
# Path note: the project re-exports `src/core/` as `core_group` via
# `#[path = "core/mod.rs"] pub(crate) mod core_group;` in lib.rs, so
# Miri sees test names with the `core_group::` prefix, not `core::`.
# Same for `plugins_group::` and `server_group::`.
#
# Allow-list intent: stay under 20 entries. Each entry should be
# revisited when Miri ships new model coverage.

# Whole core_group::fs_ops::tests module — std::fs::copy uses
# copy_file_range on Linux, which Miri does not shim. The
# verify/walk siblings are also FS-touching and not modelled.
core_group::fs_ops::tests

# Same std::fs::copy gap, reached through content_stager's copy_tree:
# `fclonefileat` on macOS, `copy_file_range` on Linux — neither is shimmed.
# Only the four copy_tree_* tests touch it; the rest of the module (e.g.
# collect_entries_skips_symlinks_and_special_files) runs clean under Miri
# and stays covered.
core_group::content_stager::tests::copy_tree_

# Same std::fs::copy gap again, in the three other places the crate copies
# files. Enumerated from the call sites rather than found one failing run at
# a time: streaming::compile_batch and streaming::merge_dir copy, pipeline
# reaches them through the streaming path, and isr_manifest::copy_sources
# copies the ISR sources. Only the copying tests are listed — the rest of
# each module still runs under Miri.
core_group::streaming::tests::compile_batch_
core_group::streaming::tests::merge_dir_
core_group::pipeline::tests::test_pipeline_streams_when_budget_explicitly_set
plugins_group::isr_manifest::tests::copy_sources_
plugins_group::isr_manifest::tests::plugin_after_compile_full_run_writes_manifest_and_copies_sources

# st_mtime emulation: Miri reports a constant mtime, breaking the
# dirstamp-invalidation contract.
core_group::cache::tests::dirstamp

# Atomic create_dir_all + atomic write semantics that Miri doesn't
# model.
plugin::cache::persists_across_runs
plugins_group::plugin::cache::persists_across_runs

# fail-rs failpoint registration uses TLS in a way Miri can't model
# under -Zmiri-track-stacked-borrows; exercised in the native test
# matrix instead.
fault_injection_failpoint_smoke

# Process spawning: Miri cannot call `posix_spawnattr_init`, so any test
# that re-invokes the test binary as a child aborts the whole run with
# "unsupported operation" — explicitly not a UB finding. Each of these
# asserts behaviour that is unobservable in-process (a process::exit code,
# or a one-shot global that only a fresh process can exercise), so a child
# is the only way to test it. Covered by the native test matrix.
cmd::audit::tests::run_and_dispatch_fail_outcome_exits_one
tests::apply_rayon_thread_pool_succeeds_in_fresh_process
tests::run_exits_with_clap_error_code_in_child_process
