fix(ci): replace every em dash in tracked source with ASCII --- - #139
fix(ci): replace every em dash in tracked source with ASCII ---#139d-morrison wants to merge 1 commit into
---#139Conversation
`Check Non-Standard Characters` has been red on `main` since 2026-08-24, and every PR opened since inherits the failure (e.g. #137, whose own diff touches none of the flagged files). The caller passes no `extensions` input, so it takes the reusable workflow's default in Morrison-Lab/gha. That default is now `.qmd, .R, .md`; `.md` was not in it when the caller was written, so broadening the scope pulled in pre-existing Markdown that had never been scanned. Per this repo's own rule, fix the flagged source rather than relax the check -- scanning `.md` is wanted, since the lab convention bans non-ASCII punctuation in every tracked source file. That rationale does not stop at what CI can see, so this replaces U+2014 with the house `---` form in three groups: - the 4 files CI flagged: CLAUDE.md, .github/copilot-instructions.md, .github/prompts/quarto-review.prompt.md, .github/rulesets/README.md; - 3 tracked Markdown files the checker skips because its `ignored_dirs` hard-codes `.claude`: .claude/commands/new-chapter.md, .claude/commands/render.md, .claude/skills/reprexes/SKILL.md; - 5 files outside the checker's extension set entirely: .github/scripts/clear-changed-freezer.py, .github/workflows/copilot-setup-steps.yml, .github/workflows/preview.yml, _quarto-website.yml and qwt-reveal-toggle.html. All 62 were spaced prose dashes, so no compound hyphenation changed and no executable code changed. Every one sits in a comment or in prose, except the one in clear-changed-freezer.py, which is in that module's docstring -- a string literal, but one nothing reads programmatically. The `---` in qwt-reveal-toggle.html sits inside an HTML comment body where it cannot form `-->`. Verified three ways: gha's own checker at @v2 is clean over 17 files; a scan of every tracked file for all seven banned glyphs (em and en dashes, the four curly quotes, U+00D7) reports 0 hits over the 79 of 82 tracked files that are UTF-8 text, the other 3 being two binaries and the `macros` submodule; and the edited Python and YAML files still parse. Also corrects the caller's scope comment, which still described the pre-migration `.qmd`/`.R` behavior. Closes #138 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Claimed by this Claude Code session. Will drive it to a clean verdict. Posted by Claude Code (AI agent) --- not written by a human. |
|
|
Claude finished review — View run Reasonable line lengths, consistent with the rest of the file. This is a thoroughly clean, well-scoped, and precisely verified PR. Every factual claim in the description checked out against the actual code. Review summaryThis PR fixes the Verification performed (all claims in the PR description independently checked against the actual PR HEAD commit, not the working tree, since this checkout has
Notes (non-blocking):
No bugs, no CLAUDE.md violations, no lab-manual violations, and no hallucinated content found. VerdictReady for merge Structured Review Data (JSON){
"schema_version": "1.1",
"reviewer": "claude",
"commit_sha": "b0b28bf4a1aea8aa5089063464b29584e4033e6d",
"verdict": "CLEAN",
"findings": [],
"detailed_assessment": "Verified all 62 em-dash-to-triple-hyphen substitutions across thirteen changed files map exactly with no unintended content drift, and confirmed the checker script, YAML parsers, and HTML comment structure all remain valid post-edit.",
"holistic_assessment": "Requirement to fix the CI check at its source rather than relax it is satisfied, scope stays tightly bound to punctuation-only changes, and referenced issues 138 and 140 accurately document the regression and follow-up work."
}Reviewed commit: b0b28bf |
Fixes the
Check Non-Standard Characterscheck, red onmainsince 2026-08-24 (run 32768070308). Every PR opened since inherits the failure, which is how this surfaced: the dependabot submodule bump #137 failed (run 33280843342) over files its own diff never touches.Cause
.github/workflows/check-non-standard-chars.yamlpasses noextensionsinput, so it takes the reusable workflow's default inMorrison-Lab/gha. That default is now.qmd, .R, .md. The.mdentry was not there when the caller was written -- its comment still described the pre-migration scope, "curly quotes / en/em dashes in .qmd and .R files" -- so broadening the scope pulled in pre-existing Markdown that had never been scanned.Approach
Fix the flagged source rather than relax the check, per this repo's own
CLAUDE.md("Don't bypass CI failures ... fix the underlying issue"). Scanning.mdis wanted: the lab convention bans non-ASCII punctuation in every tracked source file.That rationale does not stop at what CI can see, so the sweep covers three groups:
CLAUDE.md,.github/copilot-instructions.md,.github/prompts/quarto-review.prompt.md,.github/rulesets/README.md.mdthe checker skips (itsignored_dirshard-codes.claude).claude/commands/new-chapter.md,.claude/commands/render.md,.claude/skills/reprexes/SKILL.md.github/scripts/clear-changed-freezer.py,.github/workflows/copilot-setup-steps.yml,.github/workflows/preview.yml,_quarto-website.yml,qwt-reveal-toggle.htmlLeaving the last two groups would make a green check read as a clean repository.
All 62 replacements are U+2014 to a spaced
---. That is the lab-wide convention rather than this repo's established practice --origin/mainhas no prior spaced triple-hyphen, so this PR is what establishes it here. Every one was a spaced prose dash, so no compound hyphenation changed and no executable code changed. The one inclear-changed-freezer.pyis in that module's docstring, which nothing reads programmatically; the one inqwt-reveal-toggle.htmlsits inside an HTML comment body where it cannot form-->.The caller's stale scope comment is corrected in the same commit. The
extensionsinput stays unset so the scope keeps tracking gha's default.Verification
@v2, run against this tree: clean over 17 files. The same script againstorigin/mainreproduces the reported28 non-standard character(s) in 4 file(s).macrossubmodule. The file count is reported so a zero is distinguishable from a scan that never ran.Follow-up
The repo has no instrument covering the files outside the checker's extension set, so the five in the third group above were found by hand and nothing stops them recurring. Filed as #140 rather than widened here, since both the extension default and the hard-coded
.claudeignore live upstream inMorrison-Lab/gha.Closes #138
🤖 Generated with Claude Code