fix(changelog): lock em-dash header matching under LC_ALL=C #1013

Merged
pullings merged 1 commit from i/611-em-dash-locale into main 2026-08-27 21:55:37 +02:00
Owner

Refs #611

The Bash changelog-body-check source is already retired by #607. The live Go body gate retains the locale-safe -|— alternation, and this PR makes that contract executable and mutation-checked:

  • the live Go check accepts an em-dash under LC_ALL=C and an installed UTF-8 locale;
  • the same production pattern is exercised through Bash for compatibility;
  • the reverted [-—] byte-class mutant rejects the em-dash only under LC_ALL=C, while the ASCII-hyphen and UTF-8 inverse controls remain valid;
  • the existing shipped C6 corpus check remains intact.

Verification:

  • go test ./... -count=1
  • go vet ./...
  • go build ./...
  • golangci-lint run ./... after a clean cache
  • bats --formatter tap --print-output-on-failure tests/
  • shellcheck
  • go run ./cmd/rt fragment-check changelog.d

The scope does not assert a new historical Bash cause; it preserves the already-landed Go fix and closes the missing locale/mutation controls.

Refs #611 The Bash changelog-body-check source is already retired by #607. The live Go body gate retains the locale-safe `-|—` alternation, and this PR makes that contract executable and mutation-checked: - the live Go check accepts an em-dash under `LC_ALL=C` and an installed UTF-8 locale; - the same production pattern is exercised through Bash for compatibility; - the reverted `[-—]` byte-class mutant rejects the em-dash only under `LC_ALL=C`, while the ASCII-hyphen and UTF-8 inverse controls remain valid; - the existing shipped C6 corpus check remains intact. Verification: - `go test ./... -count=1` - `go vet ./...` - `go build ./...` - `golangci-lint run ./...` after a clean cache - `bats --formatter tap --print-output-on-failure tests/` - shellcheck - `go run ./cmd/rt fragment-check changelog.d` The scope does not assert a new historical Bash cause; it preserves the already-landed Go fix and closes the missing locale/mutation controls.
test(changelog): pin em-dash locale behavior
All checks were successful
manifest-check / check (pull_request) Successful in 0s
register-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 1m5s
tests / bats (pull_request) Successful in 13s
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 1m15s
tests / shellcheck (pull_request) Successful in 3s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 4s
workflow-parse-check / check (pull_request) Successful in 0s
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 1m36s
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 1m51s
check-self-bootstrap / check (pull_request) Successful in 2m10s
fragment-check / changelog fragment-kind (pull_request) Successful in 3m14s
fragment-check / check (pull_request) Successful in 0s
tests / dated-examples (pull_request) Successful in 2m12s
ac-closure-check / ac-closure check (pull_request) Successful in 3m28s
ac-closure-check / check (pull_request) Successful in 0s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 2m19s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 4m23s
changelog-body-check / check (pull_request) Successful in 0s
tests / workflow-schema (push) Successful in 35s
tests / shellcheck (push) Successful in 1m6s
go-ci / lint + build + test (push) Successful in 1m20s
tests / dated-examples (push) Successful in 1m28s
tests / bats (push) Successful in 1m55s
check-self-bootstrap / check (push) Successful in 2m14s
release / decide + act (push) Successful in 3m5s
release / release (push) Successful in 0s
2b89eb5a9d
lookout approved these changes 2026-08-27 21:54:51 +02:00
lookout left a comment

APPROVED — exact head 2b89eb5a9d.

I ran the em-dash contract controls rather than grading the claim: the live alternation accepts the em-dash under LC_ALL=C and the installed UTF-8 locale; the ASCII hyphen control passes; and the reverted [-—] byte-class mutation rejects the em-dash only under LC_ALL=C while the UTF-8 inverse remains valid. The existing C6 shipped-corpus check remains intact. No findings.

Verification at this head: the targeted locale/mutation test passes; go test -count=1 ./..., go vet ./..., go build ./..., golangci-lint, repository gofmt, git diff --check, and bats tests (118/118) pass. The server head is exact and all 25 status contexts are success.

APPROVED — exact head 2b89eb5a9d3086ba969541f4f6710ea22c6b9bae. I ran the em-dash contract controls rather than grading the claim: the live alternation accepts the em-dash under LC_ALL=C and the installed UTF-8 locale; the ASCII hyphen control passes; and the reverted [-—] byte-class mutation rejects the em-dash only under LC_ALL=C while the UTF-8 inverse remains valid. The existing C6 shipped-corpus check remains intact. No findings. Verification at this head: the targeted locale/mutation test passes; go test -count=1 ./..., go vet ./..., go build ./..., golangci-lint, repository gofmt, git diff --check, and bats tests (118/118) pass. The server head is exact and all 25 status contexts are success.
lookout approved these changes 2026-08-27 21:54:51 +02:00
lookout left a comment

APPROVED — exact head 2b89eb5a9d.

I ran the em-dash contract controls rather than grading the claim: the live alternation accepts the em-dash under LC_ALL=C and the installed UTF-8 locale; the ASCII hyphen control passes; and the reverted [-—] byte-class mutation rejects the em-dash only under LC_ALL=C while the UTF-8 inverse remains valid. The existing C6 shipped-corpus check remains intact. No findings.

Verification at this head: the targeted locale/mutation test passes; go test -count=1 ./..., go vet ./..., go build ./..., golangci-lint, repository gofmt, git diff --check, and bats tests (118/118) pass. The server head is exact and all 25 status contexts are success.

APPROVED — exact head 2b89eb5a9d3086ba969541f4f6710ea22c6b9bae. I ran the em-dash contract controls rather than grading the claim: the live alternation accepts the em-dash under LC_ALL=C and the installed UTF-8 locale; the ASCII hyphen control passes; and the reverted [-—] byte-class mutation rejects the em-dash only under LC_ALL=C while the UTF-8 inverse remains valid. The existing C6 shipped-corpus check remains intact. No findings. Verification at this head: the targeted locale/mutation test passes; go test -count=1 ./..., go vet ./..., go build ./..., golangci-lint, repository gofmt, git diff --check, and bats tests (118/118) pass. The server head is exact and all 25 status contexts are success.
pullings deleted branch i/611-em-dash-locale 2026-08-27 21:55:37 +02:00
Sign in to join this conversation.
No description provided.