Description
The wr-architect-generate-decisions-compendium script (resolves on $PATH to packages/architect/scripts/generate-decisions-compendium.sh per ADR-049 shim convention) regenerates docs/decisions/README.md per ADR-077. The generator emits em-dash characters (U+2014) throughout the output, in places like ADR header lines (### ADR-NNN <U+2014> title) and the body's chosen-option lines (Chosen option: X <U+2014> because Y).
The em-dash in these positions triggers project-local no-em-dash hooks (.claude/hooks/no-em-dash-bash.sh PostToolUse + no-em-dash.sh PreToolUse). When the generator runs via Bash, the hook fires with:
BLOCKED: Em-dashes (U+2014) detected in files modified by Bash. Files: docs/decisions/README.md. Rewrite the affected sentences to avoid em-dashes entirely. Use commas, periods, colons, or parentheses instead.
Forcing the agent to manually replace every em-dash before the commit can proceed. This session (2026-06-03) scrubbed 43 em-dash characters via a single Edit replace_all from a regenerated README before the commit landed.
Symptoms
- After invoking
wr-architect-generate-decisions-compendium (e.g. during /wr-architect:review-decisions Step 4.5 or /wr-architect:create-adr Step 5), the immediate git add docs/decisions/README.md (or any subsequent Bash command) trips the no-em-dash hook.
- The compendium cannot be regenerated without a manual U+2014-to-ASCII-separator replacement pass.
- Downstream P083 (compendium-staleness ticket) cites this exact friction as the reason compendium regen was deferred during 2026-06-02 AFK iters.
Workaround
Edit-tool replace_all to swap U+2014 character for ASCII " - " on the generated file before staging. Manual; needs to run on every regen.
Affected plugin or component
@windyroad/architect (script at packages/architect/scripts/generate-decisions-compendium.sh)
Frequency
Every compendium regeneration. Per ADR-077 Step 4.5, this runs after every confirmed/amended/rejected ADR in a /wr-architect:review-decisions drain batch. Multiple times per session in active drain sessions.
Versions
- Local plugin:
@windyroad/architect@<not detected>
- Upstream package: not applicable
- Claude Code CLI: 2.1.150
- Node: v22.17.1
- OS: Darwin 25.3.0 x86_64
Evidence
Fix options:
- Upstream emits ASCII separators by default: replace em-dash characters with " - " or ": " or " | " in the generator output. Removes the friction for ALL adopters (most projects don't enforce no-em-dash, but ASCII separators are universally compatible). Cleanest fix.
- Upstream respects adopter no-em-dash policy via env-var or config: detect
.claude/hooks/no-em-dash*.sh presence (or read a config flag) and emit ASCII separators conditionally. More complex; only useful if some adopters want to keep em-dashes.
- Local post-process generator output: wrap the shim in a project-local script that runs the generator then sed-replaces em-dashes. Acceptable workaround; doesn't fix the root cause.
Option 1 is the cleanest: ASCII separators have zero downside, even em-dash-tolerant adopters won't notice.
This composes with #125 + the new P085 sibling (both about external-comms gate hash brittleness) as a class of "upstream generator emits content that downstream policy rejects" friction patterns.
Cross-reference
Reported from https://github.com/windyroad/windyroad/blob/master/docs/problems/open/087-wr-architect-generate-decisions-compendium-emits-em-dashes-violating-adopter-no-em-dash-policies.md
This issue is tracked locally as P087 in the downstream project's docs/problems/ directory.
Description
The
wr-architect-generate-decisions-compendiumscript (resolves on$PATHtopackages/architect/scripts/generate-decisions-compendium.shper ADR-049 shim convention) regeneratesdocs/decisions/README.mdper ADR-077. The generator emits em-dash characters (U+2014) throughout the output, in places like ADR header lines (### ADR-NNN <U+2014> title) and the body's chosen-option lines (Chosen option: X <U+2014> because Y).The em-dash in these positions triggers project-local no-em-dash hooks (
.claude/hooks/no-em-dash-bash.shPostToolUse +no-em-dash.shPreToolUse). When the generator runs via Bash, the hook fires with:Forcing the agent to manually replace every em-dash before the commit can proceed. This session (2026-06-03) scrubbed 43 em-dash characters via a single Edit replace_all from a regenerated README before the commit landed.
Symptoms
wr-architect-generate-decisions-compendium(e.g. during/wr-architect:review-decisionsStep 4.5 or/wr-architect:create-adrStep 5), the immediategit add docs/decisions/README.md(or any subsequent Bash command) trips the no-em-dash hook.Workaround
Edit-tool
replace_allto swap U+2014 character for ASCII " - " on the generated file before staging. Manual; needs to run on every regen.Affected plugin or component
@windyroad/architect (script at
packages/architect/scripts/generate-decisions-compendium.sh)Frequency
Every compendium regeneration. Per ADR-077 Step 4.5, this runs after every confirmed/amended/rejected ADR in a
/wr-architect:review-decisionsdrain batch. Multiple times per session in active drain sessions.Versions
@windyroad/architect@<not detected>Evidence
Fix options:
.claude/hooks/no-em-dash*.shpresence (or read a config flag) and emit ASCII separators conditionally. More complex; only useful if some adopters want to keep em-dashes.Option 1 is the cleanest: ASCII separators have zero downside, even em-dash-tolerant adopters won't notice.
This composes with #125 + the new P085 sibling (both about external-comms gate hash brittleness) as a class of "upstream generator emits content that downstream policy rejects" friction patterns.
Cross-reference
Reported from https://github.com/windyroad/windyroad/blob/master/docs/problems/open/087-wr-architect-generate-decisions-compendium-emits-em-dashes-violating-adopter-no-em-dash-policies.md
This issue is tracked locally as P087 in the downstream project's
docs/problems/directory.