Instantiate the matching seeker directly, from scripts/search_files.py or, for a raw
image, scripts/raw_image.py, so the semantics are exact by construction, then call
search() with the pattern. This is the only way to catch a mismatch between what you
think the seeker does and what it does.
To confirm the artifact then produces the rows you expect, call the artifact function's
.__wrapped__, exposed by @artifact_processor's @wraps, with a mock context providing
get_files_found() and get_relative_path(). len(data_list) is the count to record in
sample_data.
Case variants. Use one bracket class, */[Bb]iome/*, never a tuple of two patterns. A
tuple double-counts on Windows, where normcase folds both to the same string and the
entry point extends files_found once per pattern with no dedup.
Vendor moves. When a file changes location between OS versions, keep the old pattern
alongside the new one. Examiners run these tools against extractions going back years.
Over-generic components. A pattern whose filename component is bare *, ** or *.*
matches every file at that level and is rejected. Anchor on something real.
Hygiene
Print counts and value shapes from test images, never actual values, and delete anything
you extracted when you are done.