gitpush.sh: three remaining sites parse git's QUOTED path output as usable paths
SCOPE CORRECTED 2026-08-19 - TWO OF THE FIVE ARE FIXED (gitpush v4.34, a80b65a), AND THE ROW'S ORIGINAL CLASS LABEL WAS WRONG. Read this section first; the original text below is kept for the reasoning, not the scope. **THREE SITES REMAIN OPEN**, all genuine silent skips, all needing their own fixture: :354 (was :483) the GENERATED .gitpush-pre.sh quick-mode template - CHANGED | grep -E '\.(ts|tsx)$' then unquoted 'pnpm lint $TS_FILES'. An accented .tsx is silently not linted. SHIPS INTO OTHER REPOS, so fixing it here does not fix deployed copies - that is the hard part of this one. :509 (was :1220) nested-Next detection - 'git ls-files "*package.json"' piped into grep -q '"next"' "$_np"; a quoted path cannot be opened, so a nested Next app under an accented directory is not detected and the unversioned-app abort does not fire. :1142 (was :1116) _md_only_fileset - a quoted path defeats extension anchoring, so an accented file can misclassify a push as DOCS-only, selecting a different trailer path. I could not exercise the template or a website repo from sh.git; that is why these three stay filed rather than fixed. **CLOSED BY v4.34** (both, deliberately in one change): :1350 (was :1324) - **THIS WAS BLOCKING, NOT A SILENT SKIP.** bin-lezama-cc's triage correction, reproduced on venus. It appends the QUOTED LITERAL to ONLY_PATHS_ARR, echoes 'STRICT: auto-staging bumped file: <mangled>', and feeds it to the :1590 guard where -e is FALSE and ls-files --error-unmatch FAILS (both measured), so the run exits 1 naming a string the operator never typed and cannot correct. The v4.33 sites rejected the OPERATOR'S input; this rejected the SCRIPT'S OWN, then advised 'pass paths relative to the repo root' - advice for a mistake nobody made. Reachable on any strict website repo where sitebump touches a file under an accented directory. :1568 (was :1542) - the genuine silent skip, twelve lines away. **WHY TOGETHER, and this is the reusable part: both consume the same 'git diff --name-only', so fixing ONLY :1568's anchor would have PROMOTED a silent skip into :1350's blocking failure** - the freed path would reach the guard still quoted. quotePath=false on the SOURCE command fixes both; patching the anchor alone is the trap. **THE LABEL ERROR IS THE FINDING, and it is why this row is worth reading after it closes.** I filed all five as 'all five fail SILENTLY - a skip, not a refusal' and used exactly that property to justify NOT fixing them in v4.33. It was wrong for :1350, which was the most severe site in the file. A triage CLASS asserted a shared property across five sites from one reading; a fixture per site would have caught it immediately. **When a class label is load-bearing in a fix-vs-defer decision, it needs the same evidence as the finding it defers.** Related: the search key for this whole defect is a SHAPE - 'any regex anchored to end-of-path applied to unquoted git output' - not the grep -qxF idiom, which is why :1568 was invisible to the idiom sweep. ===== ORIGINAL FILING BELOW (scope superseded above) ===== Follow-on to gitpush.sh v4.33 (which fixed the 3 BLOCKING compare sites + the 4 display sites). Git QUOTES and C-escapes non-ASCII paths in --name-only / ls-files output by default: 'héllo.txt' comes back as the literal "h\\303\\251llo.txt". Five more sites in gitpush.sh consume that output as if it were a usable path. All five fail SILENTLY - a skip, not a refusal - which is why they are lower priority than v4.33's :1566 but higher risk of going unnoticed. SITES, with what each one actually does wrong: 1. :1324 sitebump auto-stage. Reads 'git diff --name-only' into _bumped, compares each against ONLY_PATHS_ARR, then APPENDS to ONLY_PATHS_ARR - which is later used as a git pathspec. A quoted entry fails the compare AND is then handed to git add as a path that matches nothing. An accented version file is silently not auto-staged. 2. :1542 version-file auto-stage. Pipes --name-only through grep -E '(^|/)package\\.json$'. A quoted path ends with a double-quote, so the $ anchor never matches: a package.json under an accented DIRECTORY is silently skipped. Note this one is an ANCHOR failure, not a compare failure - the same cause with a different shape, so a grep for the compare idiom will not find it. 3. :1116 _md_only_fileset. Feeds the markdown-only classifier; a quoted path defeats the same kind of extension anchoring, so an accented file can misclassify a push as DOCS-only (which selects a different trailer path). 4. :483 the GENERATED .gitpush-pre.sh quick-mode template. CHANGED | grep -E '\\.(ts|tsx)$' then 'pnpm lint $TS_FILES' - anchor fails on a quoted path, and the expansion is unquoted besides. An accented .tsx is silently not linted. This one ships INTO other repos, so fixing it here does not fix deployed copies. 5. :1220 nested-Next detection. 'git ls-files "*package.json"' piped into grep -q '"next"' "$_np" - a quoted path cannot be opened, so a nested Next app under an accented directory is not detected and the abort that exists to prevent pushing an unversioned app does not fire. FIX: '-c core.quotePath=false' on the git command at each site (or -z with a NUL-safe read where the value is re-fed as a pathspec). Sites 4 and 5 need their own verification - I could not exercise the template or a website repo from sh.git. WHY NOT SWEPT WITH v4.33: gitpush.sh gates every push on three hosts. The three fixed sites were measured, reproduced on two hosts, and BLOCKING; these five are silent skips needing per-site fixtures, several outside this repo. Fixing what was measured and filing what was not is the deliberate split. EXPOSURE IS REAL AND CURRENT: ayudarg-com-ar carries 18 accented tracked paths on both venus and whey (mostly screenshots under 'docs/Capturas AyudArg/'). LEZAMA IS STRUCTURALLY EXEMPT (GCABA/movilba-only, its repos ASCII throughout). COORDINATE WITH MSG-109 ('gitpush.sh strict-mode: detect staged deletions in ONLY_PATHS and commit them') - it edits the SAME staged-deletion logic v4.33 just touched. Whoever takes MSG-109 should land with this rather than making a third pass over these lines, and MSG-109's own repro should be re-checked against a non-ASCII path: if it was ever reproduced with one, the cause may have been this encoding defect rather than what that row states. PROVENANCE: parsed-half defect found by bin-whey-cc 2026-08-19 and measured on whey; reproduced on venus; the wider 9-site census and this 5-site residue are mine. --- AMENDED 2026-08-19 after bin-lezama-cc + bin-whey-cc discriminated MSG-109 --- MSG-109 ROUTING SUPERSEDED. My original text said to LAND WITH MSG-109; that is wrong. MSG-109 ('gitpush.sh strict-mode: silently drops staged deletions in ONLY_PATHS') IS THIS DEFECT WEARING ANOTHER NAME, and it closes into the v4.33 fix (commit 6afe959), not into this row and not alongside it. - MSG-109 created 2026-06-26. The code that detects and carries staged deletions in ONLY_PATHS landed 2026-07-31, commit 31ee6ef, gitpush.sh v4.14 (git log -L on :1469). The row predates the code it appears to contradict by five weeks. - Verified on whey at 933dfca, not inferred: for a PLAIN ASCII staged deletion, :1566's grep MATCHES, the guard passes, :1577 skips the redundant add, and the deletion IS committed. MSG-109's stated symptom does not reproduce on ASCII. - So the only surviving instance of that symptom was the non-ASCII path, fixed in v4.33. Merging the two rows would have manufactured a fix for a defect that no longer exists while closing one that does. bin-whey-cc holds MSG-109 annotated and open pending this; closure is theirs to make, referencing 6afe959. STRUCTURAL GAP THAT SURVIVES THE FIX (bin-lezama-cc, and it is the more durable finding): A STAGED DELETION LEAVES THE INDEX REGARDLESS OF ENCODING, so 'ls-files --error-unmatch' fails for the ASCII row too - visible in their control row, the one easy to skip as boring. That grep is therefore the SOLE SURVIVING PREDICATE behind EVERY staged deletion, not only the broken case. quotePath=false restores the symptom-free state and leaves a single unbacked predicate gating the whole deletion path - so the encoding bug was the visible symptom of a missing second check, and repairing it makes the structural gap HARDER TO SEE, not smaller. Whoever next edits :1566 should decide deliberately whether one predicate is enough there rather than inheriting that by default. Tracked here because this row is where the next reader of these lines will land. **THE THREE REMAINING SITES ARE CLASSIFIED BY READING, NOT MEASURED - TREAT 'SILENT' AS UNVERIFIED (added 2026-08-19, bin-whey-cc's point).** The class split above fixes the label for :1350. It does NOT discharge the deeper error, which is that I classified ALL of them the same way: by reading the code once. :1350 was mislabelled by exactly that method, and :354 / :509 / :1142 still carry a severity produced by it. So the correct statement of this row's deferral is NOT 'three silent skips remain' - it is 'three sites remain whose severity has not been measured, and whose provisional label was produced by the method that already failed once on this same file'. WHAT THIS CHANGES FOR WHOEVER PICKS THIS UP: build the fixture FIRST and let it tell you the severity, before deciding whether the item is deferrable. Do not inherit 'silent' from this row. :354 in particular is the one to distrust - it lives in the GENERATED .gitpush-pre.sh template, so its blast radius is every repo that has ever run gitpush, and a blocking failure there would not look like this file's other instances. THE GENERAL RULE, which is the durable half: **A DEFERRAL JUSTIFIED BY A SEVERITY CLASS INHERITS EVERY MISLABEL IN THAT CLASS.** Verify the severity of the items you are DEFERRING, not only of the ones you are fixing - the deferred ones are precisely where nobody will look again, because the row says they are safe to leave.
Activity
-
was: Follow-on to gitpush.sh v4.33 (which fixed the 3 BLOCKING compare sites + the 4 display sites). Git QUOTES and C-escapes non-ASCII paths in --name-only / ls-files output by default: 'héllo.txt' comes back as the literal "h\303\251llo.txt". Five more sites in gitpush.sh consume that output as if it were a usable path. All five fail SILENTLY - a skip, not a refusal - which is why they are lower priority than v4.33's :1566 but higher risk of going unnoticed. SITES, with what each one actually does wrong: 1. :1324 sitebump auto-stage. Reads 'git diff --name-only' into _bumped, compares each against ONLY_PATHS_ARR, then APPENDS to ONLY_PATHS_ARR - which is later used as a git pathspec. A quoted entry fails the compare AND is then handed to git add as a path that matches nothing. An accented version file is silently not auto-staged. 2. :1542 version-file auto-stage. Pipes --name-only through grep -E '(^|/)package\.json$'. A quoted path ends with a double-quote, so the $ anchor never matches: a package.json under an accented DIRECTORY is silently skipped. Note this one is an ANCHOR failure, not a compare failure - the same cause with a different shape, so a grep for the compare idiom will not find it. 3. :1116 _md_only_fileset. Feeds the markdown-only classifier; a quoted path defeats the same kind of extension anchoring, so an accented file can misclassify a push as DOCS-only (which selects a different trailer path). 4. :483 the GENERATED .gitpush-pre.sh quick-mode template. CHANGED | grep -E '\.(ts|tsx)$' then 'pnpm lint $TS_FILES' - anchor fails on a quoted path, and the expansion is unquoted besides. An accented .tsx is silently not linted. This one ships INTO other repos, so fixing it here does not fix deployed copies. 5. :1220 nested-Next detection. 'git ls-files "*package.json"' piped into grep -q '"next"' "$_np" - a quoted path cannot be opened, so a nested Next app under an accented directory is not detected and the abort that exists to prevent pushing an unversioned app does not fire. FIX: '-c core.quotePath=false' on the git command at each site (or -z with a NUL-safe read where the value is re-fed as a pathspec). Sites 4 and 5 need their own verification - I could not exercise the template or a website repo from sh.git. WHY NOT SWEPT WITH v4.33: gitpush.sh gates every push on three hosts. The three fixed sites were measured, reproduced on two hosts, and BLOCKING; these five are silent skips needing per-site fixtures, several outside this repo. Fixing what was measured and filing what was not is the deliberate split. EXPOSURE IS REAL AND CURRENT: ayudarg-com-ar carries 18 accented tracked paths on both venus and whey (mostly screenshots under 'docs/Capturas AyudArg/'). LEZAMA IS STRUCTURALLY EXEMPT (GCABA/movilba-only, its repos ASCII throughout). COORDINATE WITH MSG-109 ('gitpush.sh strict-mode: detect staged deletions in ONLY_PATHS and commit them') - it edits the SAME staged-deletion logic v4.33 just touched. Whoever takes MSG-109 should land with this rather than making a third pass over these lines, and MSG-109's own repro should be re-checked against a non-ASCII path: if it was ever reproduced with one, the cause may have been this encoding defect rather than what that row states. PROVENANCE: parsed-half defect found by bin-whey-cc 2026-08-19 and measured on whey; reproduced on venus; the wider 9-site census and this 5-site residue are mine.
-
was: Follow-on to gitpush.sh v4.33 (which fixed the 3 BLOCKING compare sites + the 4 display sites). Git QUOTES and C-escapes non-ASCII paths in --name-only / ls-files output by default: 'héllo.txt' comes back as the literal "h\303\251llo.txt". Five more sites in gitpush.sh consume that output as if it were a usable path. All five fail SILENTLY - a skip, not a refusal - which is why they are lower priority than v4.33's :1566 but higher risk of going unnoticed. SITES, with what each one actually does wrong: 1. :1324 sitebump auto-stage. Reads 'git diff --name-only' into _bumped, compares each against ONLY_PATHS_ARR, then APPENDS to ONLY_PATHS_ARR - which is later used as a git pathspec. A quoted entry fails the compare AND is then handed to git add as a path that matches nothing. An accented version file is silently not auto-staged. 2. :1542 version-file auto-stage. Pipes --name-only through grep -E '(^|/)package\.json$'. A quoted path ends with a double-quote, so the $ anchor never matches: a package.json under an accented DIRECTORY is silently skipped. Note this one is an ANCHOR failure, not a compare failure - the same cause with a different shape, so a grep for the compare idiom will not find it. 3. :1116 _md_only_fileset. Feeds the markdown-only classifier; a quoted path defeats the same kind of extension anchoring, so an accented file can misclassify a push as DOCS-only (which selects a different trailer path). 4. :483 the GENERATED .gitpush-pre.sh quick-mode template. CHANGED | grep -E '\.(ts|tsx)$' then 'pnpm lint $TS_FILES' - anchor fails on a quoted path, and the expansion is unquoted besides. An accented .tsx is silently not linted. This one ships INTO other repos, so fixing it here does not fix deployed copies. 5. :1220 nested-Next detection. 'git ls-files "*package.json"' piped into grep -q '"next"' "$_np" - a quoted path cannot be opened, so a nested Next app under an accented directory is not detected and the abort that exists to prevent pushing an unversioned app does not fire. FIX: '-c core.quotePath=false' on the git command at each site (or -z with a NUL-safe read where the value is re-fed as a pathspec). Sites 4 and 5 need their own verification - I could not exercise the template or a website repo from sh.git. WHY NOT SWEPT WITH v4.33: gitpush.sh gates every push on three hosts. The three fixed sites were measured, reproduced on two hosts, and BLOCKING; these five are silent skips needing per-site fixtures, several outside this repo. Fixing what was measured and filing what was not is the deliberate split. EXPOSURE IS REAL AND CURRENT: ayudarg-com-ar carries 18 accented tracked paths on both venus and whey (mostly screenshots under 'docs/Capturas AyudArg/'). LEZAMA IS STRUCTURALLY EXEMPT (GCABA/movilba-only, its repos ASCII throughout). COORDINATE WITH MSG-109 ('gitpush.sh strict-mode: detect staged deletions in ONLY_PATHS and commit them') - it edits the SAME staged-deletion logic v4.33 just touched. Whoever takes MSG-109 should land with this rather than making a third pass over these lines, and MSG-109's own repro should be re-checked against a non-ASCII path: if it was ever reproduced with one, the cause may have been this encoding defect rather than what that row states. PROVENANCE: parsed-half defect found by bin-whey-cc 2026-08-19 and measured on whey; reproduced on venus; the wider 9-site census and this 5-site residue are mine. --- AMENDED 2026-08-19 after bin-lezama-cc + bin-whey-cc discriminated MSG-109 --- MSG-109 ROUTING SUPERSEDED. My original text said to LAND WITH MSG-109; that is wrong. MSG-109 ('gitpush.sh strict-mode: silently drops staged deletions in ONLY_PATHS') IS THIS DEFECT WEARING ANOTHER NAME, and it closes into the v4.33 fix (commit 6afe959), not into this row and not alongside it. - MSG-109 created 2026-06-26. The code that detects and carries staged deletions in ONLY_PATHS landed 2026-07-31, commit 31ee6ef, gitpush.sh v4.14 (git log -L on :1469). The row predates the code it appears to contradict by five weeks. - Verified on whey at 933dfca, not inferred: for a PLAIN ASCII staged deletion, :1566's grep MATCHES, the guard passes, :1577 skips the redundant add, and the deletion IS committed. MSG-109's stated symptom does not reproduce on ASCII. - So the only surviving instance of that symptom was the non-ASCII path, fixed in v4.33. Merging the two rows would have manufactured a fix for a defect that no longer exists while closing one that does. bin-whey-cc holds MSG-109 annotated and open pending this; closure is theirs to make, referencing 6afe959. STRUCTURAL GAP THAT SURVIVES THE FIX (bin-lezama-cc, and it is the more durable finding): A STAGED DELETION LEAVES THE INDEX REGARDLESS OF ENCODING, so 'ls-files --error-unmatch' fails for the ASCII row too - visible in their control row, the one easy to skip as boring. That grep is therefore the SOLE SURVIVING PREDICATE behind EVERY staged deletion, not only the broken case. quotePath=false restores the symptom-free state and leaves a single unbacked predicate gating the whole deletion path - so the encoding bug was the visible symptom of a missing second check, and repairing it makes the structural gap HARDER TO SEE, not smaller. Whoever next edits :1566 should decide deliberately whether one predicate is enough there rather than inheriting that by default. Tracked here because this row is where the next reader of these lines will land.
-
was: SCOPE CORRECTED 2026-08-19 - TWO OF THE FIVE ARE FIXED (gitpush v4.34, a80b65a), AND THE ROW'S ORIGINAL CLASS LABEL WAS WRONG. Read this section first; the original text below is kept for the reasoning, not the scope. **THREE SITES REMAIN OPEN**, all genuine silent skips, all needing their own fixture: :354 (was :483) the GENERATED .gitpush-pre.sh quick-mode template - CHANGED | grep -E '\.(ts|tsx)$' then unquoted 'pnpm lint $TS_FILES'. An accented .tsx is silently not linted. SHIPS INTO OTHER REPOS, so fixing it here does not fix deployed copies - that is the hard part of this one. :509 (was :1220) nested-Next detection - 'git ls-files "*package.json"' piped into grep -q '"next"' "$_np"; a quoted path cannot be opened, so a nested Next app under an accented directory is not detected and the unversioned-app abort does not fire. :1142 (was :1116) _md_only_fileset - a quoted path defeats extension anchoring, so an accented file can misclassify a push as DOCS-only, selecting a different trailer path. I could not exercise the template or a website repo from sh.git; that is why these three stay filed rather than fixed. **CLOSED BY v4.34** (both, deliberately in one change): :1350 (was :1324) - **THIS WAS BLOCKING, NOT A SILENT SKIP.** bin-lezama-cc's triage correction, reproduced on venus. It appends the QUOTED LITERAL to ONLY_PATHS_ARR, echoes 'STRICT: auto-staging bumped file: <mangled>', and feeds it to the :1590 guard where -e is FALSE and ls-files --error-unmatch FAILS (both measured), so the run exits 1 naming a string the operator never typed and cannot correct. The v4.33 sites rejected the OPERATOR'S input; this rejected the SCRIPT'S OWN, then advised 'pass paths relative to the repo root' - advice for a mistake nobody made. Reachable on any strict website repo where sitebump touches a file under an accented directory. :1568 (was :1542) - the genuine silent skip, twelve lines away. **WHY TOGETHER, and this is the reusable part: both consume the same 'git diff --name-only', so fixing ONLY :1568's anchor would have PROMOTED a silent skip into :1350's blocking failure** - the freed path would reach the guard still quoted. quotePath=false on the SOURCE command fixes both; patching the anchor alone is the trap. **THE LABEL ERROR IS THE FINDING, and it is why this row is worth reading after it closes.** I filed all five as 'all five fail SILENTLY - a skip, not a refusal' and used exactly that property to justify NOT fixing them in v4.33. It was wrong for :1350, which was the most severe site in the file. A triage CLASS asserted a shared property across five sites from one reading; a fixture per site would have caught it immediately. **When a class label is load-bearing in a fix-vs-defer decision, it needs the same evidence as the finding it defers.** Related: the search key for this whole defect is a SHAPE - 'any regex anchored to end-of-path applied to unquoted git output' - not the grep -qxF idiom, which is why :1568 was invisible to the idiom sweep. ===== ORIGINAL FILING BELOW (scope superseded above) =====
-
gitpush.sh: three remaining sites parse git's QUOTED path output as usable paths
-
was: SCOPE CORRECTED 2026-08-19 - TWO OF THE FIVE ARE FIXED (gitpush v4.34, a80b65a), AND THE ROW'S ORIGINAL CLASS LABEL WAS WRONG. Read this section first; the original text below is kept for the reasoning, not the scope. **THREE SITES REMAIN OPEN**, all genuine silent skips, all needing their own fixture: :354 (was :483) the GENERATED .gitpush-pre.sh quick-mode template - CHANGED | grep -E '\.(ts|tsx)$' then unquoted 'pnpm lint $TS_FILES'. An accented .tsx is silently not linted. SHIPS INTO OTHER REPOS, so fixing it here does not fix deployed copies - that is the hard part of this one. :509 (was :1220) nested-Next detection - 'git ls-files "*package.json"' piped into grep -q '"next"' "$_np"; a quoted path cannot be opened, so a nested Next app under an accented directory is not detected and the unversioned-app abort does not fire. :1142 (was :1116) _md_only_fileset - a quoted path defeats extension anchoring, so an accented file can misclassify a push as DOCS-only, selecting a different trailer path. I could not exercise the template or a website repo from sh.git; that is why these three stay filed rather than fixed. **CLOSED BY v4.34** (both, deliberately in one change): :1350 (was :1324) - **THIS WAS BLOCKING, NOT A SILENT SKIP.** bin-lezama-cc's triage correction, reproduced on venus. It appends the QUOTED LITERAL to ONLY_PATHS_ARR, echoes 'STRICT: auto-staging bumped file: <mangled>', and feeds it to the :1590 guard where -e is FALSE and ls-files --error-unmatch FAILS (both measured), so the run exits 1 naming a string the operator never typed and cannot correct. The v4.33 sites rejected the OPERATOR'S input; this rejected the SCRIPT'S OWN, then advised 'pass paths relative to the repo root' - advice for a mistake nobody made. Reachable on any strict website repo where sitebump touches a file under an accented directory. :1568 (was :1542) - the genuine silent skip, twelve lines away. **WHY TOGETHER, and this is the reusable part: both consume the same 'git diff --name-only', so fixing ONLY :1568's anchor would have PROMOTED a silent skip into :1350's blocking failure** - the freed path would reach the guard still quoted. quotePath=false on the SOURCE command fixes both; patching the anchor alone is the trap. **THE LABEL ERROR IS THE FINDING, and it is why this row is worth reading after it closes.** I filed all five as 'all five fail SILENTLY - a skip, not a refusal' and used exactly that property to justify NOT fixing them in v4.33. It was wrong for :1350, which was the most severe site in the file. A triage CLASS asserted a shared property across five sites from one reading; a fixture per site would have caught it immediately. **When a class label is load-bearing in a fix-vs-defer decision, it needs the same evidence as the finding it defers.** Related: the search key for this whole defect is a SHAPE - 'any regex anchored to end-of-path applied to unquoted git output' - not the grep -qxF idiom, which is why :1568 was invisible to the idiom sweep. ===== ORIGINAL FILING BELOW (scope superseded above) ===== Follow-on to gitpush.sh v4.33 (which fixed the 3 BLOCKING compare sites + the 4 display sites). Git QUOTES and C-escapes non-ASCII paths in --name-only / ls-files output by default: 'héllo.txt' comes back as the literal "h\\303\\251llo.txt". Five more sites in gitpush.sh consume that output as if it were a usable path. All five fail SILENTLY - a skip, not a refusal - which is why they are lower priority than v4.33's :1566 but higher risk of going unnoticed. SITES, with what each one actually does wrong: 1. :1324 sitebump auto-stage. Reads 'git diff --name-only' into _bumped, compares each against ONLY_PATHS_ARR, then APPENDS to ONLY_PATHS_ARR - which is later used as a git pathspec. A quoted entry fails the compare AND is then handed to git add as a path that matches nothing. An accented version file is silently not auto-staged. 2. :1542 version-file auto-stage. Pipes --name-only through grep -E '(^|/)package\\.json$'. A quoted path ends with a double-quote, so the $ anchor never matches: a package.json under an accented DIRECTORY is silently skipped. Note this one is an ANCHOR failure, not a compare failure - the same cause with a different shape, so a grep for the compare idiom will not find it. 3. :1116 _md_only_fileset. Feeds the markdown-only classifier; a quoted path defeats the same kind of extension anchoring, so an accented file can misclassify a push as DOCS-only (which selects a different trailer path). 4. :483 the GENERATED .gitpush-pre.sh quick-mode template. CHANGED | grep -E '\\.(ts|tsx)$' then 'pnpm lint $TS_FILES' - anchor fails on a quoted path, and the expansion is unquoted besides. An accented .tsx is silently not linted. This one ships INTO other repos, so fixing it here does not fix deployed copies. 5. :1220 nested-Next detection. 'git ls-files "*package.json"' piped into grep -q '"next"' "$_np" - a quoted path cannot be opened, so a nested Next app under an accented directory is not detected and the abort that exists to prevent pushing an unversioned app does not fire. FIX: '-c core.quotePath=false' on the git command at each site (or -z with a NUL-safe read where the value is re-fed as a pathspec). Sites 4 and 5 need their own verification - I could not exercise the template or a website repo from sh.git. WHY NOT SWEPT WITH v4.33: gitpush.sh gates every push on three hosts. The three fixed sites were measured, reproduced on two hosts, and BLOCKING; these five are silent skips needing per-site fixtures, several outside this repo. Fixing what was measured and filing what was not is the deliberate split. EXPOSURE IS REAL AND CURRENT: ayudarg-com-ar carries 18 accented tracked paths on both venus and whey (mostly screenshots under 'docs/Capturas AyudArg/'). LEZAMA IS STRUCTURALLY EXEMPT (GCABA/movilba-only, its repos ASCII throughout). COORDINATE WITH MSG-109 ('gitpush.sh strict-mode: detect staged deletions in ONLY_PATHS and commit them') - it edits the SAME staged-deletion logic v4.33 just touched. Whoever takes MSG-109 should land with this rather than making a third pass over these lines, and MSG-109's own repro should be re-checked against a non-ASCII path: if it was ever reproduced with one, the cause may have been this encoding defect rather than what that row states. PROVENANCE: parsed-half defect found by bin-whey-cc 2026-08-19 and measured on whey; reproduced on venus; the wider 9-site census and this 5-site residue are mine. --- AMENDED 2026-08-19 after bin-lezama-cc + bin-whey-cc discriminated MSG-109 --- MSG-109 ROUTING SUPERSEDED. My original text said to LAND WITH MSG-109; that is wrong. MSG-109 ('gitpush.sh strict-mode: silently drops staged deletions in ONLY_PATHS') IS THIS DEFECT WEARING ANOTHER NAME, and it closes into the v4.33 fix (commit 6afe959), not into this row and not alongside it. - MSG-109 created 2026-06-26. The code that detects and carries staged deletions in ONLY_PATHS landed 2026-07-31, commit 31ee6ef, gitpush.sh v4.14 (git log -L on :1469). The row predates the code it appears to contradict by five weeks. - Verified on whey at 933dfca, not inferred: for a PLAIN ASCII staged deletion, :1566's grep MATCHES, the guard passes, :1577 skips the redundant add, and the deletion IS committed. MSG-109's stated symptom does not reproduce on ASCII. - So the only surviving instance of that symptom was the non-ASCII path, fixed in v4.33. Merging the two rows would have manufactured a fix for a defect that no longer exists while closing one that does. bin-whey-cc holds MSG-109 annotated and open pending this; closure is theirs to make, referencing 6afe959. STRUCTURAL GAP THAT SURVIVES THE FIX (bin-lezama-cc, and it is the more durable finding): A STAGED DELETION LEAVES THE INDEX REGARDLESS OF ENCODING, so 'ls-files --error-unmatch' fails for the ASCII row too - visible in their control row, the one easy to skip as boring. That grep is therefore the SOLE SURVIVING PREDICATE behind EVERY staged deletion, not only the broken case. quotePath=false restores the symptom-free state and leaves a single unbacked predicate gating the whole deletion path - so the encoding bug was the visible symptom of a missing second check, and repairing it makes the structural gap HARDER TO SEE, not smaller. Whoever next edits :1566 should decide deliberately whether one predicate is enough there rather than inheriting that by default. Tracked here because this row is where the next reader of these lines will land.
-
MEASURED DISPOSITION 2026-10-05 (bin-venus-cc). All three remaining sites are gone from sh.git, but by THREE DIFFERENT routes, and the line numbers in this row are dead - gitpush.sh is 427 lines at v5.3, split into gitpush-core.sh, down from the 2408-line monolith this row was filed against. SITE :354 (generated .gitpush-pre.sh quick-mode template) and SITE :1142 (_md_only_fileset): DELETED, not fixed, by 7cf82ee (gitpush.sh v5.0, 2026-09-20, "trim 2810 -> 308 lines", author Elazar Pimentel / bin-whey-cc). Confirmed in the deleting diff itself - `git show 7cf82ee -- gitpush.sh` carries the removal of the exact lines this row names: `- TS_FILES=$(echo "$CHANGED" | grep -E '\.(ts|tsx)$' | sort -u | grep -v '^$')` and `- pnpm lint $TS_FILES || exit 1`. gitpush.sh no longer GENERATES a .gitpush-pre.sh at all; it only runs one that already exists (:243-256). SITE :509 (nested-Next detection): RELOCATED AND GENUINELY FIXED, by redesign, in gitpushnextjs.sh:114-140 (v1.1). The `git ls-files "*package.json"` glob piped into grep is gone entirely. The path is now DECLARED - gpn_pkg_path() reads PKG_PATH= from .sitebump, defaults to `package.json`, and the Next test greps a properly quoted "$PKG". No git output, no end-anchored regex, no unquoted path, so the defect class cannot reach it. The comment at :115-118 names the root-only bug it replaced, so this was deliberate, not luck. SHAPE SEARCH, which is what this row is actually about ("any regex anchored to end-of-path applied to unquoted git output"): EMPTY across gitpush.sh, gitpush-core.sh, gitpushnextjs.sh, gitpushrepo.sh, gitpushsimple.sh, gitpush-locked.sh, gitpushvercelstatus.sh. Run with `rg -uuu -a` because bare grep on this host is ugrep and skips gitignored/binary files at rc=0 - the only hits anywhere in the tree are inside .git reflog commit MESSAGES. The surviving git-output readers are all safe: gitpush.sh:168 `ls-files --cached -z` (NUL), :192 `--error-unmatch -- "$p"` (quoted), :394-396 already `-c core.quotePath=false`. ONE LIVE SIBLING FORCED RED RATHER THAN ASSERTED CLEAN. gitpushrepo.sh:229-231 compares two `git status --porcelain` streams via `grep -vxF -f` to list files left behind by --only. Tested on a throwaway repo with a space-bearing path `src/a file.ts` (extracted logic, because the real script pushes to origin and is unreachable in place). Both streams render it QUOTED - ` M "src/a file.ts"` - so the trigger condition was really present, and the compare still held: stray list = src/plain.ts + outside.txt, the --only path did not leak. GREEN, measured. THE DISTINCTION THIS ROW MISSED, and the reusable part: quoting breaks an END-ANCHORED REGEX (the closing quote trails the extension, so `"...ts"` fails `\.ts$`) but NOT a SET COMPARE of two identically-quoted streams, because the quoting cancels on both sides. That is precisely why :354 and :1142 were bugs and gitpushrepo.sh:229 is not. A shape search for this defect class must target the anchor, not every consumer of git output. COVERAGE / NOT EXERCISED: this verdict covers sh.git's gitpush family only. Deployed .gitpush-pre.sh copies in OTHER repos (terra/mars/pluto/enamel Next.js lanes) were NOT inspected - no reach from this seat and they are not sh.git. Any copy generated before 7cf82ee still carries the unquoted `pnpm lint $TS_FILES`. This row flagged that from the start ("SHIPS INTO OTHER REPOS, so fixing it here does not fix deployed copies"). The generator being gone means no NEW bad copy can be produced here; it does not clean the existing ones. That residual belongs to those repos' coding seats, not to this row.
-
Closed, not cancelled, and the distinction is deliberate: the row's CONDITION is verified satisfied in the live tree, not merely orphaned. One of the three sites (nested-Next detection) was genuinely repaired by redesign in gitpushnextjs.sh v1.1 - PKG_PATH is now declared in .sitebump instead of globbed out of git ls-files. The other two went with the v5.0 monolith trim (7cf82ee); that half is obsoleted, not fixed, and the verified event above says so site by site so this close cannot be read as a repair of all three. Shape search over the whole post-split gitpush family is empty, and the one live sibling that reads git path output for a decision (gitpushrepo.sh:229-231) was forced against a space-bearing path and held green. Residual named and NOT closed by this row: .gitpush-pre.sh copies already deployed in other repos still carry the unquoted 'pnpm lint $TS_FILES'; unreachable from this seat, belongs to those repos' coding seats.