Skip to content

fix(prompt): Restore SOUL voice authority in system prompt header#308

Merged
dcramer merged 1 commit intomainfrom
cursor/restore-soul-voice-authority-ef44
May 7, 2026
Merged

fix(prompt): Restore SOUL voice authority in system prompt header#308
dcramer merged 1 commit intomainfrom
cursor/restore-soul-voice-authority-ef44

Conversation

@dcramer
Copy link
Copy Markdown
Member

@dcramer dcramer commented May 7, 2026

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.md is still mechanically loaded into the static system prompt and rendered inside <personality> tags. That part is fine.
  • The regression is in the framing introduced by 22d60c0 (the prompt simplification).
  • Pre-22d60c0 the prompt opened with: "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."
  • Post-22d60c0 the header became: "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 HEADER with an affirmative one that:

  1. Tells the model to follow the personality block for voice and tone in every reply (restores SOUL authority).
  2. Keeps the spec contract intact: platform mechanics live in behavior/output and override personality only when those mechanics conflict.
const HEADER =
  "You are a Slack-based helper assistant. Follow the personality block for voice and tone in every reply. The behavior and output blocks define platform mechanics and override personality only when those mechanics conflict.";

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)
  • Verified via probe that <personality> continues to receive the deployment's SOUL.md content unchanged.

Notes

  • No new evals here. There is no eval today that catches voice/tone regressions in the SOUL — that's a real gap, but a separate piece of work. Filing a follow-up to add a personality-voice eval would be the right next step if we want to prevent this kind of drift.
  • Behavior change is limited to header wording; no runtime, capability, or context plumbing was touched.

Slack Thread

Open in Web Open in Cursor 

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>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
junior-docs Ready Ready Preview, Comment May 7, 2026 7:45pm

Request Review

@dcramer dcramer marked this pull request as ready for review May 7, 2026 21:09
@dcramer dcramer merged commit e67a2c2 into main May 7, 2026
13 checks passed
@dcramer dcramer deleted the cursor/restore-soul-voice-authority-ef44 branch May 7, 2026 21:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants