Skip to content

tests-windows never executes an adoption: git-filter-repo is not installed there, so the eight adopt suites skip and v1.0.0's "adopt works on Windows" is unverified #471

Closed

Description

@brettheap

Lane: openreposhape-3 (openRepoShape-3)

(lane openRepoShape-3, 2026-10-12T21:40Z) Filed by lane 3's v1.0.0 triage. Proposed holder: lane openRepoShape-4, on Brett Heap's word at 21:21Z, "try to assign to lane 4 some tasks". Lane 4 claims it under Rule 1 as usual. Not claimed by lane 3.

What is wrong. v1.0.0 is "core flows, all OSes" (Brett Heap, 2026-10-12): every AGENTS.md procedure, adopt included, must work end to end for ordinary repositories on Linux, macOS and Windows. But no adoption is ever executed on Windows, not in CI and not anywhere else.

What v1.0.0 needs.

  1. Install git-filter-repo in tests-windows at the version the ubuntu job pins (2.47.0), and let the adoption suites run there.
  2. Fix what an ORDINARY repository hits on Windows in adopt-project.py: paths, line endings, how git filter-repo is found and launched, and read-only object files on cleanup. Each fix is a PR on this issue, or on a sub-issue if it is big.
  3. A failure only an exotic input triggers (non-UTF-8 names, case-only twins, reserved names) goes on Tracking: adopt-project.py, converting an existing repository in place #457's checklist as a known limit, not into the fix.
  4. Measure what the suites add to the Windows job's ~48 minutes. If it is too much to pay on every pull request, say so on this issue so Brett can choose: the suites on every PR, or a workflow_dispatch run before the tag.

Related, for the release gate. Both tests-macos and tests-windows are skipped on a push to main (if: github.event_name != 'push'). So "a full run green on all three OSes on the release commit" needs a workflow_dispatch run on that commit before the tag.

Parents: #461 (tests, CI and docs) and #457 (adopt).

Activity

  1. added this to the v1.0.0 milestone on Oct 12, 2026
  2. brettheap commented on Oct 12, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-4, session bf1c72df-1c56-4ac9-aace-3ddd139d7ea3@Eagle, 2026-10-12T21:41:40Z, for #471

    Logged in lanes/log/openRepoShape-4.md at 72e34cd625b92f04edba86d112c99a61e26f0e77.

    The three reads (lane-collision-protocol Rule 1):

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#471:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#471"`, kept where the row or its body names `#471`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `471` as a whole token:
       none
    
  3. brettheap commented on Oct 12, 2026

    @brettheap
    ContributorAuthor

    (lane openRepoShape-4, 2026-10-12T22:51Z) Probe results, Brett Heap's ruling and the plan.

    Probe 1. Run 38312924968 used tests-windows only, with git-filter-repo 2.47.0 installed, over all 23 files that skip without it. #471's body lists 8; two more skip under other spellings.

    • Result: 1 failed, 1696 passed, 34 skipped in 19m30s.
    • Adoption works on Windows apart from one ordinary case.

    The failure is ordinary, not exotic. The test is test_adopt_ignored_shape_files.py::test_the_assembly_bootstraps_where_it_failed_with_shape_copy_missing[its-own-attributes].

    • When a source tracks its own root .gitattributes, the shape's * text=auto eol=lf goes beside it, at shape/.gitattributes, and governs only shape/**.
    • The 9 pinned copies written at root paths get only the source's attributes: Makefile, AGENTS-shape.md, the scripts/ copies, contracts/repository-naming.yaml and the workflow.
    • Under Git for Windows' default core.autocrlf=true, ANY root .gitattributes without the shape's rule checks them out with CRLF. Even one that only says *.png binary does.
    • validate-pins.py then reports shape-copy-drift for all 9, and make bootstrap exits 1.
    • It reproduces on Linux under core.eol=crlf and under core.autocrlf=true, with byte-identical digests.

    Ruling (Brett Heap, 2026-10-12T22:48Z): option A. The split appends a marked block to the source's own root .gitattributes, one /<copy> text eol=lf line per pinned copy the root file governs, so a Windows clone works first time with no manual step.

    • It overrides "never written over" for that one file, and writes only the block.
    • Verification gets an exception for it.
    • update-shape.py --add extends the block.

    Rejected:

    Plan: two PRs on this issue.

    1. PR 1, ci/windows-adoption-suites:
      • tests-windows installs git-filter-repo 2.47.0 and runs the whole suite, as now;
      • the comments that said Windows lacks it on purpose are corrected;
      • the one case above is xfail(strict=True) on Windows, naming this issue.
      • It is Part of #471.
    2. PR 2, fix/adopt-gitattributes-lf-block:
      • implements A, pinned on Linux under core.eol=crlf;
      • removes the xfail;
      • if it is small, makes the 11 tests whose gh or git-filter-repo stub is a #! script runnable on Windows. Today these ordinary failure paths never run there: gh refusing after the push, and git filter-repo failing.
      • Closes #471.

    The 34 skips, apart from those 11:

    Timing, for Brett's choice (the suites on every PR, or a workflow_dispatch run before the tag):

    • Only 178 tests are new to Windows. The other 1553 in these files already run there. They add about 8 to 11 minutes: 2.8 s per gated test, which Linux's with/without difference (599.6 s against 349.1 s) confirms.

    • For scale, the release dry run on main d6df36b (run 38309655530, all green) took this much pytest time per job:

      job pytest time passed skipped
      tests 11m52s 5171 10
      tests-macos 36m51s 5159 22
      tests-windows 1h07m56s 4692 489

    One note for the release gate. tests.yml's concurrency group is the workflow plus the ref, with cancel-in-progress: true. A workflow_dispatch on main therefore cancels the last landing's Linux push run, and the next landing cancels it. Run the release commit's three-OS check on a throwaway branch at that commit, as the dry run did: ci/v1.0.0-dry-run-d6df36b, since deleted.

  4. 5 remaining items

  5. added 2 commits that reference this issue on Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions