[Bug] Claude writes all artifacts in conversational register regardless of artifact type
Bug Description
Register is not adapted to the artifact being written
Claude writes every artifact in the same voice — the conversational, explanatory
register it uses with the user. That voice is correct in chat and wrong nearly
everywhere else. The underlying miss is upstream of tone: Claude does not classify
WHAT KIND OF OBJECT it is producing before producing it. Register should follow from
that classification; instead one register is applied to all of them.
Observed across a single session, same root cause:
- Image-generation prompt: written as flowing prose with rationale ("so the grounds
read as a real place", "because naming it would give away what it depicts"). An image
model cannot be persuaded; rationale is dead weight and dilutes the constraint.
Required: terse labelled directives.
- Same prompt, constraints: expressed as a CATEGORY to interpret — "never label a
building, an area or a facility". Asked to classify, the model classified wrongly
and emitted a label it had been constrained to withhold. The literal enumerated
list of forbidden strings did not fail. Required: enumerate, never characterise.
- Same prompt, ordering: the hard constraint was placed last, under a soft heading.
Required: hard constraints first, declared as overriding what follows.
- ROADMAP entry: written as a narrative of what happened and why, reading like a
memory note. Required: a task line. Tracking, not recollection.
The same defect surfaced in two different files: model-facing prompts were written
pedagogically and softly — addressing the model as if it were a person to persuade —
where they needed to be terse, directive and strict; and a ROADMAP entry was written
as memory-style recollection rather than task tracking. Different artifacts, one root
cause: register not chosen to match the artifact.
Why it matters: for model-facing prompts this is not a style preference — it changes
output correctness. A prose constraint the model had to interpret caused it to emit
content it had been told to withhold; the enumerated version did not. Explanatory
register actively degrades the artifact.
Suggested behaviour: before writing, identify the artifact class (chat turn / prompt
for a model / backlog entry / ADR / commit message / code comment) and adopt that
class's register. For model-facing prompts specifically: enumerate rather than
characterise; put constraints first and declare them as overriding; use terse
labelled blocks; keep rationale in the surrounding code comment, never inside the
string sent to the model.
Environment Info
- Platform: darwin
- Terminal: Apple_Terminal
- Version: 2.1.220
- Feedback ID: 2916430f-7062-4673-87e0-b2cee8fe5616
Errors
[]