|
| 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