@@ -256,8 +256,9 @@ jobs:
256256 # Run the FULL workspace when the change can affect everything:
257257 # non-PR events (push to main, the nightly cron, dispatch), this
258258 # workflow file (it carries the mcpp version pins, so a version bump
259- # always re-validates every package), the workspace manifest, or
260- # shared test scripts. Docs-only changes select nothing.
259+ # always re-validates every package), a non-member edit to the
260+ # workspace manifest, or shared test scripts. Docs-only and tools/-only
261+ # changes select nothing.
261262 # Note: bash 3.2 on macOS runners — no associative arrays here.
262263 - name : Select affected workspace members
263264 shell : bash
@@ -272,7 +273,7 @@ jobs:
272273 while IFS= read -r f; do
273274 [ -n "$f" ] || continue
274275 case "$f" in
275- .github/workflows/validate.yml|tests/*.sh|tools/* ) full "$f" ;;
276+ .github/workflows/validate.yml|tests/*.sh) full "$f" ;;
276277 mcpp.toml)
277278 # Workspace manifest. Every new-package PR appends to the
278279 # members list, so that alone must NOT force a full run:
@@ -298,7 +299,14 @@ jobs:
298299 if grep -q "$lib" "$mt"; then add "$(basename "$(dirname "$mt")")"; hit=1; fi
299300 done
300301 [ "$hit" = 1 ] || echo "note: no workspace member exercises $f" ;;
301- *.md|docs/*|.agents/*|.github/*) : ;;
302+ # tools/ holds OFFLINE descriptor-generation and publishing
303+ # helpers (tools/compat-*/, tools/gtc/, publish_mcpp_index.sh).
304+ # Nothing under it is consumed by a package build: when one of
305+ # them actually changes a package, the generated pkgs/*.lua
306+ # changes with it and the rule above selects the right members.
307+ # So a tools/ edit alone selects nothing rather than forcing a
308+ # full workspace rebuild.
309+ *.md|docs/*|.agents/*|.github/*|tools/*) : ;;
302310 *) full "unclassified change: $f" ;;
303311 esac
304312 done <<EOF
0 commit comments