fix(prompt): Restore SOUL voice authority in system prompt header#308
Merged
fix(prompt): Restore SOUL voice authority in system prompt header#308
Conversation
The simplification in 22d60c0 demoted the personality block from "always follow personality guidance for tone/style" to "voice only" while elevating other blocks as "authoritative". The model reads that hierarchy as permission to discount the SOUL, which is why deployments report Junior no longer holding their configured voice (e.g. the "junior no longer sounds Gen z" regression). SOUL.md is still mechanically loaded into the static system prompt under <personality> — the bug is purely in how the surrounding header frames it. Switch the framing to be affirmative about voice ("follow the personality block for voice and tone in every reply") while keeping the spec contract intact: behavior and output own platform mechanics and override personality only when those mechanics conflict. This stays consistent with agent-prompt-spec.md (SOUL is voice-only; platform behavior must work even with an empty SOUL) and keeps the system prompt byte-stable across turns. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
dcramer noticed Junior's voice has been diminished — "the SOUL got diminished in my improvements too" / "Junior no longer sounds Gen z".
After tracing the prompt pipeline:
SOUL.mdis still mechanically loaded into the static system prompt and rendered inside<personality>tags. That part is fine."You are a Slack-based helper assistant. Identity, tone, and domain defaults are defined in the personality block."and the personality block began with"Always follow the personality guidance for tone/style unless safety or policy constraints require otherwise.""You are a Slack-based helper assistant. The behavior and output blocks below are authoritative; the personality block sets voice only."and the affirmative directive inside<personality>was dropped.The new framing tells the model the personality block is decorative ("voice only") while elevating the other blocks as "authoritative". The behavior block is ~50 imperative bullets; the personality is a few lines from
SOUL.md. With that hierarchy plus that volume disparity, the model reads the framing as permission to discount the SOUL, and the deployment-configured voice gets washed out.Fix
Replace the dismissive
HEADERwith an affirmative one that:This stays consistent with
specs/agent-prompt-spec.md(SOUL is voice-only; platform behavior must work even with an empty SOUL) and keeps the system prompt byte-stable across turns.Verification
pnpm --filter @sentry/junior typecheck✓pnpm --filter @sentry/junior exec vitest run tests/unit/prompt.test.ts✓ (existing assertions still hold; HEADER text is not asserted)<personality>continues to receive the deployment'sSOUL.mdcontent unchanged.Notes
Slack Thread