@wix/agent-skills 1.32.0 → 1.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +21 -0
  2. package/package.json +2 -2
  3. package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
  4. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +40 -41
  5. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +11 -6
  6. package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +2 -3
  7. package/skills/wix-app/references/editor-react-component/DISABLED-INVALID.md +31 -0
  8. package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +14 -1
  9. package/skills/wix-app/references/editor-react-component/PARTS.md +32 -3
  10. package/skills/wix-app/references/editor-react-component/SSR.md +6 -3
  11. package/skills/wix-headless-kit/install/pins.json +1 -1
  12. package/skills/wix-manage/SKILL.md +25 -7
  13. package/skills/wix-manage/references/automations/actions.md +11 -11
  14. package/skills/wix-manage/references/automations/activation-status.md +6 -9
  15. package/skills/wix-manage/references/automations/api-catalog.md +48 -32
  16. package/skills/wix-manage/references/automations/automation-model.md +97 -22
  17. package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
  18. package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
  19. package/skills/wix-manage/references/automations/conditions.md +187 -0
  20. package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
  21. package/skills/wix-manage/references/automations/special-actions.md +210 -0
  22. package/skills/wix-manage/references/automations/triggers.md +47 -10
  23. package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
  24. package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
  25. package/skills/wix-manage/references/events/create-wix-event.md +136 -73
  26. package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
  27. package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
  28. package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
  29. package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
  30. package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
package/README.md CHANGED
@@ -39,6 +39,16 @@ Install using [Gemini CLI](https://geminicli.com):
39
39
  gemini extensions install https://github.com/wix/skills
40
40
  ```
41
41
 
42
+ ### Antigravity Plugin
43
+
44
+ In [Antigravity](https://antigravity.google), open **Customizations → Plugins**, click **+ Install from URL**, and enter `https://github.com/wix/skills/tree/main/antigravity/wix`. Or, from a terminal:
45
+
46
+ ```bash
47
+ agy plugin install https://github.com/wix/skills/tree/main/antigravity/wix
48
+ ```
49
+
50
+ The Wix MCP server signs you in to your Wix account the first time a Wix tool is used.
51
+
42
52
  ### Skills CLI
43
53
 
44
54
  Install using [skills CLI](https://github.com/vercel-labs/skills):
@@ -93,6 +103,17 @@ When a major bump is required (a breaking change in the underlying `wix-cli`), t
93
103
 
94
104
  Besides the npm package, skills are served as raw markdown / `.tgz` at `https://www.wix.com/skills/<name>` (also `dev.wix.com/skills`), directly from the `main` branch of `wix/skills` with no build step. Responses are cached, so a change reflects there within a few minutes of reaching that branch.
95
105
 
106
+ ## Privacy and telemetry
107
+
108
+ Only `wix-replatform` collects telemetry. The other skills send nothing of their own; calls they make to Wix APIs and the Wix MCP are covered by the [Wix Privacy Policy](https://www.wix.com/about/privacy).
109
+
110
+ During a migration run, `wix-replatform`:
111
+
112
+ - **Sends run telemetry to Wix** (`https://frog.wix.com/migration-data-validator`): stage timings and outcomes, migrated record counts, errors and gaps by type (never record contents), the source platform and site URL, the destination site ID and the operator's Wix user ID. Turn it off with `RP_TELEMETRY_BI_DISABLED=1`.
113
+ - **Reads the agent's Claude Code session transcripts** (`~/.claude/projects/`) at the end of the run, copies them compressed into the migration project's `telemetry/transcripts/` folder on your machine, and adds a summary (token cost, turn counts, tool failures, retry loops) to the run telemetry. The transcripts themselves stay local. Turn it off with `RP_TELEMETRY_TRANSCRIPT_DISABLED=1`.
114
+
115
+ Set the variables in the environment the agent runs in. See [wix-replatform/README.md](wix-replatform/README.md).
116
+
96
117
  ## Contributing
97
118
 
98
119
  To report a problem with a skill or suggest a change, [open an issue](https://github.com/wix/skills/issues/new). Pull requests are not merged in this repository; accepted changes are made by the maintainers. See [CONTRIBUTING.md](CONTRIBUTING.md) for what makes a useful report.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/agent-skills",
3
- "version": "1.32.0",
3
+ "version": "1.33.1",
4
4
  "description": "Wix Skills for AI coding agents — versioned npm distribution of the wix/skills content.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -12,7 +12,7 @@
12
12
  "url": "https://github.com/wix/skills/issues"
13
13
  },
14
14
  "scripts": {
15
- "version": "node .github/scripts/sync-plugin-versions.mjs && git add .claude-plugin/plugin.json .codex-plugin/plugin.json .cursor-plugin/plugin.json plugin.json gemini-extension.json skills/wix-headless-kit/install/pins.json"
15
+ "version": "node .github/scripts/sync-plugin-versions.mjs && git add .claude-plugin/plugin.json .codex-plugin/plugin.json .cursor-plugin/plugin.json plugin.json gemini-extension.json antigravity/wix/plugin.json skills/wix-headless-kit/install/pins.json"
16
16
  },
17
17
  "files": [
18
18
  "skills/**",
@@ -33,7 +33,7 @@ The CLI generates the folder, the page's component file (`<page>.tsx`, the build
33
33
 
34
34
  **After scaffolding, check `routePath`:** use `support-tickets`, not `/support-tickets`; a leading slash fails registration even if the build passes. Internal router paths stay `/`, `/:id`, `/new`, never prefixed with `<route>` — see `<pkgRoot>/dist/docs/Collection to Entity Flow.md`.
35
35
 
36
- **Before writing that UI:** copy in the installed `@wix/patterns` page template that matches, per [DRAFT_TEMPLATE.md](dashboard-page/DRAFT_TEMPLATE.md) — don't compose the shell from scratch.
36
+ **Before writing UI:** copy the [template](dashboard-page/DRAFT_TEMPLATE.md). Make sure `WixPatternsProvider` remains at the extension root, inside `BusinessManagerTheme` and above all components calling Patterns hooks.
37
37
 
38
38
  **Then, for whatever the template doesn't cover:** list every patterns name you'll add, and resolve them all in one `node <pkgRoot>/bin/patterns-lookup.cjs <name…>` call ([WIX_PATTERNS_DOCS.md § 1](WIX_PATTERNS_DOCS.md#1--the-index)). Its import, examples and props file decide whether you open anything else. Each Bash call is a fresh shell — re-set the path variable every time.
39
39
 
@@ -19,6 +19,24 @@ Keep the Wix CLI scaffold and file roles:
19
19
 
20
20
  Supplementary files are allowed; keep scaffold roles intact.
21
21
 
22
+ ## Required Reading (blocking)
23
+
24
+ Before writing code, open and read in full every reference in the matching
25
+ row. An unopened one is a failed run. Open paths directly; never skim or
26
+ grep instead.
27
+
28
+ | Scope | Required references |
29
+ | --- | --- |
30
+ | Creating a component | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md), [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md), [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md), [`OVERFLOW.md`](editor-react-component/OVERFLOW.md) |
31
+ | Editing React or JSX | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md) |
32
+ | Changing public contract, semantic root, or named parts | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md) |
33
+ | Changing public data props or elected root global class | [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) |
34
+ | Item array where only one body is visible | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) |
35
+ | Creating or changing CSS | [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md) |
36
+ | Creating or changing layout/content | [`OVERFLOW.md`](editor-react-component/OVERFLOW.md) |
37
+ | Root direction contract, direction-sensitive behavior, or `ReactNode` slot | [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md) |
38
+ | Sizing, installation, or manifest overrides | [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md) |
39
+
22
40
  ## Workflow
23
41
 
24
42
  1. **Scaffold only when creating.** Run in the Wix app (`wix.config.json`).
@@ -31,9 +49,9 @@ Supplementary files are allowed; keep scaffold roles intact.
31
49
  Never rerun the scaffold for an existing component.
32
50
  Write a meaningful `description` in 1-2 plain sentences (max 300 chars): what
33
51
  the user sees, when to use it, and capabilities that affect that choice.
34
- Don't repeat the component name or add implementation details.
52
+ Don't repeat the name or add implementation details.
35
53
 
36
- 2. **Run the dependency preflight.** Check required packages:
54
+ 2. **Run the dependency preflight.**
37
55
 
38
56
  ```bash
39
57
  deps=(@wix/react-component-schema @wix/react-component-utils @wix/editor-react-types)
@@ -56,16 +74,15 @@ Supplementary files are allowed; keep scaffold roles intact.
56
74
  }
57
75
  ```
58
76
 
59
- 3. **Plan.** Identify props, root, parts, and states; read routed references.
60
- Use the scaffold and references before inspecting package declarations.
61
- Inspect only needed declarations resolved by the app for undocumented APIs
62
- or fields, or typecheck failures. They govern API shapes; retain editor rules.
77
+ 3. **Plan.** Identify props, root, parts, and states; open all required references first.
78
+ Use them and the scaffold before inspecting package declarations; inspect
79
+ only for undocumented APIs or fields, or typecheck failures. Declarations
80
+ govern API shapes; retain editor rules.
63
81
 
64
82
  4. **Implement.** Keep props, logic, and styles in their scaffolded editable
65
- files. Format edited source files with the app's configured formatter before
66
- checking formatting. Never edit or format `*.generated.ts`.
83
+ files. Format edited source files with the app's formatter. Never edit or format `*.generated.ts`.
67
84
 
68
- 5. **Run the accessibility review.** Once the JSX is complete, run from the
85
+ 5. **Run the accessibility review (mandatory).** Once the JSX is complete, run from the
69
86
  same folder (`<SKILL_ROOT>` is the directory containing the active `SKILL.md`):
70
87
 
71
88
  ```bash
@@ -89,43 +106,30 @@ Supplementary files are allowed; keep scaffold roles intact.
89
106
  ```
90
107
 
91
108
  Run `npx tsc --noEmit`, relevant tests/lint, and the accessibility review.
92
- If later edits affect a check, rerun that
93
- check. Inspect the manifest when generated; never hand-repair it. Diagnose
94
- failures with
109
+ If later edits affect a check, rerun that check. Inspect the manifest when generated; never hand-repair it.
110
+ Diagnose failures with
95
111
  [`editor-react-component/MANIFEST-ERRORS.md`](editor-react-component/MANIFEST-ERRORS.md).
96
112
 
97
113
  For creation/layout changes, complete the routed overflow resize review.
98
114
 
99
- 8. **Report.** Summarize files, checks, blockers, and checks that could not run.
115
+ 8. **Report.** Summarize files, checks, blockers, unrun checks.
116
+ List required references as read/unread; read any unread one and fix first.
100
117
 
101
118
  ## Reference Policy
102
119
 
103
- Read only matched references. Preserve unrelated behavior. `SKILL.md` routes;
104
- references are leaves.
105
-
106
- ### Required References
107
-
108
- | Scope | Required references |
109
- | --- | --- |
110
- | Creating a component | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md), [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md), [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md) |
111
- | Editing React or JSX | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md) |
112
- | Changing public contract, semantic root, or named parts | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md) |
113
- | Changing public data props or elected root global class | [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) |
114
- | Item array where only one body is visible | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) |
115
- | Creating or changing CSS | [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md) |
116
- | Creating or changing layout/content | [`OVERFLOW.md`](editor-react-component/OVERFLOW.md) |
117
- | Root direction contract, direction-sensitive behavior, or `ReactNode` slot | [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md) |
118
- | Sizing, installation, or manifest overrides | [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md) |
120
+ Read every required reference for the matched scope, optional ones only on
121
+ trigger. Preserve unrelated behavior. References are leaves.
119
122
 
120
123
  ### Optional References
121
124
 
122
125
  | Trigger | Read |
123
126
  | --- | --- |
124
127
  | Interactive/selectable part, custom state, or open/reveal toggle | [`DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) |
128
+ | Disabled or invalid state | [`DISABLED-INVALID.md`](editor-react-component/DISABLED-INVALID.md) |
125
129
  | Creating interactive components or changing interactions/callbacks | [`FUNCTION-HANDLERS.md`](editor-react-component/FUNCTION-HANDLERS.md) |
126
130
  | Browser APIs, effects, or time-dependent output | [`SSR.md`](editor-react-component/SSR.md) |
127
131
  | Non-established CSS feature or DOM API, or user asks for one by name | [`BROWSER-SUPPORT.md`](editor-react-component/BROWSER-SUPPORT.md) |
128
- | `npx wix build` or manifest generation exits with an error | [`MANIFEST-ERRORS.md`](editor-react-component/MANIFEST-ERRORS.md) |
132
+ | `npx wix build` or manifest generation errors or warns | [`MANIFEST-ERRORS.md`](editor-react-component/MANIFEST-ERRORS.md) |
129
133
  | Animation, video, carousel, or other playable/looped/autoplaying content | [`ANIMATED-COMPONENTS.md`](editor-react-component/ANIMATED-COMPONENTS.md), [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) |
130
134
  | Site/runtime/editor context hooks needed | [`SITE-CONTEXT-HOOKS.md`](editor-react-component/SITE-CONTEXT-HOOKS.md) (+ [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) when design-mode behavior differs) |
131
135
  | Branded, themed, or brand-aware component requested | [`BRANDED-COMPONENTS.md`](editor-react-component/BRANDED-COMPONENTS.md) |
@@ -137,9 +141,7 @@ references are leaves.
137
141
  - Elected root: `dir={direction}`, fallback-direction class, logical CSS for
138
142
  direction-sensitive layout.
139
143
  - Deterministic render; no browser globals during render.
140
- - Explicit foreground colors need a known contrasting background; transparent
141
- roots inherit from the host.
142
- - Baseline Widely Available CSS/DOM only, or supported fallbacks.
144
+ - Baseline Widely Available CSS/DOM only, or fallbacks.
143
145
  - Accessibility per part, per [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md):
144
146
  read only `a11y.ariaLabel`, and only for a control without a visible name;
145
147
  never spread the `a11y` object or add one-off ARIA props.
@@ -149,17 +151,14 @@ references are leaves.
149
151
  - Native design states: interactive elements only, never a non-interactive root
150
152
  or part; pair selectors with injected modifiers; toggle custom state classes
151
153
  from data, each with a matching `:global()` rule.
152
- - Open/close/reveal (click/hover/focus): props-only root
154
+ - Open/close/reveal: props-only root
153
155
  `isOpen: ElementState<boolean>` synced to state; module classes, no `--open` class.
154
156
  - Single-visible-body arrays: `name` per item, `ActiveItemIndex<'prop'>`, render
155
157
  all bodies, hide inactive accessibly.
156
158
  - No arrays inside array items; keep group fields flat (no object props).
157
159
  - Autoplay/loop: play/pause control, honor reduced motion, suppress autoplay in
158
160
  editor design mode.
159
- - Resizable layout: keep required content usable at 320px. Reflow visible
160
- groups inside their page and cap track minima with
161
- `minmax(min(100%, <minimum>), 1fr)`. Follow [`OVERFLOW.md`](editor-react-component/OVERFLOW.md).
162
- - Preview composition, inline or through variables:
163
- `withDefaults(withFallbackPlaceholder(PreviewOrComponent, options), defaultProps)`.
164
- Keep `withDefaults` outermost; use one crucial data field and match the root
165
- class.
161
+ - Resizable layout: keep required content usable at 320px, per
162
+ [`OVERFLOW.md`](editor-react-component/OVERFLOW.md).
163
+ - Preview: `withDefaults` outermost, one crucial data field, matching root
164
+ class, per [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md).
@@ -64,19 +64,24 @@ export interface MyAnimationProps {
64
64
  direction?: Direction;
65
65
  a11y?: A11y;
66
66
 
67
- /** Start playing on load. Default `true`. */
67
+ /** Start playing on load. */
68
68
  autoPlay?: boolean;
69
69
 
70
- /** Repeat when finished. Default `true`. */
70
+ /** Repeat when finished. */
71
71
  loop?: boolean;
72
72
 
73
- /** Show play/pause button. Default `'showOnHover'`. */
74
73
  pauseButtonVisibility?: 'showAlways' | 'showOnHover';
75
74
 
76
75
  elementProps?: {
77
76
  myAnimationPlayButton?: { className?: string };
78
77
  };
79
78
  }
79
+
80
+ export const defaultProps = {
81
+ autoPlay: true,
82
+ loop: true,
83
+ pauseButtonVisibility: 'showAlways',
84
+ } as const;
80
85
  ```
81
86
 
82
87
  Omit `loop` when repeat is unsupported.
@@ -183,7 +188,7 @@ Set the visibility data attribute on the existing elected root, preserving its
183
188
  full root contract:
184
189
 
185
190
  ```tsx
186
- data-pause-button-visibility={pauseButtonVisibility ?? 'showOnHover'}
191
+ data-pause-button-visibility={pauseButtonVisibility}
187
192
  ```
188
193
 
189
194
  Wire the named part completely:
@@ -210,7 +215,7 @@ Wire the named part completely:
210
215
  /* Narrow behavior-only exception documented in CSS-GUIDELINES.md. Keep editable
211
216
  appearance on .playButton and use this relationship only for visibility. */
212
217
 
213
- /* showOnHover (default) */
218
+ /* showOnHover */
214
219
  .root[data-pause-button-visibility="showOnHover"] .playButton {
215
220
  opacity: 0;
216
221
  pointer-events: none;
@@ -222,7 +227,7 @@ Wire the named part completely:
222
227
  pointer-events: auto;
223
228
  }
224
229
 
225
- /* showAlways — no extra CSS needed; button is visible by default */
230
+ /* showAlways (default) — no extra CSS needed; button is visible by default */
226
231
  ```
227
232
 
228
233
  ## 4. Suppress Autoplay in `component.preview.tsx`
@@ -23,7 +23,8 @@ in the component's `.tsx` and `.module.css`.
23
23
  | Interactive — `button`/`a`/`input`/`select`/`textarea`/`summary`, an interactive `role`, or an interactive handler (`onClick`/`onMouseEnter`/`onFocus`/…) | `hover` |
24
24
  | Input field — `select`/`textarea`; `input` except `hidden`/`button`/`submit`/`reset`/`image`; or an input-widget `role` (`checkbox`/`radio`/`switch`/`slider`/`spinbutton`/`textbox`/`searchbox`/`combobox`/`listbox`) | `focus` |
25
25
  | Other interactive element whose editable focus appearance the user explicitly requests | `focus` |
26
- | Disableable — `button`/`input`/`select`/`textarea`/`fieldset` or a disableable role | `disabled` (+ `invalid` for `input`/`select`/`textarea`) |
26
+ | `button`/`input`/`select`/`textarea`/`fieldset` when asked or its action can be unavailable | `disabled` |
27
+ | `input`/`select`/`textarea` with a constraint or `setCustomValidity`; a `form`/`fieldset` with one | `invalid` |
27
28
  | Has a selectable/variant value in its data — `selected`/`active`/`current`/`checked`/`featured` | that custom state |
28
29
  | Whole component opens/collapses or reveals content (expandable panel, disclosure, dropdown, drawer, popup, tooltip) on click, hover or focus | root `isOpen` state, no part `open` state (§6) |
29
30
  | None of the above, incl. a non-interactive root or part | no states, and no `:hover`/`:active`/`:focus` rules, even decorative; resting style only |
@@ -110,8 +111,6 @@ The local static accessibility scan cannot measure rendered color contrast.
110
111
  spread alone suffices (it merges `className` itself). The key is the global
111
112
  class in camelCase (`COMPONENT-CONTRACT.md`).
112
113
 
113
- Wire native and custom states as follows:
114
-
115
114
  ```tsx
116
115
  <button
117
116
  type="button"
@@ -0,0 +1,31 @@
1
+ # Disabled and Invalid Wiring
2
+
3
+ Use after DESIGN-STATES.md §1 decides a part exposes `disabled` or `invalid`. A
4
+ native element's `:disabled` or `:invalid`, paired with the `:global` modifier in
5
+ the §3 rule, is what generates the state.
6
+
7
+ ## Disabled
8
+
9
+ Author it when asked, or when the control stays visible but its action can be
10
+ unavailable (unmet precondition, request in progress, sold out). Otherwise author
11
+ no `disabled` binding and no `--disabled` rule.
12
+
13
+ ## Invalid
14
+
15
+ Author it only for a native field with a constraint (`required`, `pattern`,
16
+ `type="email"`, …) or a `setCustomValidity` message. An unconstrained field is
17
+ never invalid.
18
+
19
+ For validity from outside the field (a server check, a password confirmation),
20
+ call `setCustomValidity` in the component file, on the field itself: through a
21
+ ref bound with `ref={confirmRef}`, a callback ref, or `event.currentTarget` in an
22
+ `on*` handler (inline, or a function of the component passed by name). The field may be in a component of the same file
23
+ that renders it. Not from a custom hook, a function outside the component, or
24
+ another file, and not through a ref given to a custom component. A field in a loop
25
+ or rendered conditionally is detected when every field with that `ref` or handler
26
+ prop calls it. If only some do, the ones that do may not be detected: give them a
27
+ constraint prop instead, otherwise leave `invalid` off them.
28
+
29
+ A `form` or `fieldset` is invalid when a field inside it is
30
+ (`.form:global(.signup-form--invalid), .form:invalid`), with no constraint of its
31
+ own; with no constrained field it is never invalid.
@@ -1,7 +1,7 @@
1
1
  # Manifest Build Errors
2
2
 
3
3
  Use this reference only when `npx wix build` or `npx wix generate manifest`
4
- exits with an error. Read the error name from the first token before the colon
4
+ exits with an error or prints a warning. For an error, read the error name from the first token before the colon
5
5
  (`IoError:`, `ParseError:`, or `NotFoundError:`), then apply the matching fix.
6
6
 
7
7
  | Error | Fix |
@@ -20,6 +20,19 @@ exits with an error. Read the error name from the first token before the colon
20
20
 
21
21
  After each fix, re-run `npx wix build && npx wix generate manifest` to confirm.
22
22
 
23
+ ## Warnings
24
+
25
+ The build can also print non-fatal warnings such as
26
+ `[css] … styles selectors that matched no element in the extraction render`.
27
+ Read every warning and fix it; this is mandatory, with one exception below.
28
+
29
+ - **A part's own class** (`.errorMessage`, `.item`) means the part is not
30
+ mounted in the extraction render. Keep it mounted per `PARTS.md`, then
31
+ re-run build and manifest generation.
32
+ - **A class applied only by state** (`.contentOpen` from `open && styles.contentOpen`)
33
+ is expected: the part is mounted and only the state look is absent. Leave the
34
+ markup and CSS unchanged; do not force the state on or remove the styling.
35
+
23
36
  ## Checklist
24
37
 
25
38
  - [ ] The fix matches the reported error name and message.
@@ -46,9 +46,38 @@ Apply this filter to every candidate:
46
46
  share the same semantic editor surface. Distinguish position with data or a
47
47
  module-only helper class, not separate part names.
48
48
 
49
- The manifest generator can silently omit a named part behind conditional JSX.
50
- Keep an editor-controlled part mounted in the render it inspects. Hide it with
51
- CSS driven by a data attribute, or disable it when it should remain visible.
49
+ ## Keep Every Part Mounted
50
+
51
+ The manifest is generated from a single server-side render of the component
52
+ with mock props. Effects do not run and `useState` keeps its initial value, so
53
+ markup that is not mounted in that render, and the CSS that styles it, never
54
+ reaches the manifest. The source is not changed afterwards: write it so every
55
+ part is mounted regardless of state.
56
+
57
+ - Mount every phase (loading, error, empty, question, result) and hide the
58
+ inactive ones with the `hidden` attribute. Never write
59
+ `phase === 'x' && <Part />`. Give a `hidden` element no author `display`
60
+ rule: it would override `hidden`.
61
+ - While data is missing, render one static placeholder item inside a hidden
62
+ wrapper so the item parts exist. It is never visible.
63
+ - Mutually exclusive messages (loading, error, empty) are one part whose text
64
+ switches by phase, not several parts with the same name.
65
+ - A modifier toggled by state (`correct`, `incorrect`) is a design state; see
66
+ `DESIGN-STATES.md`.
67
+
68
+ ```tsx
69
+ const item = current ?? placeholderItem; // placeholder shows only while hidden
70
+
71
+ <div hidden={phase !== 'question'}>
72
+ <h3
73
+ {...elementProps?.quizQuestion}
74
+ className={classNames('quiz-question', styles.question, elementProps?.quizQuestion?.className)}
75
+ >
76
+ {item.question}
77
+ </h3>
78
+ </div>
79
+ ```
80
+
52
81
  After generating the manifest, confirm that its `elements` include every
53
82
  intended named part and that each `elementProps.<key>` read in code equals the
54
83
  camelCase of that part's global class.
@@ -29,9 +29,11 @@ const items = buildItems(props.items);
29
29
  return <ul>{items.map(renderItem)}</ul>;
30
30
  ```
31
31
 
32
- This does not require every data branch to render simultaneously. Empty,
33
- loading, and error states may be conditional when their initial value is stable
34
- and the same on server and client.
32
+ This does not require every data branch to render simultaneously: loading,
33
+ empty, and error states may be conditional when their initial value is stable
34
+ and the same on server and client. A branch that contains a named part must
35
+ still be mounted in the first render, or the manifest omits that part (see
36
+ `PARTS.md`).
35
37
 
36
38
  ## Deterministic Output
37
39
 
@@ -47,4 +49,5 @@ format, or a client-only enhancement that does not replace the initial markup.
47
49
 
48
50
  - [ ] No browser globals are accessed at module scope or during render.
49
51
  - [ ] Initial server/client markup is complete and identical.
52
+ - [ ] Every named part is mounted in the first render.
50
53
  - [ ] Render output does not depend on random, clock, locale, or timezone state.
@@ -3,6 +3,6 @@
3
3
  "@wix/create-new": "0.0.124",
4
4
  "typescript": "5.8.3",
5
5
  "templates": {
6
- "ref": "v1.32.0"
6
+ "ref": "v1.33.1"
7
7
  }
8
8
  }
@@ -36,8 +36,8 @@ Lists all apps installed on a site using Apps Installer API. Useful for verifyin
36
36
 
37
37
  ## Custom Apps
38
38
 
39
- ### [Use App Skills and App Tools](references/custom-apps/use-app-skills-and-app-tools.md)
40
- "Discovers and runs what the apps installed on a Wix site add for AI agents: app skills, which are an app's instructions for a task (for example pricing a product for customers in another country, or checking a property listing before it is published), and app tools, which are actions and lookups an app exposes. Use every time a site has custom apps installed, before acting on the user's request: knowing which apps are installed doesn't tell what they can do, so only this skill's discovery calls show whether one of them handles the request. Also use when the user asks for something an installed app provides rather than a built-in Wix feature, asks what their apps can do, or names an app, skill or tool. Covers reading a chosen skill's instructions and running the app tools it allows, or running a single app tool directly."
39
+ ### [Use App Tools](references/custom-apps/use-app-tools.md)
40
+ "Discovers and runs app tools, the actions and lookups that apps installed on a Wix site expose to AI agents, for example converting a price with a pricing app or tracking a package with a shipping app. Covers listing the site's app tools, choosing one by its description, and running it with a payload built from its input schema. Use when the user asks for something an installed app provides rather than a built-in Wix feature, asks what their apps can do, or names an app or app tool."
41
41
 
42
42
  ---
43
43
 
@@ -237,10 +237,16 @@ Routes discounts, coupons, sales and bundles to promotion recipes, and visual pr
237
237
  ## Events
238
238
 
239
239
  ### [Create an Event with the Wix Events API](references/events/create-wix-event.md)
240
- "Creates an event with the Wix Events V3 API — the required request body, ISO-8601 date and time settings, venue/online/TBD location, RSVP vs ticketed registration, guest capacity, short vs rich-text descriptions, ticket tiers and pricing, and recurring series. Covers the exact field shapes and the API's misleading validation messages. Use when the user wants to create an event, set its date, location, description, guest limit or ticket prices, or set up a repeating event."
240
+ "Creates an event with the Wix Events V3 API — one-off or recurring, RSVP, ticketed, registration-free or with external registration — including date and time, venue or online location, guest limit, description and ticket tiers. Covers the exact field shapes and the API's misleading validation messages. Use when the user wants to create or set up an event, an information-only event, or a repeating event — including a weekly workshop, class or meetup series held on set dates at a venue or online; a Bookings class or course is booked per session instead."
241
241
 
242
242
  ### [Manage Wix Events — Publishing, Cancelling, Cloning and Counting](references/events/manage-wix-events.md)
243
- "Operates on events that already exist with the Wix Events V3 API — finding an event by title, publishing a draft, cancelling, deleting (one or by filter), cloning, updating an event's date or details, and counting events. Use when the user wants to find, publish or cancel an event, duplicate one, move an event's date, delete events in bulk, or count their events. Creating an event, its tickets or a recurring series is a separate recipe."
243
+ "Operates on Wix events that already exist with the Wix Events V3 API — finding, updating (date, venue, details, page settings), controlling registration (close, reopen, registration-free, external, members-only, limits), switching between RSVP and ticketed (a new event — ask before creating it), publishing, cancelling, deleting, cloning and counting, including single occurrences of a recurring event. Use to close registration, move or cancel an event, or change how guests register."
244
+
245
+ ### [Manage Event Tickets](references/events/manage-event-tickets.md)
246
+ "Manages the ticket types of a ticketed Wix event with the Ticket Definitions V3 API — adding, editing, repricing, hiding, reordering and deleting tickets, scheduling or ending ticket sales, and changing the ticket currency. Use when the user wants to add early-bird, VIP, child or donation tickets to an existing event, change a ticket's price or quantity, or set when tickets stop selling."
247
+
248
+ ### [Manage Event Guests](references/events/manage-event-guests.md)
249
+ "Manages the people registered for a Wix event — RSVPs on RSVP events, and orders, tickets and ticket holders on ticketed events: listing and counting guests, adding or removing a guest, changing an RSVP, checking guests in, and marking orders paid. Use when the user asks who is coming or how many registered, or wants to add, remove or check in a guest. Notes what the API can't do, such as refunds and resending emails."
244
250
 
245
251
  ---
246
252
 
@@ -455,7 +461,7 @@ Query and list products from a Wix Store using the Catalog V1 Query Products end
455
461
  Manages pre-order settings for product variants using V3 Inventory API. Covers enabling/disabling pre-orders, setting messages, configuring limits, and handling trackQuantity requirements.
456
462
 
457
463
  ### [Update Product with Options (Catalog V3)](references/stores/update-product-with-options.md)
458
- Start here for existing Catalog V3 product updates, including digital products that fail at add-to-cart with ITEM_NOT_FOUND_IN_CATALOG. Includes name lookup, Get Product, and PATCH in one flow, plus importing a supplied PDF and attaching it to the existing variant. Covers options, variant prices and SKUs, product visibility (hide/unhide through `visible`, never delete), description edits that preserve Rich Content, and revision-based updates. Read another recipe only for a field or operation this flow does not cover.
464
+ Start here for existing Catalog V3 product updates, including digital products that fail at add-to-cart with ITEM_NOT_FOUND_IN_CATALOG. Includes name lookup, Get Product, and PATCH in one flow, plus importing a supplied PDF and attaching it to the existing variant. Covers options, variant prices and SKUs, variant shipping weight in the site's weight unit, product visibility (hide/unhide through `visible`, never delete), description edits that preserve Rich Content, and revision-based updates. Read another recipe only for a field or operation this flow does not cover.
459
465
 
460
466
  ### [Stores Dashboard Navigation](references/stores/stores-dashboard-navigation.md)
461
467
  "Builds direct links to Wix Stores and eCommerce dashboard pages on manage.wix.com — products list, edit a specific product, categories, inventory, orders list, a specific order, abandoned checkouts, gift cards, shipping and tax settings. Pairs each main Stores/eCommerce entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."
@@ -464,7 +470,7 @@ Start here for existing Catalog V3 product updates, including digital products t
464
470
  ## Automations
465
471
 
466
472
  ### [Build and Manage Wix Automations](references/automations/build-and-manage-automations.md)
467
- Inspect Wix automations and their on/off status, create linear automations from the site’s installed triggers and actions, and turn automations on or off on request.
473
+ Create, update, activate or deactivate Wix Automations with app actions, trigger filters, conditions, delays, variables, branches and schedules, and check their current status, using the public Wix Automations APIs.
468
474
 
469
475
  <details>
470
476
  <summary>Internal skills (loaded on demand by Build and Manage Wix Automations — do NOT use directly)</summary>
@@ -484,8 +490,20 @@ Inspect Wix automations and their on/off status, create linear automations from
484
490
  - [Automations Mapping Expressions](references/automations/bracket-expressions.md)
485
491
  Write builder-compatible automation mapping expressions, literals and data references.
486
492
 
493
+ - [Automations Conditions](references/automations/conditions.md)
494
+ Configure visual and code conditions while preserving boolean intent, comparison boundaries and builder editability.
495
+
496
+ - [Automations Delays Variables and Branches](references/automations/special-actions.md)
497
+ Configure delay, rate-limit, variable and parallel-branch steps, preserving supported existing step metadata.
498
+
499
+ - [Automations Schemas and Scheduling](references/automations/schemas-and-scheduling.md)
500
+ Configure dynamic schemas and scheduled automation triggers with correct timezone and calendar behavior.
501
+
502
+ - [Automations Validation and Persistence](references/automations/validation-and-verification.md)
503
+ Validate automation configuration, check builder compatibility, persist changes and verify the saved result.
504
+
487
505
  - [Automations Activation Status](references/automations/activation-status.md)
488
- Read an automation’s current ACTIVE or INACTIVE status, and activate or deactivate it when the user asks.
506
+ Inspect or change active status with lock checks, revision handling and read-back, without requiring unrelated repairs before deactivation.
489
507
 
490
508
  </details>
491
509
 
@@ -3,7 +3,7 @@ name: "Automations Action Configuration"
3
3
  description: "Configure app-defined automation actions from their input schemas and preserve supported existing action mappings."
4
4
  ---
5
5
 
6
- > **Stage scope:** this stage covers only what [Build and Manage Wix Automations](https://dev.wix.com/docs/api-reference/business-management/automations/skills/build-and-manage-wix-automations) lists; do not perform anything marked "Later stages only" or any workflow that needs a guide marked "not yet published". "Stage", "Later stages only" and "not yet published" describe how this skill is being rolled out; never mention them to the user. Explain a limit in product terms: what can't be done through the API here and where the user can do it instead (for example, in the automations builder).
6
+ > **Stage scope:** this stage covers only what [Build and Manage Wix Automations](https://dev.wix.com/docs/api-reference/business-management/automations/skills/build-and-manage-wix-automations) lists; do not perform anything marked "Later stages only", and follow the instruction attached to each guide marked "not yet published". "Stage", "Later stages only" and "not yet published" describe how this skill is being rolled out; never mention them to the user. Explain a limit in product terms: what can't be done through the API here and where the user can do it instead (for example, in the automations builder).
7
7
 
8
8
  # App-Defined Actions — Discovery, Schemas, Input Mapping
9
9
 
@@ -11,9 +11,9 @@ description: "Configure app-defined automation actions from their input schemas
11
11
 
12
12
  - An action is `appId` + `actionKey`. Find real ones with **Resolve Actions** (site catalog), then read the version active on the site with **Get Runtime Action**. Never invent keys.
13
13
  - The configuration is `appDefinedInfo.inputMapping`: an object keyed ONLY by input-schema property names, with values of the schema's type — literals, or `{{…}}` formulas in fields the UI schema marks as dynamic.
14
- - Fields marked `updateSchemaOnChange: true` reveal more inputs once set → **Get Action Dynamic Input Schema**. Output that depends on configuration → **Get Action Dynamic Output Schema** after the mapping is final.
15
- - **Later stages only — email is outside stage 2:** **Send an email** (`triggered-emails`): initialize each NEW step with **Generate Action Input Mapping**, persist the returned mapping unchanged, then configure content with Get / Set Email Content (Automations Email Actions (not yet published)). Existing content-only edits do not initialize another email.
16
- - Entity-selector fields take **ids**, never display names (Automations Entity and Provider Configuration (not yet published)).
14
+ - Fields marked `updateSchemaOnChange: true` reveal more inputs once set → **Get Action Dynamic Input Schema**. Output that depends on configuration → **Get Action Dynamic Output Schema** after the mapping is final, except user-defined LLM result fields: declare their override schema directly (§4).
15
+ - **Later stages only — email is outside stage 3:** **Send an email** (`triggered-emails`): initialize each NEW step with **Generate Action Input Mapping**, persist the returned mapping unchanged, then configure content with Get / Set Email Content (Automations Email Actions (not yet published; email configuration is outside stage 3)). Existing content-only edits do not initialize another email.
16
+ - Entity-selector fields take **ids**, never display names (Automations Entity and Provider Configuration (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations))).
17
17
  - Before accepting any action, prove its side effect and its recipient (§6).
18
18
 
19
19
  ---
@@ -29,7 +29,7 @@ Site-scoped (`wix-site-id` header), SDK module `actionCatalog`: Resolve Actions
29
29
  3. Get Runtime Action for the 1–3 best candidates; build against that version's `inputSchema`, `outputSchema`, `interfaceConfiguration`.
30
30
  4. An action missing from Resolve Actions is not usable on this site. The builder shows such a step as "action not found" and blocks it.
31
31
 
32
- **Do not use** unsupported or deprecated actions — `send-mail` (→ `triggered-emails`), `send-coupon-action` (→ `wixcoupons-retrieve_coupon` + a delivery step that uses its code), `wix_automations-velo_action`, `wix_automations-data_manipulation_code` (code variable; public Create refuses it — §4 of Automations Delays Variables and Branches (not yet published)), `whatsapp-send-message` (WhatsApp), `forward-to-zapier` (Zapier), and site actions `wix_automations-wix_api_integration` (non-public). Match these by `actionKey` (+ `appId`), not by app or display name — other actions of the same app are fine. Reasons and replacements: §2 of Automations Feasibility and Planning (not yet published) (site actions: §1).
32
+ **Do not use** unsupported or deprecated actions — `send-mail` (→ `triggered-emails`), `send-coupon-action` (→ `wixcoupons-retrieve_coupon` + a delivery step that uses its code), `wix_automations-velo_action`, `wix_automations-data_manipulation_code` (code variable; public Create refuses it — [Automations Delays Variables and Branches](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-delays-variables-and-branches) §4), `whatsapp-send-message` (WhatsApp), `forward-to-zapier` (Zapier), and site actions `wix_automations-wix_api_integration` (non-public). Match these by `actionKey` (+ `appId`), not by app or display name — other actions of the same app are fine. Reasons and replacements: §2 of Automations Feasibility and Planning (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations)) (site actions: §1).
33
33
 
34
34
  ### Selection rules
35
35
 
@@ -55,7 +55,7 @@ Conditional fields (`if`/`then`/`dependencies`, e.g. a due date shown only when
55
55
  UI-schema keys that change what you may write:
56
56
 
57
57
  - `dynamicValuesOptions.enabled: true` → the field accepts `{{…}}` formulas. `strict: true` → the formula must return the field's exact type/format. **A field without it is static: literal only.**
58
- - `"ui:widget": "EntitySelector"` + `entitySelectorOptions` (`selectorId`/`tag`, `filters`, `dynamicFiltersMapping`) → entity picker; value = id or array of ids (§1 of Automations Entity and Provider Configuration (not yet published)). Same for input properties carrying `itemsSelectionConfiguration`.
58
+ - `"ui:widget": "EntitySelector"` + `entitySelectorOptions` (`selectorId`/`tag`, `filters`, `dynamicFiltersMapping`) → entity picker; value = id or array of ids (§1 of Automations Entity and Provider Configuration (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations))). Same for input properties carrying `itemsSelectionConfiguration`.
59
59
  - `"ui:field": "AudienceSelector"` → an audience object owned by the app's picker; don't hand-author it — the user sets it in the builder.
60
60
  - `"ui:field": "TextSectionField"` → display-only text; never map it.
61
61
  - `"ui:widget": "hidden"`, `ui:readonly` → keep the schema `default`. Other `ui:*` keys are presentation only.
@@ -63,13 +63,13 @@ UI-schema keys that change what you may write:
63
63
  ## 4. Dynamic input and output schemas
64
64
 
65
65
  - **Input**: a property with `updateSchemaOnChange: true` (e.g. a template or form id) changes which inputs exist. Set it, then call Get Action Dynamic Input Schema with `{appId, actionKey, inputMapping}` (the mapping so far). The builder shows the static schema **merged** with the returned one (properties and `required` united), so keys from either are kept. Repeat if another controlling field is revealed. Never invent a field you expected but didn't get — it appears only after its controlling selection. The builder re-fetches this schema from your saved mapping every time the step is opened, so a dynamic key whose controlling value isn't in the mapping is dropped on the first edit.
66
- - **Output**: after the mapping is final, call Get Action Dynamic Output Schema (or the bulk variant) and use the returned `outputSchema` for downstream `var()` paths. A dynamic output is a _real_ schema — never replace it with an override (allowlist: §3 of Automations Schemas and Scheduling (not yet published)).
66
+ - **Output**: for `wix_automations-llm_call` result fields you define in its output configuration, declare `overrideOutputSchema` directly ([Automations Schemas and Scheduling](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-schemas-and-scheduling) §3); do not probe the dynamic-output SPI to discover your own declared fields or execute the AI during setup. For catalog-driven dynamic outputs, after the mapping is final, call Get Action Dynamic Output Schema (or the bulk variant) and use the returned `outputSchema` for downstream `var()` paths. A dynamic output is a _real_ schema — never replace it with an override (allowlist: [Automations Schemas and Scheduling](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-schemas-and-scheduling) §3).
67
67
 
68
68
  ## 5. Building the input mapping
69
69
 
70
70
  ### 5.1 Provider-owned mappings — email and opaque widgets
71
71
 
72
- > **Later stages only:** email and other opaque-widget configuration is not available in stage 2; this section is published in stage 4.
72
+ > **Later stages only:** email and other opaque-widget configuration is not available in stage 3; this section is published in stage 4.
73
73
 
74
74
  **In this stage:** never invent an opaque widget's mapping or its app-owned keys; tell the user which action to add in the builder and how it should be configured.
75
75
 
@@ -83,7 +83,7 @@ MUST (builder renderability — the `GENERIC` form drops, rewrites or flags anyt
83
83
  - An action with no input properties (or only hidden ones): send `"inputMapping": {}` — the builder writes `{}` itself on open otherwise.
84
84
  - Map fields the form would auto-fill, or opening the step silently changes the automation: fields with a schema `default` (write the default or your value), every `identityType` input (the form auto-maps it when exactly one matching payload path exists), required `date`/`date-time`/`time` strings (else filled with "now").
85
85
  - Enum fields (`oneOf` / `enum`): one of the listed constants.
86
- - Entity-selector fields: real ids of the right kind and shape (§1 of Automations Entity and Provider Configuration (not yet published)).
86
+ - Entity-selector fields: real ids of the right kind and shape (§1 of Automations Entity and Provider Configuration (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations))).
87
87
  - `{{…}}` only in fields with `dynamicValuesOptions.enabled` (or an `identityType` field), per [Automations Mapping Expressions](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-mapping-expressions) §4: number/boolean hold exactly one expression of that type; date-time a single date-time expression or ISO literal; strings may mix text and expressions. An **array-typed** `var()` in a string field is flagged as a format mismatch.
88
88
  - Don't copy volatile values: dates → `now()`/payload dates; ids → resolved at build time, never from examples.
89
89
  - Keep what the user describes for one field in that field. A subject described as "Order received, then the customer's first name" is one `subject` string mixing text and expressions (`"Order received {{var(…)}}"`); don't split its values into other fields, such as a message's `fields` rows.
@@ -113,7 +113,7 @@ Process: (1) fetch the effective schema (§4) before you write a mapping or any
113
113
 
114
114
  ### 5.3 Validation errors on actions
115
115
 
116
- Error shape, error type → fix, and how the builder shows each: [Build and Manage Wix Automations — included validation procedure](https://dev.wix.com/docs/api-reference/business-management/automations/skills/build-and-manage-wix-automations) §2. Must-know here: fix the field named by `configurationError.fieldKey` — never delete a field to silence it; `CRITICAL` blocks (status `INVALID`), `WARNING` doesn't but must be reported; a `var()` path that doesn't exist may NOT be reported — verify paths yourself.
116
+ Error shape, error type → fix, and how the builder shows each: [Automations Validation and Persistence](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-validation-and-persistence) §2. Must-know here: fix the field named by `configurationError.fieldKey` — never delete a field to silence it; `CRITICAL` blocks (status `INVALID`), `WARNING` doesn't but must be reported; a `var()` path that doesn't exist may NOT be reported — verify paths yourself.
117
117
 
118
118
  ## 6. Side-effect and recipient review
119
119
 
@@ -123,7 +123,7 @@ This section owns the semantic review (you, not code) required for every action
123
123
  - **Entity**: the affected entity has a matching input (e.g. a label picker for "add label").
124
124
  - **Identity input**: the id it acts on, with the right `identityType`.
125
125
  - **Recipient lineage** (email, chat, SMS, push): write down `{requestedAudience, resolvedAudienceKind (contact|visitor|owner|contributor|label|phone|device), resolvedIdentityPath}`. The trigger contact and a contact created upstream are different people even if both are `contactId`. Wording never proves the recipient.
126
- - **Later stages only — email is outside stage 2:** Email: the audience fields decide — read `selectedAudience` / `contactId` exactly as in §3 of Automations Email Actions (not yet published) ("Recipient encoding"). A root `contactId` or `triggerContactExcluded` alone doesn't prove who receives it.
126
+ - **Later stages only — email is outside stage 3:** Email: the audience fields decide — read `selectedAudience` / `contactId` exactly as in §3 of Automations Email Actions (not yet published; email configuration is outside stage 3) ("Recipient encoding"). A root `contactId` or `triggerContactExcluded` alone doesn't prove who receives it.
127
127
  - Chat (`send-message`): only a schema-supported contact-id or visitor-id route; owner/team chat needs a different, proven component or a clarification.
128
128
  - SMS / push: prove the schema-supported contact, audience, phone or device route.
129
129