Conversation
🧪 BenchmarkShould we run the Virtual MCP strategy benchmark for this PR? React with 👍 to run the benchmark.
Benchmark will run on the next push after you react. |
Release OptionsSuggested: Patch ( React with an emoji to override the release type:
Current version:
|
405234a to
91ef127
Compare
There was a problem hiding this comment.
2 issues found across 23 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/mesh/src/web/views/settings/profile-preferences.tsx">
<violation number="1" location="apps/mesh/src/web/views/settings/profile-preferences.tsx:85">
P2: `name` is initialized before the session resolves, so once the user data arrives the input stays empty and `isDirty` becomes true, allowing an accidental save of a blank name. Defer the editable state until the user data is available (e.g., track an "uninitialized" state and derive the displayed value from `user?.name` until the user edits).</violation>
</file>
<file name="apps/mesh/src/web/components/settings/organization-form.tsx">
<violation number="1" location="apps/mesh/src/web/components/settings/organization-form.tsx:174">
P2: The custom `onChange` replaces React Hook Form’s registered handler, so field re-validation/touched updates won’t run. Use `setValue` with `shouldValidate`/`shouldTouch` (or call the registered onChange) so errors clear as the user edits the slug.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SoundEventKey gained an "in_progress" variant but SOUND_MAP was not updated, causing a typecheck failure. Make the map Partial and add a null-check in the preview button handler. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
in_progress should not play a sound. Removed the entry and added a comment explaining the intentional omission. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found across 2 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/mesh/src/web/hooks/use-status-sounds.ts">
<violation number="1" location="apps/mesh/src/web/hooks/use-status-sounds.ts:10">
P2: Avoid `Partial<Record<SoundEventKey, ...>>` here; it removes exhaustiveness checks and can silently drop sounds for valid event keys.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| import { usePreferences, type SoundEventKey } from "./use-preferences"; | ||
|
|
||
| const SOUND_MAP: Record<string, { dataUri: string }> = { | ||
| export const SOUND_MAP: Partial<Record<SoundEventKey, { dataUri: string }>> = { |
There was a problem hiding this comment.
P2: Avoid Partial<Record<SoundEventKey, ...>> here; it removes exhaustiveness checks and can silently drop sounds for valid event keys.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/mesh/src/web/hooks/use-status-sounds.ts, line 10:
<comment>Avoid `Partial<Record<SoundEventKey, ...>>` here; it removes exhaustiveness checks and can silently drop sounds for valid event keys.</comment>
<file context>
@@ -7,7 +7,7 @@ import { clickSoftSound } from "@deco/ui/lib/click-soft.ts";
import { usePreferences, type SoundEventKey } from "./use-preferences";
-export const SOUND_MAP: Record<SoundEventKey, { dataUri: string }> = {
+export const SOUND_MAP: Partial<Record<SoundEventKey, { dataUri: string }>> = {
completed: successChimeSound,
failed: error005Sound,
</file context>
There was a problem hiding this comment.
Partial is intentional here. in_progress is a valid SoundEventKey (users can toggle it in preferences) but it deliberately has no associated sound — the comment on line 9 documents this. Removing Partial would force a dummy/null entry for in_progress, which is less clean than the current approach where if (sound) on line 23 (and line 269 in profile-preferences) handles missing entries gracefully.
Exhaustiveness is not needed: if a new key is added to SoundEventKey, the default behavior of "no sound" is the safe default until a sound asset is explicitly assigned.
There was a problem hiding this comment.
Thanks for the feedback! I've saved this as a new learning to improve future reviews.
…n plan mode toggle Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Knip flagged the unused `Header` export. Since only `ViewLayout` and `ViewActions` are imported, remove `Header` and the now-unreferenced `HeaderLeft` component. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Defer editable name state until session resolves to prevent blank name saves (profile-preferences.tsx) - Add shouldTouch and shouldValidate to slug setValue so validation and touched state update on edit (organization-form.tsx) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
What is this contribution about?
Screenshots/Demonstration
How to Test
Migration Notes
Review Checklist
Summary by cubic
Rebuilt Settings, Connections, Members, Monitoring, Automations, and Virtual MCP with a consistent Page layout. Added a Profile & Preferences page, shared
@deco/uiSearchInput, and polished buttons and tables.New Features
Page.TitleandPage.Bodybuilding blocks; shared@deco/uiSearchInputacross org and settings pages.@deco/ui: smaller default buttons with newicon-sm;Tablenow rounded and bordered.Bug Fixes
SOUND_MAPintentionally omitsin_progress(no sound); map isPartialand previews guard missing sounds.Written for commit 9dea632. Summary will update on new commits.