From 8fe0c85b12878bd86cf8bdac0930b03fa2965df2 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 6 Oct 2026 22:43:57 +0100 Subject: [PATCH 1/2] docs(ci): correct the Haskell build step comment after #1184 #1181 and #1184 merged opposite answers to standards#1161. #1181 made the build step generate a cabal.project for every tracked package, because detect then counted *.cabal at any depth. #1184, merged after it, narrowed detect to a root cabal.project or root *.cabal and reports nested-only Haskell as unsupported. The owner ruled on 2026-10-06 that #1184's root-only detect stands. The build step's comment still claimed the probe "counts *.cabal at ANY depth" and that narrowing it "would have hidden nested Haskell". Both are false on main now. The guard's error text named "*.hs or stack.yaml", which detect no longer counts. Behaviour is unchanged. With a root *.cabal and no cabal.project, the generated project still lists the root package and every tracked nested package, so a satellite package beside a root one is still built. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012kgrMQRhSmZMBbF9Ui1zBw --- .github/workflows/ci-pipeline.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci-pipeline.yml b/.github/workflows/ci-pipeline.yml index da609a9c0..4a6fd3e7e 100644 --- a/.github/workflows/ci-pipeline.yml +++ b/.github/workflows/ci-pipeline.yml @@ -891,22 +891,22 @@ jobs: # trade than a narrower gate. -Wall -Werror is the spec's "fail on # warnings" and is read-only with respect to tracked files. # - # BUILD WHAT `detect` COUNTED. The probe counts `*.cabal` at ANY depth - # (a git pathspec `*` crosses `/`), so a repo whose only package is - # nested — standards' own sanctify-php satellite — turned this job on - # and then died in a root that holds no package. A guard that counts - # a different set than its consumer builds is the defect; narrowing - # the probe to the root would have hidden nested Haskell instead. + # BUILD WHAT `detect` COUNTED. Since #1184 the probe counts Haskell only + # from a ROOT `cabal.project` or a ROOT `*.cabal` (`:(glob)` stops `*` + # crossing `/`); a repo whose only packages are nested is reported by + # detect as UNSUPPORTED and this job does not run (owner ruling + # 2026-10-06, standards#1161). So this step always has a root package. # A root `cabal.project` is the repo's own word and is used as-is; - # otherwise one is written (untracked) listing every package - # directory, from the SAME pathspec the probe uses. + # otherwise one is written (untracked) listing the root package and + # every tracked nested package directory, so a satellite package that + # sits beside the root one is built too, not silently skipped. if [ -f cabal.project ]; then echo "Using the repository's own cabal.project." source_note="root cabal.project" else mapfile -t pkg_dirs < <(git ls-files -- '*.cabal' | xargs -r -n1 dirname | sort -u) if [ "${#pkg_dirs[@]}" -eq 0 ]; then - echo "::error::Haskell was detected (*.hs or stack.yaml) but no *.cabal package is tracked, so there is nothing cabal can build. Add a .cabal file (hpack users: commit the generated one) or a cabal.project." + echo "::error::Haskell was detected from a root *.cabal, but git ls-files lists no tracked *.cabal, so there is nothing cabal can build. Commit the .cabal file (hpack users: commit the generated one) or add a root cabal.project." exit 1 fi { echo "packages:"; printf ' %s/\n' "${pkg_dirs[@]}"; } > cabal.project From 949302ecfb4568295c36e6a7dfe9317f0a821ba1 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 6 Oct 2026 22:50:01 +0100 Subject: [PATCH 2/2] docs(ci): a root cabal.project may list only nested packages CodeRabbit (#1186): a tracked root cabal.project makes detect fire even when every package it lists is nested, so the step does not always have a root package. Say so. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012kgrMQRhSmZMBbF9Ui1zBw --- .github/workflows/ci-pipeline.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-pipeline.yml b/.github/workflows/ci-pipeline.yml index 4a6fd3e7e..c25c5db87 100644 --- a/.github/workflows/ci-pipeline.yml +++ b/.github/workflows/ci-pipeline.yml @@ -893,11 +893,12 @@ jobs: # # BUILD WHAT `detect` COUNTED. Since #1184 the probe counts Haskell only # from a ROOT `cabal.project` or a ROOT `*.cabal` (`:(glob)` stops `*` - # crossing `/`); a repo whose only packages are nested is reported by - # detect as UNSUPPORTED and this job does not run (owner ruling - # 2026-10-06, standards#1161). So this step always has a root package. - # A root `cabal.project` is the repo's own word and is used as-is; - # otherwise one is written (untracked) listing the root package and + # crossing `/`); a repo with nested packages and neither root file is + # reported by detect as UNSUPPORTED and this job does not run (owner + # ruling 2026-10-06, standards#1161). A root `cabal.project` is the + # repo's own word and is used as-is, even when every package it lists + # is nested. Without one, detect fired on a root `*.cabal`, and one is + # written (untracked) listing the root package and # every tracked nested package directory, so a satellite package that # sits beside the root one is built too, not silently skipped. if [ -f cabal.project ]; then