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
docs(spec): align GroupingConfig.fields and NotifyConfig sourceObject/sourceId describes with the measured acceptance face (#7111)
- GroupingConfigSchema.fields: drop the '(supports up to 3 levels)' claim —
the gate is .min(1) with no upper bound and the grid renderer recurses over
all configured levels; state the shape instead (array order = nesting
order, first entry outermost, at least one field). Fixes#7084.
- NotifyConfigSchema.sourceObject/sourceId: replace 'Requires ...' with the
module JSDoc's recorded tolerance — the pair only takes effect together; a
half-specified click-through target is dropped at execute time, so the
inbox never renders a dead link. Fixes#7085.
- Pin tests for both describes (non-empty arm first so the negative arms are
non-vacuous); regenerated the two reference pages; changeset (patch).
Acceptance face unchanged: check:authorable-surface and check:api-surface
green with zero diff on authorable-surface/**, json-schema.manifest/**,
authorable-defaults/, authorable-surface.base.json, api-surface/**.
Claude-Session: https://claude.ai/code/session_018ffcE95NaMJcL9XJ9VDYgk
Co-authored-by: Claude <noreply@anthropic.com>
Align two schema `.describe()` strings with their measured acceptance faces (docs-only; no acceptance change — every previously-valid input is judged byte-identically):
6
+
7
+
-`GroupingConfigSchema.fields` no longer claims "(supports up to 3 levels)". The gate is `.min(1)` with no upper bound, nothing downstream enforces a cap, and the grid renderer recurses over all configured levels — the describe now states the shape instead: array order is nesting order (first entry outermost), at least one field. (#7084)
8
+
-`NotifyConfigSchema.sourceObject` / `sourceId` no longer say "Requires sourceId." / "Requires sourceObject.". The schema deliberately accepts the half-specified pair — the executor drops it at execute time so the inbox never renders a dead link (the module JSDoc's recorded contract) — and the describes now state that tolerance. (#7085)
|**severity**|`string`| optional | info \| warning \| critical |
104
-
|**sourceObject**|`string`| optional | Object name of the record the notification links to (writes sys_notification.source_object). Requires sourceId. |
105
-
|**sourceId**|`string`| optional | Record id the notification links to (writes sys_notification.source_id). Requires sourceObject. |
104
+
|**sourceObject**|`string`| optional | Object name of the record the notification links to (writes sys_notification.source_object). Only takes effect together with sourceId — a half-specified click-through target is dropped at execute time, so the inbox never renders a dead link. |
105
+
|**sourceId**|`string`| optional | Record id the notification links to (writes sys_notification.source_id). Only takes effect together with sourceObject — a half-specified click-through target is dropped at execute time, so the inbox never renders a dead link. |
106
106
|**actorId**|`string`| optional | User id that caused the event (writes sys_notification.actor_id) |
107
107
|**actionUrl**|`string`| optional | Explicit click-through URL; overrides the link synthesized from sourceObject/sourceId |
108
108
|**payload**|`Record<string, any>`| optional | Extra template inputs merged into the notification payload |
Copy file name to clipboardExpand all lines: content/docs/references/ui/view.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -340,7 +340,7 @@ Record grouping configuration
340
340
341
341
| Property | Type | Required | Description |
342
342
| :--- | :--- | :--- | :--- |
343
-
|**fields**|`{ field: string; order: Enum<'asc' \| 'desc'>; collapsed: boolean }[]`| ✅ | Fields to group by (supports up to 3 levels) |
343
+
|**fields**|`{ field: string; order: Enum<'asc' \| 'desc'>; collapsed: boolean }[]`| ✅ | Fields to group by, in nesting order — the first entry is the outermost group and each later entry nests one level deeper (at least one field) |
/** Click-through target object — only effective together with `sourceId` (#2675). */
162
162
sourceObject: z.string().optional()
163
-
.describe('Object name of the record the notification links to (writes sys_notification.source_object). Requires sourceId.'),
163
+
.describe('Object name of the record the notification links to (writes sys_notification.source_object). Only takes effect together with sourceId — a half-specified click-through target is dropped at execute time, so the inbox never renders a dead link.'),
164
164
/** Click-through target record id — only effective together with `sourceObject`. */
165
165
sourceId: z.string().optional()
166
-
.describe('Record id the notification links to (writes sys_notification.source_id). Requires sourceObject.'),
166
+
.describe('Record id the notification links to (writes sys_notification.source_id). Only takes effect together with sourceObject — a half-specified click-through target is dropped at execute time, so the inbox never renders a dead link.'),
167
167
/** User id that caused the event. */
168
168
actorId: z.string().optional().describe('User id that caused the event (writes sys_notification.actor_id)'),
169
169
/** Explicit click-through URL; overrides the sourceObject/sourceId link. */
fields: z.array(GroupingFieldSchema).min(1).describe('Fields to group by (supports up to 3 levels)'),
562
+
fields: z.array(GroupingFieldSchema).min(1).describe('Fields to group by, in nesting order — the first entry is the outermost group and each later entry nests one level deeper (at least one field)'),
0 commit comments