Context
Both defects were identified by #3180 (now closed as superseded — see its closing comment). #3202 fixes them in docs-hygiene:audit-noise only. Each producer carries its own copy of the affected code, so the same defects are live in the siblings.
Known producers with an emit-findings.sh:
Defect 1 — esc() is not idempotent
function esc(s) { gsub(/\|/, "\\|", s); return s }
A pipe the source already escaped gets double-escaped: a \| b → a \\| b. GFM reads that as a literal backslash followed by a live delimiter, so the row splits and the fix action misreads it — a well-formed-looking row with the wrong cells.
Confirmed reproducible, and this repo writes literal \| in its own markdown tables, so it is reachable rather than theoretical:
$ echo 'a \| b' | awk '{ s=$0; gsub(/\|/, "\\|", s); print s }'
a \\| b
The fix applied in #3202 parks already-escaped pipes on a sentinel and restores them single-escaped.
Defect 2 — repo-root resolution has three spellings
git rev-parse --show-toplevel can answer with a different path spelling than the one the caller used to reach the same directory. #3180 reports the concrete case on Git Bash: git answers C:/Users/u/AppData/Local/Temp/t/repo while the caller is at /tmp/t/repo.
Consequences differ per producer and should be checked individually rather than assumed:
#3180's fix derives the primary anchor from the caller's own pwd minus git's reported prefix.
What to do
Related
Context
Both defects were identified by #3180 (now closed as superseded — see its closing comment). #3202 fixes them in
docs-hygiene:audit-noiseonly. Each producer carries its own copy of the affected code, so the same defects are live in the siblings.Known producers with an
emit-findings.sh:plugins/ai-slop/skills/audit/scripts/emit-findings.shplugins/claude-config/skills/audit-instructions/scripts/emit-findings.shplugins/docs-hygiene/skills/audit-noise/scripts/emit-findings.sh— fixed in fix(docs-hygiene): narrow audit-noise's negation shape to imperatives (0.21.1) #3202Defect 1 —
esc()is not idempotentA pipe the source already escaped gets double-escaped:
a \| b→a \\| b. GFM reads that as a literal backslash followed by a live delimiter, so the row splits and the fix action misreads it — a well-formed-looking row with the wrong cells.Confirmed reproducible, and this repo writes literal
\|in its own markdown tables, so it is reachable rather than theoretical:The fix applied in #3202 parks already-escaped pipes on a sentinel and restores them single-escaped.
Defect 2 — repo-root resolution has three spellings
git rev-parse --show-toplevelcan answer with a different path spelling than the one the caller used to reach the same directory. #3180 reports the concrete case on Git Bash: git answersC:/Users/u/AppData/Local/Temp/t/repowhile the caller is at/tmp/t/repo.Consequences differ per producer and should be checked individually rather than assumed:
Locationstays absolute — and nothing reports it, because an absolute path is still a well-formed cell. feat(docs-hygiene): negation-without-positive detector on audit-noise, wired to the findings relay (0.20.0) #3180 identifies this as the live behavior in the siblings.docs-hygieneproducer declines a path it cannot prove is under the root), the failure mode is instead a silently missed finding.#3180's fix derives the primary anchor from the caller's own
pwdminus git's reported prefix.What to do
esc()idempotency wherever it reproduces, with a regression test asserting an already-escaped pipe survives single-escaped and the row still parses to the right cell count.esc()and the repo-root resolution should become shared code rather than three copies — three copies is why one fix did not reach the others.Related
docs-hygiene:audit-noise.negationover-selection fix that fix(docs-hygiene): narrow audit-noise's negation shape to imperatives (0.21.1) #3202 primarily carries.