Fail the CMake file-list check when a component has no unit to check

Table of Contents

This page is a capture in the inbox bucket of the product backlog — a pre-sprint idea, not yet pulled into a sprint as a story.

1. What

A check that inspects nothing must not report success. Name the group:

python3 projects/ores.codegen/scripts/regenerate_cmake_component_files.py --component ores.analytics --check
# All component_files.cmake up to date.
echo $?
# 0

Nothing was read. ores.analytics is a modeled component: it has modeling/component_overview.org with #+full_name: ores.analytics, so it is in discover_models() and passes the guard that rejects an unknown slug. It has no src/ and no tests/, so regenerate_one skips both units — the skip is deliberate and correct, for the non-C++ components (ores.compass, ores.lisp, ores.seeder) that carry an overview for the physical-space graph. touched stays empty and --check reports a clean tree.

The fix is to make an explicit --component fail when the named component has no CMake unit to inspect, and to say which leaf to name instead. Under --all the skip stays correct: the group is one of many and the leaves are checked.

2. Why

Found on 2026-09-26 during the ores.analytics clean pass, when the group slug was used as the G06 evidence command and passed. The per-part runs were the only real check; --component ores.analytics --check would have been cited as proof of a tree it never opened. That is worse than a missing check: the gate answers in the affirmative, so a reviewer stops looking.

The class of defect is worth a fix rather than a note, because the tool's --component argument reads as a natural way to scope a check to a component group, and it silently degrades to a no-op.

3. References

  • projects/ores.codegen/scripts/regenerate_cmake_component_files.py — discover_models(), the unknown-slug guard in main(), and the out_dir.is_dir() skip in regenerate_one().
  • projects/ores.analytics/modeling/component_overview.org — the group overview whose #+full_name: makes the slug look known.
  • How do I test the shell? — the recipe beside this one, whose testing conventions made the same distinction between a real check and a vacuous one.

4. See also

Emacs 29.3 (Org mode 9.6.15)