style: remove em/en dashes repo-wide, add CLAUDE.md rule against them (#890)
Em dashes (—) and en dashes (–) had spread across comments, docs, tests, and a few UI strings, reading as AI-generated boilerplate rather than house style. Replaced each with punctuation matching its context: colon for explanatory clauses, comma for asides, plain hyphen for numeric/legal ranges (e.g. "21-23§"), "to"/"till" for date ranges, parentheses for paired-dash asides. messages/en.json and messages/sv.json were fixed by hand together to keep sv/en in sync. Left untouched where the dash is the functional subject rather than decorative punctuation: date-range-parser.ts's separator regex, charset-repair.ts's CP1252 byte-mapping table (and its test), the SIE encoding mojibake docs, generic-csv.ts's minus-sign normalizer, the agent system-prompt files that already instruct against em dashes, and a golden iXBRL test fixture compared byte-for-byte. Also fixes two bugs surfaced along the way: an off-by-one in ApiKeysPanel's scope-label split (a leftover from an earlier partial pass), and a charset-repair test that had lost the literal en-dash it exists to verify. Regenerated the agent atom seed migration (skills:generate) since 27 SKILL.md files changed. Added a CLAUDE.md rule against em/en dashes, with an explicit carve-out for the functional-dash cases above. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
a5154ee884
commit
ec27228a8e
@@ -6,22 +6,22 @@
|
||||
*
|
||||
* This enforces the rule documented in .claude/rules/database.md ("pg-real
|
||||
* tests: any PR touching a trigger/RPC/RLS/DEFERRABLE must include or extend
|
||||
* a *.pg.test.ts") — previously instruction-only, which means it got skipped.
|
||||
* a *.pg.test.ts"): previously instruction-only, which means it got skipped.
|
||||
*
|
||||
* Escape hatch: a migration may declare, in a SQL comment, either
|
||||
* -- pg-test: covered-by tests/pg/<file>.pg.test.ts
|
||||
* -- pg-test: skip (<reason>)
|
||||
* Both are visible in review and greppable later. Use them sparingly —
|
||||
* Both are visible in review and greppable later. Use them sparingly:
|
||||
* "covered-by" when an existing test already exercises the changed object,
|
||||
* "skip" when the change is genuinely untestable (e.g. a NOTIFY-only fixup).
|
||||
*
|
||||
* Scope: the gate is PR-level, not per-migration — ANY *.pg.test.ts change
|
||||
* Scope: the gate is PR-level, not per-migration: ANY *.pg.test.ts change
|
||||
* satisfies it. With multiple risky migrations in one PR, reviewers must
|
||||
* still confirm each one is actually covered (or carries an escape hatch);
|
||||
* mapping tests to migrations automatically would be guesswork.
|
||||
*
|
||||
* Usage: node scripts/check-pg-test-coverage.mjs
|
||||
* PG_GATE_BASE — git ref to diff against (default: origin/main)
|
||||
* PG_GATE_BASE: git ref to diff against (default: origin/main)
|
||||
*/
|
||||
import { execFileSync } from 'node:child_process'
|
||||
import { existsSync, readFileSync } from 'node:fs'
|
||||
@@ -32,7 +32,7 @@ let changed
|
||||
try {
|
||||
// Three-dot diff: changes on the PR side since the merge-base with `base`.
|
||||
// --diff-filter=ACMR skips deletions (a deleted migration has no content to
|
||||
// scan). execFileSync with an argv array — no shell, so a hostile base-ref
|
||||
// scan). execFileSync with an argv array: no shell, so a hostile base-ref
|
||||
// string can't inject (git just rejects an invalid rev via the catch below).
|
||||
changed = execFileSync('git', ['diff', '--name-only', '--diff-filter=ACMR', `${base}...HEAD`], {
|
||||
encoding: 'utf8',
|
||||
@@ -100,7 +100,7 @@ for (const { file, kinds } of flagged) {
|
||||
}
|
||||
console.error(`
|
||||
The repo rule (.claude/rules/database.md) requires real-Postgres coverage for
|
||||
these objects — mocked Supabase tests cannot exercise them.
|
||||
these objects: mocked Supabase tests cannot exercise them.
|
||||
|
||||
Fix one of:
|
||||
1. Add or extend a *.pg.test.ts covering the changed trigger/RPC/policy
|
||||
|
||||
Reference in New Issue
Block a user