You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit c725e3f
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: .claude/rules/sim-platform-views.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,6 +19,7 @@ like that" is not one.
19
19
20
20
| Job | Use | Never |
21
21
| --- | --- | --- |
22
+
| Explain a field, dialog or row | Its label, placeholder and options (`Access keys (long-lived)`); `error` for validation, `disabledReason` for a locked control, the dialog's Setup guide for steps | A `hint`, form `Modal``description`, written `SettingsRow`/`DetailHeader` subtitle or data `hint` (`check:platform-design``helper-copy`; a line that must stay is named in `HELPER_COPY_OWNERS`) |
22
23
| First read of a view | Render nothing for data-backed content while pending (static chrome renders at once), `FailureNotice` when the read fails, `EmptyState` when it settles empty. Read the query's `status`, not an empty list. An action's own pending label (`pendingLabel`, a Load action's `Loading…`) is feedback, not loading copy | A skeleton, shimmer, placeholder rows or loading copy (`check:platform-design``loading-copy`); a pending hint, placeholder or detail line; treating empty as loading |
23
24
| Failed read |`FailureNotice`, labelled Retry. `intent='warning'` where the read partly answered | A hand-built retry button or `InlineNotice` + `Button`|
24
25
| Failed background refresh |`FailureNotice` above the content it keeps | Replacing content already on screen |
Copy file name to clipboardExpand all lines: .claude/rules/sim-ui-copy.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ paths:
13
13
14
14
**Do not add subtitles, helper text, or descriptive copy beneath headings, labels, cards, or settings by default.** Prefer one concise, self-explanatory heading or label. Only add supporting copy when the user explicitly asks for it, or when it is necessary to prevent misunderstanding or error — and never use it to restate the heading.
15
15
16
-
This applies to app UI outside the Platform: settings rows, modals, panels, cards, list rows, empty states, form fields, and section headers. Platform views (`app/(product)`, `platform`) follow `apps/sim/platform/AGENTS.md`; marketing surfaces (`app/(landing)`, docs) follow `constitution.md`.
16
+
This applies to app UI outside the Platform: settings rows, modals, panels, cards, list rows, empty states, form fields, and section headers. Platform views (`app/(product)`, `platform`) follow the stricter one-line-per-control rule in `apps/sim/platform/AGENTS.md`, which `check:platform-design` enforces (`helper-copy`); marketing surfaces (`app/(landing)`, docs) follow `constitution.md`.
17
17
18
18
**Carve-out — settings section metadata.**`SettingsNavigationItem.description` in `components/settings/navigation.ts` stays required, and `SettingsPanel` keeps rendering it as the page subtitle. Settings sections are reached through a nav list where the description is the only thing distinguishing adjacent sections, so it earns its place by the "prevents misunderstanding" test. Keep those descriptions verb-first and one line, per `sim-settings-pages.md`. Everything else on a settings page — inline `<p>` blurbs under section headings, field hints, modal bodies, row subtitles — follows the default rule above.
19
19
@@ -32,14 +32,14 @@ This applies to app UI outside the Platform: settings rows, modals, panels, card
32
32
<ChipModalFieldtitle='Workspace name' />
33
33
```
34
34
35
-
If a heading needs a subtitle to be understood, the heading is wrong. Fix the heading — don't append a second line.
35
+
If a heading needs a subtitle to be understood, the heading is wrong. Fix the heading — don't append a second line. For a field, bake the meaning into the line itself first: a format into the placeholder (`us-gov-west-1`), a bound or scope into the label (`Idle timeout (hours, min 1)`), a trade-off into the option (`Access keys (long-lived)`), or point to the dialog's setup guide.
36
36
37
37
## When supporting copy earns its place
38
38
39
39
Keep (or add) a description only when it carries information the label cannot, and its absence would cause a mistake:
40
40
41
41
-**Irreversible or destructive consequences** — "Deleting this workspace removes every workflow and log. This cannot be undone."
42
-
-**A non-obvious format, unit, or bound** — "Comma-separated. Max 50 domains.", "Cost per 1M input tokens."
42
+
-**A non-obvious format, unit, or bound the label, placeholder and options cannot hold** — "Comma-separated. Max 50 domains.", "Cost per 1M input tokens."
43
43
-**A security or access implication** — "This key is shown once and grants full workspace access."
44
44
-**A state the user cannot otherwise see** — "Inherited from your organization's policy."
45
45
-**Instructional copy that advances a flow** — "We sent a 6-digit code to you@example.com."
Copy file name to clipboardExpand all lines: .cursor/rules/sim-platform-views.mdc
+1Lines changed: 1 addition & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -17,6 +17,7 @@ like that" is not one.
17
17
18
18
| Job | Use | Never |
19
19
| --- | --- | --- |
20
+
| Explain a field, dialog or row | Its label, placeholder and options (`Access keys (long-lived)`); `error` for validation, `disabledReason` for a locked control, the dialog's Setup guide for steps | A `hint`, form `Modal` `description`, written `SettingsRow`/`DetailHeader` subtitle or data `hint` (`check:platform-design` `helper-copy`; a line that must stay is named in `HELPER_COPY_OWNERS`) |
20
21
| First read of a view | Render nothing for data-backed content while pending (static chrome renders at once), `FailureNotice` when the read fails, `EmptyState` when it settles empty. Read the query's `status`, not an empty list. An action's own pending label (`pendingLabel`, a Load action's `Loading…`) is feedback, not loading copy | A skeleton, shimmer, placeholder rows or loading copy (`check:platform-design` `loading-copy`); a pending hint, placeholder or detail line; treating empty as loading |
21
22
| Failed read | `FailureNotice`, labelled Retry. `intent='warning'` where the read partly answered | A hand-built retry button or `InlineNotice` + `Button` |
22
23
| Failed background refresh | `FailureNotice` above the content it keeps | Replacing content already on screen |
**Do not add subtitles, helper text, or descriptive copy beneath headings, labels, cards, or settings by default.** Prefer one concise, self-explanatory heading or label. Only add supporting copy when the user explicitly asks for it, or when it is necessary to prevent misunderstanding or error — and never use it to restate the heading.
11
11
12
-
This applies to app UI outside the Platform: settings rows, modals, panels, cards, list rows, empty states, form fields, and section headers. Platform views (`app/(product)`, `platform`) follow `apps/sim/platform/AGENTS.md`; marketing surfaces (`app/(landing)`, docs) follow `constitution.md`.
12
+
This applies to app UI outside the Platform: settings rows, modals, panels, cards, list rows, empty states, form fields, and section headers. Platform views (`app/(product)`, `platform`) follow the stricter one-line-per-control rule in `apps/sim/platform/AGENTS.md`, which `check:platform-design` enforces (`helper-copy`); marketing surfaces (`app/(landing)`, docs) follow `constitution.md`.
13
13
14
14
**Carve-out — settings section metadata.** `SettingsNavigationItem.description` in `components/settings/navigation.ts` stays required, and `SettingsPanel` keeps rendering it as the page subtitle. Settings sections are reached through a nav list where the description is the only thing distinguishing adjacent sections, so it earns its place by the "prevents misunderstanding" test. Keep those descriptions verb-first and one line, per `sim-settings-pages.md`. Everything else on a settings page — inline `<p>` blurbs under section headings, field hints, modal bodies, row subtitles — follows the default rule above.
15
15
@@ -28,14 +28,14 @@ This applies to app UI outside the Platform: settings rows, modals, panels, card
28
28
<ChipModalField title='Workspace name' />
29
29
```
30
30
31
-
If a heading needs a subtitle to be understood, the heading is wrong. Fix the heading — don't append a second line.
31
+
If a heading needs a subtitle to be understood, the heading is wrong. Fix the heading — don't append a second line. For a field, bake the meaning into the line itself first: a format into the placeholder (`us-gov-west-1`), a bound or scope into the label (`Idle timeout (hours, min 1)`), a trade-off into the option (`Access keys (long-lived)`), or point to the dialog's setup guide.
32
32
33
33
## When supporting copy earns its place
34
34
35
35
Keep (or add) a description only when it carries information the label cannot, and its absence would cause a mistake:
36
36
37
37
- **Irreversible or destructive consequences** — "Deleting this workspace removes every workflow and log. This cannot be undone."
38
-
- **A non-obvious format, unit, or bound** — "Comma-separated. Max 50 domains.", "Cost per 1M input tokens."
38
+
- **A non-obvious format, unit, or bound the label, placeholder and options cannot hold** — "Comma-separated. Max 50 domains.", "Cost per 1M input tokens."
39
39
- **A security or access implication** — "This key is shown once and grants full workspace access."
40
40
- **A state the user cannot otherwise see** — "Inherited from your organization's policy."
41
41
- **Instructional copy that advances a flow** — "We sent a 6-digit code to you@example.com."
0 commit comments