fix(mobile): show bound errors in profile name and description forms - #6756
Merged
Merged
Conversation
Contributor
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryThe incremental changes extract the profile overview skeleton into its own module and add unit tests covering the description validator's 500/501 and trim-before-length boundaries; the previously reported untested-validator suggestion is resolved and no new issues were found. Files Reviewed (3 files)
Previous Review Summary (commit 11d827c)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 11d827c)Status: 1 Issue Found | Recommendation: Address before merge Overview
Issue Details (click to expand)SUGGESTION
Files Reviewed (6 files)
Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0 Review guidance: REVIEW.md from base branch |
iscekic
marked this pull request as draft
September 28, 2026 08:40
iscekic
marked this pull request as ready for review
September 28, 2026 08:44
iscekic
marked this pull request as draft
September 28, 2026 08:52
iscekic
marked this pull request as ready for review
September 28, 2026 09:01
iscekic
marked this pull request as draft
September 28, 2026 09:05
iscekic
marked this pull request as ready for review
September 28, 2026 09:10
iscekic
marked this pull request as draft
September 28, 2026 09:21
iscekic
marked this pull request as ready for review
September 28, 2026 09:28
pandemicsyn
approved these changes
Sep 28, 2026
This was referenced Sep 27, 2026
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.
Fix proof
A profile name longer than the server's 100-character bound is refused by the Overview metadata form with the empty-field message "Enter a profile name" (and the save is blocked), because the screen i
Asserted value:
apps/mobile/src/components/profiles/profile-overview-screen.tsx. Sense check (model): The addednameIssue === 'empty' ? t('profiles.nameRequired') : t('agentChat.newSession.nameTooLong')line now shows nameTooLong for the too-long case, fixing the claim in the traced file.The scripts were proven on an earlier base, so only the head ran.
Head
41b8f5d9ff8cHead log: backend-assert e7b1a6d835e2 exited 0
The Overview metadata form forwards the description with no 500-character cap (the field sets no maxLength and submit never checks the length), so a longer description is sent and the user gets a raw
Asserted value:
apps/mobile/src/components/profiles/profile-overview-screen.tsx. Sense check (model): The diff addsvalidateProfileDescription(description)withsetDescriptionError(t('agentChat.newSession.descriptionTooLong'))and passeserror={descriptionError}to the field in profile-overview-screen.tsx, replacing the uncapped forward with an inline length check.The scripts were proven on an earlier base, so only the head ran.
Head
41b8f5d9ff8cHead log: backend-assert e7b1a6d835e2 exited 0
The agent form labels the slug field 'Limace d'agent' (the animal) while the error copy beside it says 'slug', giving profiles.agents.slug a wrong meaning on the field the user fills in.
Asserted value:
apps/mobile/src/i18n/locales/fr.json. Sense check (model): The diff changes the traced fr.json slug key from "Limace d'agent" to "Slug de l'agent", matching the error copy's non-animal meaning as the claim requires.The scripts were proven on an earlier base, so only the head ran.
Head
41b8f5d9ff8cHead log: backend-assert ed2f3381284e exited 0
The MCP server type 'remote' is labelled 'Télécommande' (a remote control) instead of 'Distant'/'À distance', so the local/remote choice in the MCP editor is mistranslated.
Asserted value:
apps/mobile/src/i18n/locales/fr.json. Sense check (jev): probability 0.92The scripts were proven on an earlier base, so only the head ran.
Head
41b8f5d9ff8cHead log: backend-assert ed2f3381284e exited 0
The Environment variables screen header is 'Matsalolin muhalli' ('environmental problems') instead of the catalog's term 'masu canjin yanayi', so profiles.variablesTitle names the wrong thing.
Asserted value:
apps/mobile/src/i18n/locales/ha.json. Sense check (jev): probability 0.91The scripts were proven on an earlier base, so only the head ran.
Head
41b8f5d9ff8cHead log: backend-assert 204c44f9d053 exited 0
The agent system-prompt placeholder is the truncated fragment 'ka a...' rather than a full example, so profiles.agents.promptPlaceholder shows meaningless input guidance in the form field.
Asserted value:
apps/mobile/src/i18n/locales/ha.json. Sense check (model): The diff changes apps/mobile/src/i18n/locales/ha.json promptPlaceholder from the truncated "ka a..." to the full "Kai mataimaki ne...", addressing the traced defect.The scripts were proven on an earlier base, so only the head ran.
Head
41b8f5d9ff8cHead log: backend-assert 204c44f9d053 exited 0
Changelog for users
Changelog for maintainers
E2E proof
A profile name longer than the server's 100-character bound is refused by the Overview metadata form with the empty-field message "Enter a profile name" (and the save is blocked), because the screen ignores validateProfileName's 'too-long' result and always shows profiles.nameRequired; the user is told to enter a name they already entered and cannot save, unlike Save-as-profile which shows agentChat.newSession.nameTooLong for the same validator.
Code trace:
apps/mobile/src/components/profiles/profile-overview-screen.tsx:35 changed in e99c6734c05b63651cf55c75e0ae08b5d20ed6d0. Sense check (model): The new linenameIssue === 'empty' ? t('profiles.nameRequired') : t('agentChat.newSession.nameTooLong')in profile-overview-screen.tsx replaces the unconditional profiles.nameRequired, so a too-long name now shows the tooLong message and the save is blocked via the added return.Changed lines
The Overview metadata form forwards the description with no 500-character cap (the field sets no maxLength and submit never checks the length), so a longer description is sent and the user gets a raw server-validation toast instead of the "Description is too long" inline message the Save-as-profile sheet shows; the New profile screen has the same gap.
Code trace:
apps/mobile/src/components/profiles/profile-overview-screen.tsx:35 changed in e99c6734c05b63651cf55c75e0ae08b5d20ed6d0. Sense check (model): profile-overview-screen.tsx now calls validateProfileDescription(description) and setDescriptionError(t('agentChat.newSession.descriptionTooLong')) on submit, giving the inline too-long message instead of the raw server toastChanged lines
The agent form labels the slug field 'Limace d'agent' (the animal) while the error copy beside it says 'slug', giving profiles.agents.slug a wrong meaning on the field the user fills in.
Code trace:
apps/mobile/src/i18n/locales/fr.json:3380 changed in e99c6734c05b63651cf55c75e0ae08b5d20ed6d0. Sense check (model): The diff line+ "slug": "Slug de l'agent"replaces the animal label"Limace d'agent"at fr.json:3380, matching the claim's named location and defect.Changed lines
The MCP server type 'remote' is labelled 'Télécommande' (a remote control) instead of 'Distant'/'À distance', so the local/remote choice in the MCP editor is mistranslated.
Code trace:
apps/mobile/src/i18n/locales/fr.json:3380 changed in e99c6734c05b63651cf55c75e0ae08b5d20ed6d0. Sense check (jev): probability 0.92Changed lines
The Environment variables screen header is 'Matsalolin muhalli' ('environmental problems') instead of the catalog's term 'masu canjin yanayi', so profiles.variablesTitle names the wrong thing.
Code trace:
apps/mobile/src/i18n/locales/ha.json:3295 changed in e99c6734c05b63651cf55c75e0ae08b5d20ed6d0. Sense check (jev): probability 0.91Changed lines
The agent system-prompt placeholder is the truncated fragment 'ka a...' rather than a full example, so profiles.agents.promptPlaceholder shows meaningless input guidance in the form field.
Code trace:
apps/mobile/src/i18n/locales/ha.json:3295 changed in e99c6734c05b63651cf55c75e0ae08b5d20ed6d0. Sense check (model): apps/mobile/src/i18n/locales/ha.json:3295 now sets promptPlaceholder to "Kai mataimaki ne...", replacing the truncated 'ka a...' fragment the claim namesChanged lines
Owner request