Skip to content

[problem] wr-architect-generate-decisions-compendium emits em-dashes (U+2014) that violate adopter no-em-dash policies; forces 43-instance manual scrub on every regen #219

@tompahoward

Description

@tompahoward

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:

  1. 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.
  2. 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.
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions