Repository navigation
fix(app-shell): record create/update toasts name the saved record - #26202
Merged
Merged
Conversation
The console's create and update success toasts (the main crud_success path and the child-form task path) now carry the saved record's ADR-0079 display name, e.g. `Task "Quarterly review" created`. A record with nothing nameable keeps the object-label toast. Two new form.* keys, createdNamed and updatedNamed, in all ten locale packs. Claude-Session: https://claude.ai/code/session_01DiQzqGc2iCV6ZSmHBw4mwe Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DiQzqGc2iCV6ZSmHBw4mwe Co-authored-by: Claude <noreply@anthropic.com>
Two new de values add one matched pair each, and AppContent's two record-save toast sites now share one fallback label. Claude-Session: https://claude.ai/code/session_01DiQzqGc2iCV6ZSmHBw4mwe Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DiQzqGc2iCV6ZSmHBw4mwe Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 26, 2026
…-db3k9m # Conflicts: # scripts/sdui-manifest.sources/i18n.json # ui/packages/i18n/src/locales/ar.ts # ui/packages/i18n/src/locales/de.ts # ui/packages/i18n/src/locales/en.ts # ui/packages/i18n/src/locales/es.ts # ui/packages/i18n/src/locales/fr.ts # ui/packages/i18n/src/locales/ja.ts # ui/packages/i18n/src/locales/ko.ts # ui/packages/i18n/src/locales/pt.ts # ui/packages/i18n/src/locales/ru.ts # ui/packages/i18n/src/locales/zh.ts
…main Claude-Session: https://claude.ai/code/session_01DiQzqGc2iCV6ZSmHBw4mwe Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对 · ACCEPT · seat
|
This was referenced Oct 26, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Oct 26, 2026
…-db3k9m # Conflicts: # scripts/sdui-manifest.sources/i18n.json
…main Claude-Session: https://claude.ai/code/session_01DiQzqGc2iCV6ZSmHBw4mwe Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对 · ACCEPT (re-armed after a queue removal) · seat
|
This was referenced Oct 26, 2026
Merged
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.
Requested by Steve · project thread
Fixes #26172
Clause-②: no (adds or rewords message keys; no key is removed, so
TranslationKeysonly widens; no exported runtime contract changes)Metadata-protocol: none
What
The Console's record create and update success toasts now name the saved record by its display name (ADR-0079), as the ruled
ux-conventions.write-feedbackclause asks:Task "Quarterly review" created,Task "Quarterly review" updated. A record with nothing nameable keeps today's object-label toast (Task created successfully).ui/packages/app-shell/src/console/AppContent.tsx: one message builder,recordSaveMessage(saved), now serves both toast sites, the main path (handleCrudSuccess, which hands the message to the runner'scrud_success) and the child-form task path (a subtable child opened over its parent's record page, which toasts directly).handleRecordFormSuccesspasses the saved record it already receives to both. The name comes fromgetRecordDisplayNamein@object-ui/core, read through the object being saved (formObjectDef), so it follows the object's declarednameField. The resolver's floor (Record #ID, or the empty fallback for a row with no id) is not a name, and falls back to the object-label string. This is the same floor testrecordToOptioninLookupFieldandrenderLookupColumnValuealready use.ui/packages/i18n/src/locales/*.ts(all ten packs): two new keys,form.createdNamedandform.updatedNamed, each with{{object}}(object label) and{{title}}(record name), quoted the way each pack already quotes a name (deleteConfirmTitleis the model: curly quotes in zh, corner brackets in ja, low-high quotes in de, straight quotes elsewhere).form.createSuccess/form.updateSuccessare unchanged and stay the no-name toast.scripts/sdui-manifest.sources/i18n.json: re-recorded bynode scripts/gen-sdui-manifest-node.mjs(1 of 27 package records moved: i18n).sdui.manifest.jsonitself is unchanged.ui/packages/i18nmove with the diff:de-quote-pairing-3876(94 to 96 matched pairs, the two new de values) andresidue-namespaces-3546(thecommon.recordfallback in AppContent is written once now, 2 to 1)..changeset/26172-record-save-toast-names-record.md(patch,@object-ui/app-shell,@object-ui/i18n).Out of scope, per the ruling: settings saves and flow-completion toasts.
Tests
New:
ui/packages/app-shell/src/console/__tests__/AppContent.recordSaveToastNamesRecord-26172.test.tsx, a realAppContentmount in a real i18next instance (the harness ofAppContent.createLandingOriginPlural-11733). Nine cells: main path and child-form path, each for create and update, each with a name and with none, plus one zh-CN cell (任务“季度复盘”已创建).node scripts/ablation-replace.mjs, anchorconst title = resolved && !(idreplaced byconst title = false && resolved && !(id; anchor 1 to 0, blob66183e3229a8toa12d7507a89f): 5 failed / 4 passed. All five "names the record" cells went red (expected 'Task created successfully' to be 'Task "Quarterly review" created'), and the four no-name cells stayed green, the direction written in the test's header before the run. Restore: blob back to66183e3229a8equals HEAD,git diff HEADempty.vitest run packages/i18n/ packages/app-shell/src/console/__tests__/: first run 3 failed (the two count pins above), 1694 passed. After re-pinning, the two files: 52/52 passed.ui/that namesAppContent.tsxorform.createSuccess/form.updateSuccess(14 files): 89/89 passed.3c5713b5. The one later commit (e9bd0d06) only re-recordsscripts/sdui-manifest.sources/i18n.json.Narrowed on purpose: the whole
app-shellsuite (about 1700 files) is left to CITest Core/Build & E2E UI.Acceptance notes
dataSource.update'srecord). The toast can only name the record if that response carries the name field. The ObjectStack adapter returns the server'srecord. A live server was not booted for this PR.ui/packages/i18nis held by the batch PR chore(i18n): delete 92 message keys nothing reads from all ten locale packs #26158. This PR stays draft. Merging main, re-recordingi18n.jsonand enqueuing wait until that batch has merged and the ui seat says go. The two count pins above may need a re-pin at that merge if the batch moves the same counts.Generated by Claude Code