Files
msd-core/tests
Tom Boucher 6e681cb36c fix(#3901): commit-docs-guard suites isolate children from a global core.hooksPath (#4063)
* test(#3901): the guard suite must survive a developer's global core.hooksPath (failing first)

* fix(#3901): the commit-docs-guard suite isolates children from the host git config

A developer's GLOBAL core.hooksPath (~/.gitconfig) applies to every
fresh repo, so the guard's correct refusal — it will not install a hook
git would never run — failed this suite's beforeEach and 18 tests read
as a commit-docs-guard regression on any machine that centralizes
commit hooks. CI never saw it (runners have no global git config).

before() pins GIT_CONFIG_GLOBAL to an empty file for the whole suite
(runGsdTools and the git helpers propagate process.env to every child).
A LOCAL repo value cannot isolate this: any non-empty local value trips
the same refusal, and an empty local value makes rev-parse --git-path
hooks resolve to ./ instead of .git/hooks. The regression test pins the
seam: the isolation file is armed and empty, a child git resolves no
hooksPath from the host, and the beforeEach enable installed the hook
at the repo-local default path. A child given an explicitly hostile
GIT_CONFIG_GLOBAL still refuses — that is the guard being correct.

* fix(#3901): review fold-ins — isolation hoisted to all three guard suites; changeset

Adversarial review: the pin covered suite A only — the B (#3588 B1-B15)
and D (real git commit wiring) suites run enable against fresh repos
too and failed identically on hostile-global machines; the issue's 18
failures could not have come from A's five tests alone. The pin is
extracted to isolateGlobalGitConfig() and armed in all three suites
(B9's LOCAL hooksPath test is unaffected — the pin neutralizes only the
global scope; D's premise is the hook firing from .git/hooks, which the
isolation preserves).

* chore(#3901): backfill changeset PR number (4063)

* fix(#3901): drop the now-unused before import — max-warnings 0 fails CI

---------

Co-authored-by: sim <sim@local>
2026-08-29 18:20:14 -04:00
..