# \[Bug\]: Monogram picker allows more than two characters, then save fails with a generic error · Issue \#22794 · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/issues/22794)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

State: backlog

Priority: 0

## Description

[Discussion and activity](https://git.cafe/pingdotgg/t3code/issues/22794)

---

ℹ️ Written by `GPT-6.1 Sol` on behalf of AndreiShenets

### Before submitting

- [x] Searched existing issues and did not find a duplicate.
- [x] Included enough detail to reproduce or investigate the problem.

### Area

apps/web (also affects the desktop client)

### Summary

The project icon picker enables **Save icon** for monograms longer than two characters, but the server rejects them. The useful validation error is wrapped in a generic project-mutation error, so it is unclear why the icon does not change.

### Steps to reproduce

1. Open Project Settings → Choose icon → Monogram.
2. Enter three ASCII letters, for example `ABC`.
3. Click **Save icon**.

### Expected behavior

The picker enforces the existing two-character limit before submitting, keeps the dialog open for correction, and explains the validation problem. This report does not request a higher monogram limit.

### Actual behavior

The picker accepts the input and closes on save. The server rejects the update, leaving the previous icon unchanged. The underlying error is not surfaced clearly.

### Evidence

The installed Windows desktop instance recorded three failed project updates with this nested cause:

```text
ProjectMutationError: Failed to mutate project.
  [cause]: ProjectOperationError: Project operation 'dispatch-project-command' failed ...
    [cause]: ProjectCommandInvariantError: Project command invariant failed (project.meta.update): Project monograms must contain at most two characters.
```

Relevant source:

- `apps/web/src/components/settings/ProjectIconPickerDialog.tsx` uses `Schema.is(ProjectMonogramText)` to gate saving, then closes the dialog immediately after calling `onSelect`.
- `packages/contracts/src/project.ts`: `ProjectMonogramText` checks a 32-character maximum and allowed characters, not the two-grapheme limit.
- `apps/server/src/orchestration-v2/ProjectCommands.ts` rejects monograms longer than two graphemes.

Evidence limits: the failures above are from the installed instance; the `ABC` steps are the minimal reproduction implied by the inspected code, not a separately executed browser test. The installed build version and exact submitted strings were not captured.

### Impact

Minor bug: invalid input appears saveable, then fails with an unclear error.

### Environment / version

Windows desktop. Installed version not captured.

### Workaround

Use one or two letters or numbers, such as `KC`.

### Related issue

Closed #10656 also concerns project icons failing to save, but describes missing icon fields in the update payload, not this client/server validation mismatch.

