Skip to content

feat(profile): change your display name (0.19.0, qc 0.14.0) - #351

Merged
sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
feat/display-name-edit
Oct 29, 2026
Merged

sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
feat/display-name-edit

Conversation

@sh1pt-actions-fleet

Copy link
Copy Markdown
Contributor

A qrypt.chat user asked support how to change their display name; there was no way to.

  • POST /api/profile/update accepts displayName (or display_name): trimmed, whitespace collapsed, control and bidi-override characters stripped, 1-50 characters, no <>. Empty keeps the current name (users.display_name is NOT NULL). cleanDisplayName in src/lib/profile/fields.js follows cleanPronouns.
  • Settings > Profile: new Display name field; the navbar updates without a reload.
  • qc profile --name "..." (qc 0.14.0). The MCP server has no profile tool, so nothing to add there.
  • Readers already use display_name: chat sender names, /u/, OpenProfile.md.
  • RLS checked on prod: "Users can update own profile" covers the row; enforce_users_immutable_columns does not list display_name. No migration.
  • Tests: route.test.js + fields.test.js; full suite 909 passed.

🤖 Generated with Claude Code

Settings > Profile gets a Display name field, POST /api/profile/update
accepts displayName (or display_name): trimmed, whitespace collapsed,
control and bidi-override characters stripped, 1-50 characters, no <>.
Empty keeps the current name (users.display_name is NOT NULL). The navbar
picks up the new name without a reload. qc profile --name "..." sets it.

RLS: "Users can update own profile" covers the row and
enforce_users_immutable_columns does not list display_name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

17 finding(s)

MEDIUM: 13 | LOW: 4

Severity Rule Location
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.jsx:38
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.jsx:66
MEDIUM js-unescaped-html-sink src/app/faq/page.jsx:57
MEDIUM js-unescaped-html-sink src/app/layout.jsx:142
MEDIUM js-unescaped-html-sink src/app/layout.jsx:146
MEDIUM js-unescaped-html-sink src/app/page.jsx:50
MEDIUM js-open-redirect src/app/phone/page.jsx:70
MEDIUM redos-nested-quantifier src/lib/auth/dns-name.js:88
MEDIUM redos-nested-quantifier src/lib/chat/voice-mode.js:116
MEDIUM redos-nested-quantifier src/lib/chat/voice-mode.js:121
MEDIUM js-unescaped-html-sink src/lib/components/chat/MessageItem.jsx:85
MEDIUM js-unescaped-html-sink src/lib/components/chat/MessageItem.jsx:130
MEDIUM js-unescaped-html-sink src/lib/components/PitFooter.jsx:15
LOW secret-generic-credential src/app/api/auth/register-anon/route.test.js:32
LOW secret-jwt tests/debug-sms.js:10
LOW secret-generic-credential tests/private-key-import-export.test.js:252
LOW secret-generic-credential tests/private-key-import-export.test.js:264

Snippets are redacted; ThreatCrush never prints matched credential material.

@sh1pt-actions-fleet
sh1pt-actions-fleet Bot merged commit 68f410d into master Oct 29, 2026
11 checks passed
@sh1pt-actions-fleet
sh1pt-actions-fleet Bot deleted the feat/display-name-edit branch October 29, 2026 00:02
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.

1 participant