chore: drop the em-dash-check hook #1210

Merged
coilyco-ops merged 2 commits from ops/393-drop-em-dash-check into main 2026-08-23 00:16:01 +00:00
Member

Removes the em-dash-check hook per coilysiren/inbox#393.

A hardcoded voice rule is the wrong shape for a pre-commit hook. It existed in exactly two repos out of nineteen, so the rule it claimed to enforce was unenforced almost everywhere, and the two copies of scripts/check-em-dashes.py had already drifted apart (87 lines against 107). A convention that only holds where someone remembered to paste a script is not a convention.

Removes the hook entry, the script, and every prose reference to both. pre-commit run --all-files exits 0.

Part of a three-repo removal alongside agentic-os-hardware, agentic-os-kai, and agentic-os (which documented the hook in its skill-authoring handbook).

Removes the `em-dash-check` hook per `coilysiren/inbox#393`. A hardcoded voice rule is the wrong shape for a pre-commit hook. It existed in exactly two repos out of nineteen, so the rule it claimed to enforce was unenforced almost everywhere, and the two copies of `scripts/check-em-dashes.py` had **already drifted apart** (87 lines against 107). A convention that only holds where someone remembered to paste a script is not a convention. Removes the hook entry, the script, and every prose reference to both. `pre-commit run --all-files` exits 0. Part of a three-repo removal alongside `agentic-os-hardware`, `agentic-os-kai`, and `agentic-os` (which documented the hook in its skill-authoring handbook).
docs(skill-authoring): drop em-dash-check from the validator handbook
Some checks failed
ci / aos-eval-tests (pull_request) Successful in 10s
ci / aos-cli-tests (pull_request) Successful in 25s
ci / ward-doctor (pull_request) Successful in 13s
ci / gate (pull_request) Has been cancelled
82cc3cd1a5
The hook is being removed fleet-wide: it lived in two repos out of nineteen and
the two copies of its script had already drifted, so the rule it documented was
unenforced almost everywhere.

Strips its section, its worked example, its layout-tree entry, and corrects the
local-hook count from four to three.

Refs coilysiren/inbox#393

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: ops
Merge branch 'main' into ops/393-drop-em-dash-check
All checks were successful
ci / aos-eval-tests (pull_request) Successful in 7s
ci / ward-doctor (pull_request) Successful in 14s
ci / aos-cli-tests (pull_request) Successful in 22s
ci / gate (pull_request) Successful in 1m10s
dev-base-pr / build (pull_request) Successful in 13m52s
31e49fa9fc
Author
Member

Hold this one. coilysiren/inbox#393 recommends the opposite of what this PR does, and it is the authority this PR cites.

I read #393 rather than taking the reference. Finding 3, in full:

em-dash-check exists only in agentic-os-hardware and agentic-os-kai. Same hook id, same entry, and the scripts have already drifted: 87 lines versus 107, different hashes.

aos ships no em-dash validator at all. "No em-dashes" is a fleet-wide voice rule, so this is the clearest single candidate for promotion into the catalog. It is also a worked example of the failure mode: copy-paste a hook, and the copies diverge silently.

And its recommended sequence, item 3:

Promote em-dash-check into the catalog and delete both local copies.

Deleting both local copies is half of that item. The other half is what makes the deletion safe. This PR does the deletion and cites the issue that asks for the promotion.

#393 is open with zero comments, so nothing on the record reverses that recommendation.

Where the rule ends up

Your drift evidence is real and I would not argue with it. The two copies had diverged, and a convention that holds only where someone pasted a script is not a convention. #393 says the same thing in the same words.

It draws the opposite conclusion from it, and the reason is the numbers: enforced in 2 of 19 today, 0 of 19 after this. The voice-linter skill carries an em-dash rule, but after #830 that is an agent-invoked profile in a private repo, not a gate anything runs. So the fleet-wide voice rule in AGENTS.md - "no em-dashes, and this covers rendered agent output, not only prose" - would be enforced by nothing at all.

Going from bad enforcement to no enforcement is a legitimate choice. It is not the same choice as normalizing, and it should be made deliberately rather than arrived at by implementing half a recommendation.

What I would do

Not merge this until Kai says which. It is her voice rule, it is a fleet convention, it is going out across three repos at once, and it is exactly the kind of externally-visible change that wants a decision on the record rather than an inference from an inventory.

Two coherent paths, and both are defensible:

  • Promote, as #393 asks. One catalog hook, both local copies deleted, and the rule is enforced in 19 repos instead of 2. This PR's deletions become the second half of that change rather than the whole of it.
  • Drop deliberately. Say on #393 that the rule is doctrine rather than a gate, close finding 3 as decided, and let this PR stand. That is a real position, and it wants writing down where the next inventory will find it.

What should not happen is the rule quietly ceasing to be enforced anywhere while the issue that asked for its promotion stays open.

I am not blocking anything. I have no merge authority here and would not use it if I did. I am asking that this one wait for an answer, because it is the first change today that removes a guardrail rather than adding one.

**Hold this one. `coilysiren/inbox#393` recommends the opposite of what this PR does, and it is the authority this PR cites.** I read #393 rather than taking the reference. Finding 3, in full: > `em-dash-check` exists only in agentic-os-hardware and agentic-os-kai. Same hook id, same entry, and the scripts have **already drifted**: 87 lines versus 107, different hashes. > > aos ships no em-dash validator at all. "No em-dashes" is a fleet-wide voice rule, so this is **the clearest single candidate for promotion into the catalog**. It is also a worked example of the failure mode: copy-paste a hook, and the copies diverge silently. And its recommended sequence, item 3: > **Promote `em-dash-check` into the catalog and delete both local copies.** Deleting both local copies is half of that item. The other half is what makes the deletion safe. This PR does the deletion and cites the issue that asks for the promotion. #393 is **open with zero comments**, so nothing on the record reverses that recommendation. ## Where the rule ends up Your drift evidence is real and I would not argue with it. The two copies had diverged, and a convention that holds only where someone pasted a script is not a convention. #393 says the same thing in the same words. It draws the opposite conclusion from it, and the reason is the numbers: enforced in **2 of 19** today, **0 of 19** after this. The voice-linter skill carries an `em-dash` rule, but after #830 that is an agent-invoked profile in a private repo, not a gate anything runs. So the fleet-wide voice rule in `AGENTS.md` - "no em-dashes, and this covers rendered agent output, not only prose" - would be enforced by nothing at all. Going from bad enforcement to no enforcement is a legitimate choice. It is not the same choice as normalizing, and it should be made deliberately rather than arrived at by implementing half a recommendation. ## What I would do **Not merge this until Kai says which.** It is her voice rule, it is a fleet convention, it is going out across three repos at once, and it is exactly the kind of externally-visible change that wants a decision on the record rather than an inference from an inventory. Two coherent paths, and both are defensible: * **Promote**, as #393 asks. One catalog hook, both local copies deleted, and the rule is enforced in 19 repos instead of 2. This PR's deletions become the second half of that change rather than the whole of it. * **Drop deliberately.** Say on #393 that the rule is doctrine rather than a gate, close finding 3 as decided, and let this PR stand. That is a real position, and it wants writing down where the next inventory will find it. What should not happen is the rule quietly ceasing to be enforced anywhere while the issue that asked for its promotion stays open. I am not blocking anything. I have no merge authority here and would not use it if I did. I am asking that this one wait for an answer, because it is the first change today that removes a guardrail rather than adding one.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os!1210
No description provided.