mirror of
https://github.com/stablyai/orca.git
synced 2026-10-09 08:02:35 +00:00
My LF normalization of the windows-process-tree patch broke the `git apply` repair path introduced in this PR. The two are coupled and I checked only one. Those 174 CR bytes were not editor noise. They sat on exactly the pre-image lines and nowhere else -- 107/107 in src/process.cc, 67/67 in src/process_commandline.cc, 0 on every added or context line -- because @vscode/windows-process-tree@0.8.0 ships those two sources as CRLF. Normalizing the patch made its pre-image stop matching the file it is applied against. Measured, reconstructing the true CRLF pre-image from the pre-normalization blob and applying the current LF patch: core.autocrlf plain -c core.autocrlf=input true exit 0 exit 0 input exit 0 exit 0 false exit 1 exit 0 `false` is Git's own built-in default and what "checkout as-is" selects in the Git for Windows installer -- on this box the `true` that hides it comes from the installer's system gitconfig, not from anything in the repo. There the repair throws, ensureWindowsProcessTreeCommandLinePatch reports "still reads the PEB, and repairing it ... failed", isWindowsNativeLockError does not match that text, and `pnpm install` dies with no path forward. Forcing the mode rather than `--ignore-whitespace`: both fix every cell and both leave the applied file fully LF, but `input` relaxes line endings only, so a hunk whose real content drifted is still rejected. The repair rewrites a security-relevant source file; it should stay strict about everything except the thing that is legitimately ambiguous. Not reverting the patch to CRLF: windows-process-tree-patch-contract.test.mjs (pre-existing on main) forbids CR bytes in it, and pnpm computes the same hash either way. LF plus the forced mode is the end state. The suite could not have caught this. The fixture built its pre-image from the patch itself and joined with '\n', so fixture and patch agreed by construction on any encoding -- once again a test that passes without its fix. It now emits the CRLF the real package ships, and the case runs under both autocrlf modes pinned through a temp HOME gitconfig, because the repair blinds git to the repo and so reads global config. Verified by deletion in both directions: with the flag removed the autocrlf=false case fails with the exact "still reads the PEB" dead end while autocrlf=true still passes, and with the fixture back on LF all eight cases pass with no fix present at all. Also corrected the .gitattributes comment I added last commit. It said `git apply` needs the bytes the patch was written against, which is now false -- the pinned bytes are LF and the bytes it was written against are CRLF. That is the same class of confident-and-wrong claim that produced the bad hash twice.
32 lines
1.9 KiB
Plaintext
32 lines
1.9 KiB
Plaintext
/config/scripts/create-draft-release.mjs text eol=lf
|
|
/config/scripts/orca-dev.mjs text eol=lf
|
|
/config/scripts/latest-stable-release.mjs text eol=lf
|
|
/config/scripts/publish-complete-draft-releases.mjs text eol=lf
|
|
/config/scripts/release-rc-history.mjs text eol=lf
|
|
/config/scripts/run-internal-dev-setup.mjs text eol=lf
|
|
/config/scripts/verify-cli-bin.mjs text eol=lf
|
|
/config/scripts/verify-release-required-assets.mjs text eol=lf
|
|
/skill-guides/*.md text eol=lf
|
|
/skill-stubs/*.md text eol=lf
|
|
/skills/*/SKILL.md text eol=lf
|
|
/src/cli/bundled-skill-guides.ts text eol=lf
|
|
# Bundled plugin trees are byte-hashed; CRLF checkout would break the pinned hash.
|
|
/resources/plugins/** text eol=lf
|
|
# Pin the bytes so a patch reads and diffs identically on every host. It is NOT
|
|
# what makes the hash right: pnpm hashes a patch LF-normalized, so a CRLF checkout
|
|
# cannot change it. Believing otherwise put a hand-computed raw digest in the
|
|
# lockfile twice and broke every install (#17886).
|
|
# These files are stored LF, which is not always the encoding they were written
|
|
# against -- @vscode/windows-process-tree ships CRLF sources -- so any code that
|
|
# runs `git apply` on one must force `-c core.autocrlf=input` rather than trust
|
|
# the host's setting. See config/scripts/windows-process-tree-gyp-rebuild.mjs.
|
|
/config/patches/*.patch -text
|
|
# The xterm bundle hunks also make a diff nobody can read; review the hand-written
|
|
# source patch under xterm-src/ instead. The sibling patches stay diffable.
|
|
/config/patches/@xterm__xterm@*.patch -diff
|
|
/config/patches/xterm-src/*.patch text eol=lf
|
|
# Generated wrapper fixtures: collapse them in the PR diff so they stop drowning
|
|
# the reviewable change, and pin LF because they are compared byte-for-byte.
|
|
# Not -diff: the shell diff is the review surface when a wrapper does change.
|
|
/src/main/__fixtures__/shell-wrapper-snapshots/*.txt linguist-generated=true text eol=lf
|