Skip to content

docs(claude): replace em-dashes in CLAUDE.md with plain punctuation - #1262

Draft
IAmJSD wants to merge 1 commit into
LeanerCloud:mainfrom
IAmJSD:fix/issue-342
Draft

IAmJSD wants to merge 1 commit into
LeanerCloud:mainfrom
IAmJSD:fix/issue-342

Conversation

@IAmJSD

@IAmJSD IAmJSD commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

CLAUDE.md is the highest-priority instruction file for every agent session, yet it still contained em-dashes (U+2014), which the project prose rule forbids. This PR rewrites each one with a colon, comma, semicolon or a new sentence chosen to fit the surrounding prose. No other text in the file changes.

Closes #342

Em-dash count in CLAUDE.md: 15 before, 0 after. The issue reported 24, but current origin/main has 15, and the line numbers listed in the issue no longer match the file. This PR fixes every em-dash still present.

Replacements

Line Before After
15 Do NOT skip this step — it is mandatory Do NOT skip this step; it is mandatory
78 ## Issue assignment — claim before you work (MANDATORY) ## Issue assignment: claim before you work (MANDATORY)
197 (MANDATORY — even for one-line fix commits) (MANDATORY, even for one-line fix commits)
203 §Post-push CI watcher — CUDly's pre-commit job ... §Post-push CI watcher. CUDly's pre-commit job ...
220 foreground polling — the main session must stay unblocked foreground polling; the main session must stay unblocked
258 §3a — \git rebase ...` §3a: \git rebase ...`
270 unresolved — same failure mode as ... unresolved, the same failure mode as ...
301 ## PR labeling — mirror closing-issue labels (MANDATORY) ## PR labeling: mirror closing-issue labels (MANDATORY)
304 the issue it closes — \priority/*`, ...` the issue it closes: \priority/*`, ...`
324 # Guard against empty $LABELS — gh pr edit ... (shell comment in a code block) # Guard against empty $LABELS: gh pr edit ...
341 `triaged` to the PR — that would lie. `triaged` to the PR; that would lie.
344 (rare — the label set is populated ...) (rare, since the label set is populated ...)
367 ## CI/CD IAM — bootstrap vs runtime split ## CI/CD IAM: bootstrap vs runtime split
371 human** — not by the CI workflow itself. human**, not by the CI workflow itself.
388 SHOULD 403 — that's the signal ... SHOULD 403; that's the signal ...

Four headings changed (lines 78, 197, 301 and 367), so their GitHub anchor slugs change too. I ran git grep across the repo (excluding frontend/) and found no anchor links to those headings. The two Terraform comments that mention the "CI/CD IAM" bootstrap-vs-runtime split refer to it by name, and that name still matches.

En-dashes (U+2013) in ranges such as 9–15 min and 3–6 CR passes are not em-dashes. I left them unchanged.

Verification

This is a docs-only change, so there are no Go, unit or integration tests to run. Here is the evidence:

# before (origin/main)
$ git show origin/main:CLAUDE.md | python3 -c "import sys; print(sys.stdin.read().count(chr(0x2014)))"
15
# after (this branch)
$ python3 -c "print(open('CLAUDE.md',encoding='utf-8').read().count(chr(0x2014)))"
0

$ git diff --check origin/main...HEAD      # clean, no output
$ git diff --stat origin/main...HEAD
 CLAUDE.md | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

# markdownlint-cli v0.47.0 (the repo's pre-commit hook version, run from the cached
# pre-commit env without --fix, using the repo's .markdownlint.yaml)
$ markdownlint CLAUDE.md                   # rc=0 on this branch, rc=0 on origin/main

Every changed line swaps exactly one em-dash for other punctuation. I reviewed each line of the diff to confirm that nothing else changed.

Combined-tree verification. This branch was tested together with the other queued branches on a local, never-pushed tree: queue/platform @ 936996ad = origin/main a14dc8f2 plus these heads, merged in this order:

Branch Tested head
fix/issue-337 ff3420c
fix/issue-169 7d75eb5
fix/issue-342 66b221f
fix/issue-310 5e11c21
fix/issue-326 5f0ea59
fix/issue-243 365e959
fix/issue-343 6c94036
fix/issue-312 d2848a8
fix/issue-316 acd60dd
fix/issue-339 75ea9b9
fix/issue-339-commitment-type 73bdb19
fix/issue-353 5d25fcd
fix/issue-313 3156bc4
fix/issue-357 53d9e58
fix/issue-368 0ba727d
fix/issue-419 61648c9
fix/issue-111 b04c372
fix/issue-686 0ad90b7
fix/issue-674 793095d
fix/issue-1055 4ec96f1
fix/issue-559 dfa9525
fix/issue-558 034eed4
fix/issue-874 1720539
fix/issue-666 1e120da
fix/issue-668 fb26345
fix/issue-568 ce04173
fix/issue-311 e54f250
fix/issue-177 0cbb88a
fix/issue-151 c21377c
fix/issue-166 41fb77b
fix/issue-27 2d67622
fix/issue-323 69288ae
fix/issue-59 36463e8
fix/issue-43 35e4069
fix/issue-158 6f76f8a
fix/issue-104 bb00491
fix/issue-55 971ef1b
fix/issue-361 89ac220
fix/issue-120 b458719
fix/issue-36 42bac6e
fix/issue-525 57c97dd
fix/issue-712 e5bcda0
fix/issue-72 6cc63ed

fix/issue-72 and fix/issue-312 conflict on one line in internal/api/handler_dashboard.go (both change the calculateCommitmentMetrics call). The tree used #72's side with #312's validated provider variable; whichever PR merges second takes that same resolution.

Linux, Go 1.26.9, AWS_CONFIG_FILE=/dev/null AWS_SHARED_CREDENTIALS_FILE=/dev/null AWS_EC2_METADATA_DISABLED=true; Docker Postgres via testcontainers:

  • Passed at 936996ad: go build ./..., go vet ./..., go vet -tags integration ./... and the full go test -race -short -count=1 ./....
  • Static checks at 936996ad: golangci-lint v2.10.1 found 0 issues on every changed package, with and without --build-tags integration. tests/e2e is a separate module, so it was vetted under its own e2e tag. gocyclo -over 10 is silent on the changed non-test files.
  • Integration tests, every changed package, one package at a time (-tags integration -count=1, 60-minute local timeout because the VM was shared):
    • At 936996ad, these pass: internal/server, internal/credentials, internal/scheduler, internal/database/postgres/migrations, internal/purchase and internal/api.
    • internal/config passes except TestPostgresStoreDB_ResolveStaleRIExchange_ValidatesCloudCheck, which fails the same way on unmodified main (fixed by fix(config): compare resolve checked_at at the database's microsecond precision #1252).
    • These were run on the first build of this tree (26795376, same branches at earlier heads): internal/analytics, internal/auth, internal/commitmentopts, internal/database and cmd/lambda/clear-rate-limit all pass. The later fixes don't touch those packages.
  • What the combined run caught, each fixed on its own branch before this PR opened:
    • a compile break between fix/issue-104's test and fix/issue-326's httpToLambdaRequest signature change;
    • fix/issue-316 rejecting legacy-keyed plans;
    • fix/issue-120 versus main's global-filter test.
  • Secrets: git-secrets, using the repo's scripts/setup-git-secrets.sh patterns in a fresh repo with an isolated HOME, found nothing in the changed files, and a planted fake key was flagged. scripts/test-git-secrets-allowlist.sh: 137 PASS, 0 FAIL.
  • Nothing was applied to any cloud.

Out of scope

  • No em-dash guard added. The repo has no pre-commit hook or test that checks for em-dashes. The issue's acceptance criteria only ask for the count to reach 0 and don't recommend a guard, so this PR doesn't add one. If a guard is wanted, a small pygrep-style pre-commit hook scoped to ^CLAUDE\.md$ could be a follow-up.
  • Em-dashes in other files were not touched, because the issue covers only CLAUDE.md. Several other files still contain them, for example .pre-commit-config.yaml, some .github/workflows/*.yml files, docker-compose.yml, scripts/azure-smtp-setup.sh and scripts/generate-federation-iac.go.

Labels

Maintainer: please mirror the triage labels from #342 onto this PR: impact/internal, triaged, priority/p3, severity/low, urgency/eventually, effort/s, type/docs.

🤖 Generated with Claude Code

CLAUDE.md is the top-priority instruction file for agent sessions and
still carried 15 em-dashes (U+2014), which the project prose rule
forbids. Rewrite each one with a colon, comma, semicolon or a new
sentence chosen to fit the local prose. No other text changes; en-dash
ranges such as "9–15 min" are left alone.

Closes LeanerCloud#342

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@IAmJSD IAmJSD added impact/internal Team-internal only triaged Item has been triaged priority/p3 Polish / idea / may never ship severity/low Minor harm urgency/eventually No deadline effort/s Hours type/docs Documentation labels Oct 23, 2026
@coderabbitai

coderabbitai Bot commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/s Hours impact/internal Team-internal only priority/p3 Polish / idea / may never ship severity/low Minor harm triaged Item has been triaged type/docs Documentation urgency/eventually No deadline

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HYG: Replace 24 pre-existing em-dashes in CLAUDE.md (project rule) [platform part]

1 participant