Repository navigation
bug(test): Codex fixtures assume a fixed Git curl layout on Windows #2159
Description
Existing Issue Search
- I searched existing issues and will add evidence to a canonical tracker when applicable.
📝 Observed Consequence
Native Windows full-module CI cannot establish a passing baseline because existing Codex test fixtures abort during tool resolution on the runner, before the sampled hook behavior can be exercised. This affects the observational evidence for #1891; it is not evidence of a production curl or hook regression.
🔄 Steps to Reproduce
- Use a native Windows Git installation where the reviewed Bash executable is at
<Git root>/usr/bin/bash.exeand<Git root>/mingw64is absent. - Execute the existing Windows Full Suite (Observational) job definition at head
089734522b30487c68edd9dd6535501fa3866d0a, with its pinned Go/Node versions, mandatory prerequisites, isolated state and fullgo test -json ./...selection. - Observe
TestLifecycleScriptsUseCanonicalProjectResolutionand the sampledTestCodexRegisteredSessionHandoffcases fail while canonicalizing the fixture's curl path.
Observed execution, not a requested rerun: https://github.com/Gentleman-Programming/engram/actions/runs/40417232720/job/121902501198
✅ Expected Behavior
The isolated test fixture can resolve a compatible, validated curl executable without depending on one Git distribution directory layout. Absolute/canonical/real-executable validation and child-process isolation remain enforced. A genuinely missing prerequisite fails explicitly rather than silently skipping or fabricating coverage.
❌ Actual Behavior
The sampled fixtures construct <Git root>/mingw64/bin/curl.exe and fail canonicalization because the runner has no mingw64 directory. Native path contracts, preflight and locked Pi dependency installation passed, but the full suite returned exit 1 after 631.1215723 seconds.
The JSON report records 33 package passes, one failing package (plugin), four packages without tests, 108 test/subtest failure events and 131 skip events. The sampled curl-path failures do not establish that every failure or skip has the same cause.
Operating System
Windows
Release Version (Report Context)
Source-checkout CI, not an installed release: PR #2156 head 089734522b30487c68edd9dd6535501fa3866d0a; actual checked-out PR merge 95c0256055f7f6300533b4900e7ab995fba744ee. Observed toolchain: Go 1.26.10 windows/amd64 and Node 24.22.1.
Agent / Client
Other
📋 Relevant Logs
fixture selector CODEX_TEST_TRUSTED_CURL="<Git root>/mingw64/bin/curl.exe"
cannot canonicalize fixture tool path="<Git root>/mingw64/bin/curl.exe"
GetFileAttributesEx <Git root>/mingw64: The system cannot find the file specified.
exit_code=1
elapsed_seconds=631.1215723The installation-root prefix above is normalized for privacy; the missing-directory error and path suffix are preserved. Failure artifact: https://github.com/Gentleman-Programming/engram/actions/runs/40417232720/artifacts/12696755711
💡 Additional Context
Client selection Other refers to Go test/CI fixtures, not a reported installed-host failure.
Current source evidence: plugin/codex_url_intent_test.go, codexIntentTool, reads environment overrides only for Bash and jq. Its Windows curl branch always derives the fixed mingw64/bin/curl.exe path. CODEX_TEST_TRUSTED_CURL is a diagnostic name, not a supported environment selector in this code. Merely exporting it from CI would not change fixture behavior.
The helper file has identical Git blob a82393d1be6875ac89ea8246e8cc3aadecfda69e at pinned main 5f1aabed7e8a16f8d310877416988e6857671d29 and the observed PR head. The wiring did not modify it. The hosted failure is reproduced evidence for the candidate; a standalone isolated reproduction against freshly verified remote main remains pending. No full local Go suite or new CI dispatch/rerun was executed for this report.
Separate unit boundary
- Correct test-fixture curl resolution and its owning regressions/affected fixture consumers as one focused unit; remove the fixed-layout assumption without weakening trusted executable validation or hermetic child PATH/config/data/temp handling.
- Add a focused regression for the observed layout without mingw64 and preserve existing supported layouts and failure behavior. Verify through a named affected test such as TestLifecycleScriptsUseCanonicalProjectResolution on isolated state before making broader qualification claims.
- Do not introduce extra flags, gates or parallel configuration unless current source evidence establishes a necessity. The exact fix mechanism is not yet proven or approved.
- No production hooks, Windows path aliases, package trimming, blanket skips, fabricated Git directories, timeout increases, diagnostic carryover or automatic next-failure loop.
- Keep PR ci(windows): add observational full-module baseline wiring #2156 / issue feat(ci): add observational Windows full-module baseline wiring #2155 limited to observational wiring. feat(ci): establish full Windows Go suite coverage with a staged required-check rollout #1891 retains stable native proof, finite observation and explicit rollout/disposition requirements. Existing PR ci(windows): establish observational full-suite baseline #2023 and its patches remain untouched.
Targeted open-and-closed discovery and full-body comparison found no exact match among #1392, #1327, #2091, #1361 and #921; those cover neighboring but different invariants. This new issue requests maintainer review only. Approval, assignment, implementation, publishing and merge remain separate decisions.
Activity
dnlrsls commentedon Oct 27, 2026
Confirmed with a focused reproduction on unmodified main
5f1aabed7e8a16f8d310877416988e6857671d29. This updates the report's pending main-only reproduction note; the bug is reproduced, not fixed.usr/binpresent andmingw64absent, using the existing Bash/jq fixture selectors.go.modandgo.sum, retained their hashes. The primary worktree stayed clean at089734522b30487c68edd9dd6535501fa3866d0a. The temporary SDK, copied tools, snapshot, caches and raw logs were removed; no global installation or installed Git changes occurred.Raw capture integrity: stdout SHA-256
a6881b329ac339b6434bdad9bc822d38a20afe8c06acf3effd6d94624145babc; stderr SHA-2562c04f5df909cb72b3e3faec6fe1c1ecb6af07b434bc846c1b150034c18e0695b. Installation paths in the diagnostic are normalized; these are hashes of the original captures, not the displayed excerpt.fix(plugin): resolve Windows curl without a fixed Git layout (Gentlem…