You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #673 closes #666 by its second closing condition — the clang-tidy-diff job
now asserts the Catch2 it analyses against (scripts/check_catch2_pin.sh . --strict), and a workstation run of the same script prints the divergence
instead of staying silent. That makes the divergence loud. It does not remove
it.
#666's first closing condition is the stronger one and is still open:
Close it if the job stops depending on the runner's Catch2 — e.g. the clang-tidy job builds Catch2 from the version CMakeLists.txt already pins
for FetchContent (v3.8.1) rather than apt-get install catch2, so local and
CI analyse the same expansion.
If the job analysed a Catch2 the repository pins, a local run of the job's own
configure would analyse the same headers, and there would be nothing for a gate
to report. The gate in #673 is the second-best outcome: it tells you the two
measurements differ, it cannot make them agree.
What it would take
Removing catch2 from the clang-tidy job's apt-get install line is not
sufficient on its own, for two reasons:
A workstation with a system Catch2 still diverges.CMakeLists.txt:560
is find_package(Catch2 CONFIG QUIET) with the FetchContent v3.8.1
fallback only on NOT Catch2_FOUND. A contributor with a distribution
Catch2 (3.16.0 here) would keep getting theirs. Forcing the pinned one needs
something like CMAKE_DISABLE_FIND_PACKAGE_Catch2=ON in that job's
configure, or a morph-level option.
examples/common/CMakeLists.txt calls find_package(Catch2 3 CONFIG QUIET) and treats "not found" as a hard FATAL_ERROR, relying on the
Tests section's FetchContent having already resolved one
(CMakeLists.txt:618-627). Whether that second find_package still
succeeds under CMAKE_DISABLE_FIND_PACKAGE_Catch2=ON — FetchContent's CMAKE_FIND_PACKAGE_REDIRECTS_DIR config would normally satisfy it, and CMAKE_DISABLE_FIND_PACKAGE_<Pkg> would normally block even that — is the
question that decides whether this is a one-line change or a restructuring.
The clang-tidy job turns MORPH_BUILD_LADDER on, so it goes through that examples/common path.
Verification status
Inferred from reading, not measured. Nothing here was built: the
reasoning is from CMakeLists.txt:558-572 and :615-627 plus the
clang-tidy job's configure flags in .github/workflows/ci.yml.
Not verified: whether CMAKE_DISABLE_FIND_PACKAGE_Catch2=ON breaks examples/common, which is the one thing that decides the size of this. One
configure of the clang-tidy job's own flag set would settle it.
Close as fixed when the clang-tidy-diff job's compile database resolves
Catch2 to a version this repository pins, demonstrated by scripts/check_catch2_pin.sh finding the pinned version rather than apt's —
and by a local run of the job's configure producing the same version on a
machine that has a different distribution Catch2 installed.
Close as invalid if the configure turns out not to be able to reach that
state without the ladder losing its Catch2, in which case the finding is that
the ladder's find_package coupling is the blocker and that is the better
ticket.
PR #673 closes #666 by its second closing condition — the clang-tidy-diff job
now asserts the Catch2 it analyses against (
scripts/check_catch2_pin.sh . --strict), and a workstation run of the same script prints the divergenceinstead of staying silent. That makes the divergence loud. It does not remove
it.
#666's first closing condition is the stronger one and is still open:
If the job analysed a Catch2 the repository pins, a local run of the job's own
configure would analyse the same headers, and there would be nothing for a gate
to report. The gate in #673 is the second-best outcome: it tells you the two
measurements differ, it cannot make them agree.
What it would take
Removing
catch2from the clang-tidy job'sapt-get installline is notsufficient on its own, for two reasons:
CMakeLists.txt:560is
find_package(Catch2 CONFIG QUIET)with theFetchContentv3.8.1fallback only on
NOT Catch2_FOUND. A contributor with a distributionCatch2 (3.16.0 here) would keep getting theirs. Forcing the pinned one needs
something like
CMAKE_DISABLE_FIND_PACKAGE_Catch2=ONin that job'sconfigure, or a morph-level option.
examples/common/CMakeLists.txtcallsfind_package(Catch2 3 CONFIG QUIET)and treats "not found" as a hardFATAL_ERROR, relying on theTests section's
FetchContenthaving already resolved one(
CMakeLists.txt:618-627). Whether that secondfind_packagestillsucceeds under
CMAKE_DISABLE_FIND_PACKAGE_Catch2=ON— FetchContent'sCMAKE_FIND_PACKAGE_REDIRECTS_DIRconfig would normally satisfy it, andCMAKE_DISABLE_FIND_PACKAGE_<Pkg>would normally block even that — is thequestion that decides whether this is a one-line change or a restructuring.
The clang-tidy job turns
MORPH_BUILD_LADDERon, so it goes through thatexamples/commonpath.Verification status
reasoning is from
CMakeLists.txt:558-572and:615-627plus theclang-tidy job's configure flags in
.github/workflows/ci.yml.7a343e6f): ubuntu-24.04's package iscatch2 3.4.0-1build1(Launchpad, noble Release pocket, no-updatespublication), and this workstation has 3.16.0. That the two differ is the
premise; that the difference changes a clang-tidy outcome is clang-tidy-diff run locally is silently blind to Catch2 TEST_CASE cognitive-complexity findings the CI job reports #666's own
measurement, not re-run here.
CMAKE_DISABLE_FIND_PACKAGE_Catch2=ONbreaksexamples/common, which is the one thing that decides the size of this. Oneconfigure of the clang-tidy job's own flag set would settle it.
examples/common/CMakeLists.txtis held by PR bank/gui + ci: clear the eleven bank-GUI sources' clang-tidy debt, and gate the Q_OBJECT header split that no build catches early (fixes #656, fixes #659) #665.What would change the verdict
Catch2 to a version this repository pins, demonstrated by
scripts/check_catch2_pin.shfinding the pinned version rather than apt's —and by a local run of the job's configure producing the same version on a
machine that has a different distribution Catch2 installed.
state without the ladder losing its Catch2, in which case the finding is that
the ladder's
find_packagecoupling is the blocker and that is the betterticket.
all — clang-tidy-diff run locally is silently blind to Catch2 TEST_CASE cognitive-complexity findings the CI job reports #666 notes its own evidence (3.5.3 headers ahead on
-isystemrestoreCI's behaviour) is consistent with a path-ordering explanation it did not
exclude.
Found while closing #666 in PR #673; filed rather than folded in, per AGENTS.md.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VptDWG2fKr2vBnLSJcgzgW