Skip to content

Commit 103b112

Browse files
committed
Merge FEATURE-ci-windows-stage-make: preserve selected staging frontend
2 parents 0cbf181 + 3baa8c3 commit 103b112

2 files changed

Lines changed: 92 additions & 1 deletion

File tree

‎scripts/test-v3-stage-install.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313

1414
SOURCE = Path(__file__).resolve().parent.parent
15-
MAKE = shutil.which('gmake') or shutil.which('make')
15+
# Keep the caller's make frontend: MSYS and native Windows paths differ.
16+
MAKE = os.environ.get('MAKE') or shutil.which('gmake') or shutil.which('make')
1617

1718

1819
class StagedInstallRecipes(unittest.TestCase):
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# FEATURE-ci-windows-stage-make: retain the caller's staging make frontend
2+
3+
Status: Complete — local implementation and validation complete; native confirmation remains CI/v3-PR owned.
4+
Base: `v3` at `0cbf18116f63e0762aaad19b16358e6f61dddf04`.
5+
6+
The installed-package driver selects `MAKE=make` for configure and runtime.
7+
The staging fixture previously searched for `gmake` first, independently of that
8+
selection. Preserve a nonempty caller `MAKE` as one executable argument; retain
9+
the existing `gmake`, then `make`, fallback when no executable was selected.
10+
11+
Action items:
12+
13+
- [x] Read the saved plan, literal journal, primary CLAUDE.md/AGENTS.md and v3
14+
architecture; create the isolated worktree from the exact base.
15+
- [x] Corroborate the native frontend/source-path mismatch using existing
16+
terminal failures, one existing Windows artifact capture and official sources.
17+
- [x] Observe the selection regression with real configure, GNU make, libtool
18+
and the unchanged eight-case fixture before changing the selector.
19+
- [x] Honor the caller's selected make executable without splitting its path.
20+
- [x] Verify the configured outer make target and all eight fixture cases with
21+
competing GNU make frontends; verify spaced executable/value boundaries and
22+
both unselected fallback choices through actual GNU make execution.
23+
- [x] Preserve every original fixture method, DOS-prefix/MSYS handoff,
24+
configure-failure diagnostic and production staging/driver rule.
25+
- [x] Run affected Python syntax and diff-whitespace checks.
26+
- [x] Caller: complete Groundwork validation and finalization into `v3`.
27+
- [ ] CI/v3 PR: execute post-repair native Windows and other nonlocal checks.
28+
29+
Native evidence and causal assessment (2026-10-23):
30+
31+
- Actual package run `40030060276`, Windows job `120675819540`, and archive run
32+
`40030063567`, Windows job `120676108170`, report `gmake.EXE` failing to find
33+
the real source `Makefile.am` under `/d/a/...`. Package setup succeeds and all
34+
eight cases execute, producing ten assertion failures in 64.524 seconds.
35+
- One capture of existing package artifact `12535394203` has SHA-256
36+
`f9a19b65963b405956087895ae5db499a7cd43a25feaa1118caa429ecad0caa5`.
37+
Only `matrix/summary.json` and `matrix/tls-no/build/config.log` were extracted.
38+
The summary binds revision `0cbf1811...` and records selected `make` as GNU
39+
Make 4.4.1 built for `x86_64-pc-cygwin`. The configure log records MSYS source
40+
paths, `/usr/bin` before inherited Windows tool directories, and Strawberry's
41+
native tool directory later on PATH.
42+
- The [MSYS make package](https://packages.msys2.org/packages/make) at the exact
43+
installed version 4.4.1-3 supplies `/usr/bin/make.exe`, without `gmake.exe`.
44+
Its [build source](https://github.com/msys2/MSYS2-packages/blob/master/make/PKGBUILD)
45+
builds the MSYS tool. [MSYS path documentation](https://www.msys2.org/docs/filesystem-paths/)
46+
explains that Unix absolute paths resolve differently for native tools.
47+
These corroborate the frontend/path mismatch seen in the real failure.
48+
The runner's exact absolute `gmake.EXE` path and version were not recorded;
49+
Strawberry provenance is a plausible inference, not an observed identity.
50+
- The proven defect is that the fixture discards the caller's selected frontend.
51+
Retaining that selection removes this mismatch without changing source-path
52+
policy. Native confirmation that this also resolves the Windows failure
53+
remains pending CI; Linux does not reproduce the Windows filesystem ABI.
54+
55+
Verification:
56+
57+
- Baseline: all eight original staging cases pass locally in 17.565 seconds.
58+
- RED: the retained task-local `selected-make-probe.py SOURCE red` configures
59+
an actual outer build, then executes production `make check-v3-stage-install`.
60+
All eight real cases pass (18.339 seconds), but execution records show the
61+
selected frontend only for configure's make probes and competing `gmake` for
62+
all twenty fixture target calls. The selection assertion fails. Both controlled
63+
frontends delegate to real GNU make; no compiler, configure or pathname error
64+
is simulated. The initial assertion expected only `gmake`; its correction
65+
accounts for configure's valid selected-make calls and fails on the same
66+
retained execution evidence before the selector edit.
67+
- GREEN: the same actual configure/outer-target/eight-case probe passes in
68+
18.984 seconds with only the selected frontend. Three smaller cases execute
69+
the actual fixture `make()` method against a real Makefile: an absolute
70+
executable path containing a space, unset `MAKE` with `gmake` available, and
71+
empty `MAKE` with only `make` available. The spaced executable and `VALUE=one
72+
two` remain intact arguments. The wrappers pass their real make executable
73+
into recursive recipes, keeping those shell commands outside the executable
74+
boundary check.
75+
- Python compilation and `git diff --check` pass. AST comparisons confirm all
76+
eight test bodies and every other fixture method are unchanged. Only the
77+
module-level selector and its explanatory comment change. Production make
78+
rules, configure logic, workflows and installed-package drivers are unchanged.
79+
CLAUDE.md documents C++ cpplint only; no Python linter applies here.
80+
81+
Evidence, executable probe and task-executor notes are retained in the primary
82+
checkout's `.debug/ci-windows-stage-make-4tk4f4a0/implementation/`; the existing
83+
literal journal records the bounded assessment. No new native CI, broad suite,
84+
publication, merge or full validation was performed. Previous unrelated failure
85+
assessments remain closed with their existing uncertainty. Missing post-repair
86+
native evidence remains assigned to CI/v3 PR under AGENTS.md.
87+
88+
Final local validation/finalization (2026-10-23):
89+
90+
Groundwork sealed exact clean implementation `c194b1b8b778b5122c6e74a3a7b396f98ac48a04` / tree `a584f0c3ac1c405db9f30d2871d29b7392e29c75`: all nine independent profiles approved, 1 iteration, 0 fixed, 0 unworked. Durable receipt: `.git/groundwork/validation/cdb4ee2aea69cc6a/d83f80f13681e192/groundwork-validation-0956b8c54706a55af09c304478b08fc8`. Superseded reused-context reviews were excluded; fresh independent reviews supplied the final batch. Existing current GREEN probe bytes were verified and copied into that receipt directory; the original RED probe script version was not separately preserved, while its actual execution records and the corrected pre-edit contract assertion remain retained. No reconstructed script or additional full RED execution is claimed. The earlier implementation-only paragraph is superseded for local validation/finalization. Caller changes only this task bookkeeping before serial merge/cleanup. Post-repair native Windows remains pending CI/v3 PR, and overall CI is not green. Known independent Darwin shell/tooling setup repairs follow before publishing the next batch; five uncertain C++ causes remain outside this task.

0 commit comments

Comments
 (0)