@wix/agent-skills 1.33.0 → 1.34.0

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 (635) hide show
  1. package/README.md +23 -0
  2. package/package.json +2 -2
  3. package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
  4. package/skills/wix-export/SKILL.md +83 -0
  5. package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
  6. package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
  7. package/skills/wix-harmony-editor/SKILL.md +317 -0
  8. package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
  9. package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
  10. package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
  11. package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
  12. package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
  13. package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
  14. package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
  15. package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
  16. package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
  17. package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
  18. package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
  19. package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
  20. package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
  21. package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
  22. package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
  23. package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
  24. package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
  25. package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
  26. package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
  27. package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
  28. package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
  29. package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
  30. package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
  31. package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
  32. package/skills/wix-headless/SKILL.md +7 -2
  33. package/skills/wix-headless/references/CAPABILITIES.md +6 -1
  34. package/skills/wix-headless/references/DISCOVERY.md +2 -1
  35. package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
  36. package/skills/wix-headless/references/SEED.md +3 -2
  37. package/skills/wix-headless/references/SETUP.md +1 -0
  38. package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
  39. package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
  40. package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
  41. package/skills/wix-headless/references/managed/CREATE.md +1 -1
  42. package/skills/wix-headless-kit/SKILL.md +110 -21
  43. package/skills/wix-headless-kit/guides/api-run.md +15 -13
  44. package/skills/wix-headless-kit/guides/existing-site.md +31 -0
  45. package/skills/wix-headless-kit/guides/migration.md +49 -17
  46. package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
  47. package/skills/wix-headless-kit/install/context.mjs +61 -6
  48. package/skills/wix-headless-kit/install/pins.json +1 -1
  49. package/skills/wix-headless-kit/install/setup.mjs +107 -12
  50. package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
  51. package/skills/wix-headless-replatform/SKILL.md +116 -0
  52. package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
  53. package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
  54. package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
  55. package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
  56. package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
  57. package/skills/wix-headless-replatform/references/output-contract.md +93 -0
  58. package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
  59. package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
  60. package/skills/wix-headless-replatform/references/safety.md +19 -0
  61. package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
  62. package/skills/wix-headless-replatform/references/workflow.md +157 -0
  63. package/skills/wix-headless-replatform/registry/README.md +20 -0
  64. package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
  65. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
  66. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
  67. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
  68. package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
  69. package/skills/wix-headless-replatform/registry/registry.json +36 -0
  70. package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
  71. package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
  72. package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
  73. package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
  74. package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
  75. package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
  76. package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
  77. package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
  78. package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
  79. package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
  80. package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
  81. package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
  82. package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
  83. package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
  84. package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
  85. package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
  86. package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
  87. package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
  88. package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
  89. package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
  90. package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
  91. package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
  92. package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
  93. package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
  94. package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
  95. package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
  96. package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
  97. package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
  98. package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
  99. package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
  100. package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
  101. package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
  102. package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
  103. package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
  104. package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
  105. package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
  106. package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
  107. package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
  108. package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
  109. package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
  110. package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
  111. package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
  112. package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
  113. package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
  114. package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
  115. package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
  116. package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
  117. package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
  118. package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
  119. package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
  120. package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
  121. package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
  122. package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
  123. package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
  124. package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
  125. package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
  126. package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
  127. package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
  128. package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
  129. package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
  130. package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
  131. package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
  132. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
  133. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
  134. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
  135. package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
  136. package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
  137. package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
  138. package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
  139. package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
  140. package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
  141. package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
  142. package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
  143. package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
  144. package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
  145. package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
  146. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
  147. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
  148. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
  149. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
  150. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
  151. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
  152. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
  153. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
  154. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
  155. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
  156. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
  157. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
  158. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
  159. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
  160. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
  161. package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
  162. package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
  163. package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
  164. package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
  165. package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
  166. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
  167. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
  168. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
  169. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
  170. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
  171. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
  172. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
  173. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
  174. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
  175. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
  176. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
  177. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
  178. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
  179. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
  180. package/skills/wix-import/SKILL.md +90 -0
  181. package/skills/wix-manage/SKILL.md +38 -10
  182. package/skills/wix-manage/references/automations/actions.md +11 -11
  183. package/skills/wix-manage/references/automations/activation-status.md +6 -9
  184. package/skills/wix-manage/references/automations/api-catalog.md +48 -32
  185. package/skills/wix-manage/references/automations/automation-model.md +97 -22
  186. package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
  187. package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
  188. package/skills/wix-manage/references/automations/conditions.md +187 -0
  189. package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
  190. package/skills/wix-manage/references/automations/special-actions.md +210 -0
  191. package/skills/wix-manage/references/automations/triggers.md +47 -10
  192. package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
  193. package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
  194. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
  195. package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
  196. package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
  197. package/skills/wix-manage/references/events/create-wix-event.md +136 -73
  198. package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
  199. package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
  200. package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
  201. package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
  202. package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
  203. package/skills/wix-manage/references/sites/upload-static-site.md +127 -8
  204. package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
  205. package/skills/wix-replatform/.publish-manifest.json +5 -5
  206. package/skills/wix-replatform/CLI.md +162 -0
  207. package/skills/wix-replatform/README.md +52 -0
  208. package/skills/wix-replatform/SKILL.md +229 -684
  209. package/skills/wix-replatform/console/account.css +1 -0
  210. package/skills/wix-replatform/console/app.css +1 -0
  211. package/skills/wix-replatform/console/app.js +117 -0
  212. package/skills/wix-replatform/console/index.html +4 -0
  213. package/skills/wix-replatform/console/json.css +11 -0
  214. package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
  215. package/skills/wix-replatform/lib/app-page-routing.js +75 -0
  216. package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
  217. package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
  218. package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
  219. package/skills/wix-replatform/lib/completion-report.js +1393 -13
  220. package/skills/wix-replatform/lib/config-env.js +85 -11
  221. package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
  222. package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
  223. package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
  224. package/skills/wix-replatform/lib/destination-choice.js +163 -0
  225. package/skills/wix-replatform/lib/destination-handoff.js +62 -0
  226. package/skills/wix-replatform/lib/destination-http.js +81 -0
  227. package/skills/wix-replatform/lib/destination-route.js +98 -0
  228. package/skills/wix-replatform/lib/destination.js +919 -0
  229. package/skills/wix-replatform/lib/discovered-census.js +231 -0
  230. package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
  231. package/skills/wix-replatform/lib/document-url-guard.js +203 -0
  232. package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
  233. package/skills/wix-replatform/lib/entity-verification.js +18 -0
  234. package/skills/wix-replatform/lib/execution-capability.js +120 -0
  235. package/skills/wix-replatform/lib/execution-log.js +170 -0
  236. package/skills/wix-replatform/lib/execution-manifest.js +20 -2
  237. package/skills/wix-replatform/lib/execution-state.js +22 -0
  238. package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
  239. package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
  240. package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
  241. package/skills/wix-replatform/lib/import-recovery.js +800 -6
  242. package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
  243. package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
  244. package/skills/wix-replatform/lib/link-audit.js +173 -0
  245. package/skills/wix-replatform/lib/link-census.js +194 -0
  246. package/skills/wix-replatform/lib/link-plan.js +148 -0
  247. package/skills/wix-replatform/lib/link-verification.js +274 -0
  248. package/skills/wix-replatform/lib/link-write-journal.js +42 -0
  249. package/skills/wix-replatform/lib/local-state.js +869 -30
  250. package/skills/wix-replatform/lib/member-completion.js +658 -0
  251. package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
  252. package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
  253. package/skills/wix-replatform/lib/migration-completion.js +311 -0
  254. package/skills/wix-replatform/lib/operator-identity.js +47 -0
  255. package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
  256. package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
  257. package/skills/wix-replatform/lib/orchestration-router.js +608 -32
  258. package/skills/wix-replatform/lib/orchestration-state.js +188 -12
  259. package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
  260. package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
  261. package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
  262. package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
  263. package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
  264. package/skills/wix-replatform/lib/progress-log.js +19 -3
  265. package/skills/wix-replatform/lib/read-back-approval.js +184 -0
  266. package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
  267. package/skills/wix-replatform/lib/read-back-contract.js +243 -0
  268. package/skills/wix-replatform/lib/read-back-extract.js +118 -0
  269. package/skills/wix-replatform/lib/read-back-gate.js +734 -0
  270. package/skills/wix-replatform/lib/read-back-reads.js +94 -0
  271. package/skills/wix-replatform/lib/read-back-state.js +107 -0
  272. package/skills/wix-replatform/lib/read-back-summary.js +81 -0
  273. package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
  274. package/skills/wix-replatform/lib/run-controller.js +401 -0
  275. package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
  276. package/skills/wix-replatform/lib/setup-verification.js +148 -0
  277. package/skills/wix-replatform/lib/source-access.js +231 -0
  278. package/skills/wix-replatform/lib/source-coverage.js +1130 -0
  279. package/skills/wix-replatform/lib/source-secrets.js +277 -0
  280. package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
  281. package/skills/wix-replatform/lib/task-state.js +110 -0
  282. package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
  283. package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
  284. package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
  285. package/skills/wix-replatform/lib/url-verification.js +315 -0
  286. package/skills/wix-replatform/lib/user-action-effects.js +42 -0
  287. package/skills/wix-replatform/lib/user-actions.js +264 -0
  288. package/skills/wix-replatform/lib/website-handoff.js +1220 -0
  289. package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
  290. package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
  291. package/skills/wix-replatform/lib/write-verification-state.js +92 -0
  292. package/skills/wix-replatform/lib/write-verification.js +274 -0
  293. package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
  294. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
  295. package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
  296. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
  297. package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
  298. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
  299. package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
  300. package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
  301. package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
  302. package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
  303. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
  304. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
  305. package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
  306. package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
  307. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
  308. package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
  309. package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
  310. package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
  311. package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
  312. package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
  313. package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
  314. package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
  315. package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
  316. package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
  317. package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
  318. package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
  319. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
  320. package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
  321. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
  322. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  323. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
  324. package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
  325. package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
  326. package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
  327. package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
  328. package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
  329. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
  330. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
  331. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
  332. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
  333. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
  334. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
  335. package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
  336. package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
  337. package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
  338. package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
  339. package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
  340. package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
  341. package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
  342. package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
  343. package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
  344. package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
  345. package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
  346. package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
  347. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
  348. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
  349. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
  350. package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
  351. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
  352. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
  353. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
  354. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
  355. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
  356. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
  357. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
  358. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
  359. package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
  360. package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
  361. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
  362. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
  363. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
  364. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
  365. package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
  366. package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
  367. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
  368. package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
  369. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
  370. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
  371. package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
  372. package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
  373. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
  374. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
  375. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
  376. package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
  377. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
  378. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
  379. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
  380. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
  381. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
  382. package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
  383. package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
  384. package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
  385. package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
  386. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
  387. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
  388. package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
  389. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
  390. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
  391. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
  392. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
  393. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
  394. package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
  395. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
  396. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
  397. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
  398. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
  399. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
  400. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
  401. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
  402. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
  403. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
  404. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
  405. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
  406. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
  407. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
  408. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
  409. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
  410. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
  411. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
  412. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
  413. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
  414. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
  415. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
  416. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
  417. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
  418. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
  419. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
  420. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
  421. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
  422. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
  423. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
  424. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
  425. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
  426. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
  427. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
  428. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
  429. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
  430. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
  431. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
  432. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
  433. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
  434. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
  435. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
  436. package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
  437. package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
  438. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
  439. package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
  440. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
  441. package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
  442. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
  443. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
  444. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
  445. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
  446. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
  447. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
  448. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
  449. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
  450. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
  451. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
  452. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
  453. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
  454. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
  455. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
  456. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
  457. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
  458. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
  459. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
  460. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
  461. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
  462. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
  463. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
  464. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
  465. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
  466. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
  467. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
  468. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
  469. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
  470. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
  471. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
  472. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
  473. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
  474. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
  475. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
  476. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
  477. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
  478. package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
  479. package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
  480. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
  481. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
  482. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
  483. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
  484. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
  485. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
  486. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
  487. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
  488. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
  489. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
  490. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
  491. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
  492. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
  493. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
  494. package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
  495. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
  496. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
  497. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
  498. package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
  499. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
  500. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
  501. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
  502. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
  503. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
  504. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
  505. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
  506. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
  507. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
  508. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
  509. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
  510. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
  511. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
  512. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
  513. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
  514. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
  515. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
  516. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
  517. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
  518. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
  519. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
  520. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
  521. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
  522. package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
  523. package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
  524. package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
  525. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
  526. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
  527. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
  528. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
  529. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
  530. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
  531. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
  532. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
  533. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
  534. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
  535. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
  536. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
  537. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
  538. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
  539. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
  540. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
  541. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
  542. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
  543. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
  544. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
  545. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
  546. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
  547. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
  548. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
  549. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
  550. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
  551. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
  552. package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
  553. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
  554. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
  555. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
  556. package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
  557. package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
  558. package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
  559. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
  560. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
  561. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
  562. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
  563. package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
  564. package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
  565. package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
  566. package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
  567. package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
  568. package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
  569. package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
  570. package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
  571. package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
  572. package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
  573. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
  574. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
  575. package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
  576. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
  577. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
  578. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
  579. package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
  580. package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
  581. package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
  582. package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
  583. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
  584. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
  585. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
  586. package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
  587. package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
  588. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
  589. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
  590. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
  591. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
  592. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
  593. package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
  594. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
  595. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
  596. package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
  597. package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
  598. package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
  599. package/skills/wix-replatform/scripts/discovered-census.js +26 -0
  600. package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
  601. package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
  602. package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
  603. package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
  604. package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
  605. package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
  606. package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
  607. package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
  608. package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
  609. package/skills/wix-replatform/scripts/migration-completion.js +76 -0
  610. package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
  611. package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
  612. package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
  613. package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
  614. package/skills/wix-replatform/scripts/replatform-console.js +146 -0
  615. package/skills/wix-replatform/scripts/replatform.js +436 -0
  616. package/skills/wix-replatform/scripts/source-secrets.js +77 -0
  617. package/skills/wix-replatform/scripts/url-redirects.js +286 -0
  618. package/skills/wix-replatform/scripts/user-action.js +58 -0
  619. package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
  620. package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
  621. package/skills/wix-replatform/scripts/wix-destination.js +143 -0
  622. package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
  623. package/skills/wix-vibe-headless/SKILL.md +7 -3
  624. package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
  625. package/skills/wix-vibe-headless/platforms/base44.md +1 -0
  626. package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
  627. package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
  628. package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
  629. package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
  630. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
  631. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
  632. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
  633. package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
  634. package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
  635. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
@@ -3,6 +3,7 @@
3
3
  "domain": "stores",
4
4
  "entity": "product-tag",
5
5
  "displayName": "Stores Product Tag",
6
+ "capability": "commerce.catalog-product-tag",
6
7
  "target": {
7
8
  "classification": "native",
8
9
  "nativeEntity": "Wix Tag",
@@ -10,28 +11,69 @@
10
11
  "idPolicy": "server-assigned",
11
12
  "crosswalkRequired": true
12
13
  },
14
+ "dependsOn": [],
13
15
  "sourceAliases": [
14
- { "sourceSystem": "woocommerce", "sourceEntity": "product_tag", "routes": ["/wc/v3/products/tags"], "confidence": "high" },
15
- { "sourceSystem": "wix", "sourceEntity": "productTag", "routes": ["Tags API scoped to product FQDN"], "confidence": "high" }
16
+ {
17
+ "sourceSystem": "woocommerce",
18
+ "sourceEntity": "product_tag",
19
+ "routes": [
20
+ "/wc/v3/products/tags"
21
+ ],
22
+ "confidence": "high"
23
+ },
24
+ {
25
+ "sourceSystem": "wix",
26
+ "sourceEntity": "productTag",
27
+ "routes": [
28
+ "Tags API scoped to product FQDN"
29
+ ],
30
+ "confidence": "high"
31
+ }
16
32
  ],
17
33
  "preferredWrite": {
18
34
  "surface": "Tags",
19
35
  "endpoint": "POST /tags/v1/tags",
20
36
  "writerId": null,
21
- "verification": "unverified",
37
+ "verification": "verified-live",
22
38
  "importSafe": true,
23
39
  "bulk": false
24
40
  },
25
41
  "fallbacks": [
26
- { "classification": "cms", "when": "Use only for source tag metadata not represented by Wix Tags." }
42
+ {
43
+ "classification": "cms",
44
+ "when": "Use only for source tag metadata not represented by Wix Tags."
45
+ }
27
46
  ],
28
- "reliability": { "status": "partially-reliable", "flags": [] },
47
+ "reliability": {
48
+ "status": "partially-reliable",
49
+ "flags": []
50
+ },
29
51
  "pitfalls": [
30
- { "code": "fqdn-required", "severity": "blocker", "summary": "Use the verified product FQDN and resolve tag IDs before attaching them to products." }
52
+ {
53
+ "code": "fqdn-required",
54
+ "severity": "blocker",
55
+ "summary": "Use the verified product FQDN and resolve tag IDs before attaching them to products."
56
+ }
57
+ ],
58
+ "mappingGuidance": [
59
+ "Create tags via the Tags API (product FQDN), then assign IDs on the product's tags.publicTags for a public source taxonomy (WooCommerce product tags are public) or tags.privateTags for internal-only tags.",
60
+ "Source tag-archive URLs have no Wix equivalent; record each in the URL-preservation map with a redirect decision (category/search target or drop)."
61
+ ],
62
+ "setupRequirements": [
63
+ "Wix Stores app"
31
64
  ],
32
- "mappingGuidance": ["Create tags before products; attach tag IDs through product publicTags when supported."],
33
- "setupRequirements": ["Wix Stores app"],
34
65
  "evidence": [
35
- { "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
36
- ]
66
+
67
+ {
68
+ "type": "wix-docs",
69
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/product-object",
70
+ "note": "Catalog V3 product object fields for publicTags and privateTags."
71
+ },
72
+ {
73
+ "type": "live-run",
74
+ "path": "anonymized-live-verification",
75
+ "note": "Verified live: create + query-back readback, safe mode on — tags created via POST /tags/v1/tags + attach to variable product verified; the fqdn-required pitfall reproduced live (400 without fqdn) before the fix"
76
+ }
77
+ ],
78
+ "notes": "The Catalog V3 product object carries tags.publicTags, visible to site members and visitors, and tags.privateTags, which are permission-gated and merchant-side. A public source taxonomy maps to publicTags; internal or organizational tags map to privateTags. Tag-archive pages and URLs do not exist on Wix by default, so only per-product tag visibility carries over."
37
79
  }
@@ -3,6 +3,7 @@
3
3
  "domain": "stores",
4
4
  "entity": "product",
5
5
  "displayName": "Stores Product",
6
+ "capability": "commerce.catalog-product",
6
7
  "target": {
7
8
  "classification": "native-plus-cms",
8
9
  "nativeEntity": "Stores Product",
@@ -10,9 +11,31 @@
10
11
  "idPolicy": "server-assigned",
11
12
  "crosswalkRequired": true
12
13
  },
14
+ "dependsOn": [
15
+ "stores/category",
16
+ "stores/brand",
17
+ "stores/product-tag",
18
+ "media/media-file",
19
+ "stores/product-customization"
20
+ ],
13
21
  "sourceAliases": [
14
- { "sourceSystem": "woocommerce", "sourceEntity": "product", "routes": ["/wc/v3/products"], "confidence": "high" },
15
- { "sourceSystem": "wix", "sourceEntity": "storesProduct", "routes": ["Stores Catalog V1 Products", "Stores Catalog V3 Products"], "confidence": "high" }
22
+ {
23
+ "sourceSystem": "woocommerce",
24
+ "sourceEntity": "product",
25
+ "routes": [
26
+ "/wc/v3/products"
27
+ ],
28
+ "confidence": "high"
29
+ },
30
+ {
31
+ "sourceSystem": "wix",
32
+ "sourceEntity": "storesProduct",
33
+ "routes": [
34
+ "Stores Catalog V1 Products",
35
+ "Stores Catalog V3 Products"
36
+ ],
37
+ "confidence": "high"
38
+ }
16
39
  ],
17
40
  "preferredWrite": {
18
41
  "surface": "Stores Catalog V3 Products",
@@ -31,7 +54,7 @@
31
54
  "path": "product.subscriptionDetails",
32
55
  "verificationLevel": "live-create-and-readback",
33
56
  "lastVerified": "2026-07-26",
34
- "verifiedBy": "migration-20260726-01",
57
+ "verifiedBy": "live-verification",
35
58
  "requiredPaths": [
36
59
  "product.subscriptionDetails.allowOneTimePurchases",
37
60
  "product.subscriptionDetails.subscriptions[]",
@@ -49,7 +72,12 @@
49
72
  },
50
73
  {
51
74
  "path": "product.subscriptionDetails.subscriptions[].frequency",
52
- "enum": ["DAY", "WEEK", "MONTH", "YEAR"],
75
+ "enum": [
76
+ "DAY",
77
+ "WEEK",
78
+ "MONTH",
79
+ "YEAR"
80
+ ],
53
81
  "source": "live-create"
54
82
  },
55
83
  {
@@ -71,20 +99,123 @@
71
99
  }
72
100
  ],
73
101
  "fallbacks": [
74
- { "classification": "cms", "when": "Use for plugin rules, source-only metadata, or catalog semantics that do not fit product extended fields." }
102
+ {
103
+ "classification": "cms",
104
+ "when": "Use for plugin rules, source-only metadata, or catalog semantics that do not fit product extended fields."
105
+ }
75
106
  ],
76
- "reliability": { "status": "partially-reliable", "flags": [] },
107
+ "reliability": {
108
+ "status": "partially-reliable",
109
+ "flags": []
110
+ },
77
111
  "pitfalls": [
78
- { "code": "catalog-v3-normalization", "severity": "blocker", "summary": "Normalize V1/simple product fields into Catalog V3 product and variant shapes before create." },
79
- { "code": "variant-matrix-two-pass", "severity": "warning", "summary": "Full variable product matrices require a post-create option-choice and variant pass." }
112
+ {
113
+ "code": "catalog-v3-normalization",
114
+ "severity": "blocker",
115
+ "summary": "Normalize V1/simple product fields into Catalog V3 product and variant shapes before create."
116
+ },
117
+ {
118
+ "code": "variant-matrix-two-pass",
119
+ "severity": "warning",
120
+ "summary": "Full variable product matrices require a post-create option-choice and variant pass."
121
+ },
122
+ {
123
+ "code": "empty-source-slug-derives-and-can-collide",
124
+ "severity": "warning",
125
+ "summary": "VERIFIED LIVE: a source product carrying an EMPTY slug is not rejected -- Wix derives one from the product name instead. That derived slug competes in the same namespace as every slug the import supplies, so it can collide with another product's decoded source slug or with a second product whose name slugifies the same way, and the losing write comes back as a duplicate-slug conflict. Empty source slugs are not rare. Resolve them BEFORE the write -- mint an explicit, catalog-unique slug per affected product and record it against the source id -- so which product owns the name is decided by the mapping, not by write order. A conflict resolved by appending a numeric suffix, whether the platform did it or a repair pass did, is a DEVIATION from the source value and not a preserved slug: report it as an exception on the run's faithfulness ledger rather than counting it as correct."
126
+ },
127
+ {
128
+ "code": "media-source-resolution",
129
+ "severity": "blocker",
130
+ "summary": "media.itemsInfo.items[] takes ONE url per image and the destination copies exactly that file, generating every derivative from it with no way to raise quality afterwards -- so the url sent is that image's permanent ceiling. Never map a single named source image field: a source image reference usually carries several urls for the same picture at different sizes, and the field holding the original differs between routes of the SAME source. Resolve to the original, maximum-resolution candidate before building the item. Also: altText (1-1000 chars) and displayName (max 80, url-set items only) are writable per item and must not be flattened away; thumbnail is destination-generated output, never an input."
131
+ },
132
+ {
133
+ "code": "wordpress-percent-encoded-slug",
134
+ "severity": "blocker",
135
+ "summary": "product.slug is user-visible URL, not internal state -- and Wix slug sanitizing silently turns literal '%' characters into dashes rather than erroring. A WooCommerce source stores a non-Latin (e.g. Hebrew) post_name percent-encoded and its REST API (wc/v3) returns it undecoded; passing that raw value straight through as product.slug produces a garbled hex-with-dashes URL (e.g. '.../product-page/d7-90-d7-99-d7-a0-d7-98-d7-a0-d7-a1-d7-95') instead of the real slug. Nothing fails -- no 400 and no warning -- so only a check that compares the stored slug against the DECODED source value catches it; comparing against the raw source field or against what the writer sent calls it correct. Decode with decodeURIComponent BEFORE the slug coercion runs (decoding afterwards is too late: sanitizing has already consumed the '%'), guarded in a try/catch so a slug that was never percent-encoded passes through unchanged and a malformed escape falls back to the raw value instead of throwing. The decoded Unicode slug is then writable as-is: the standard coercion (`coerce: 'slug'`, i.e. toWixSlug) lowercases and keeps letters, combining marks and digits in any script, so do not replace a non-Latin slug with a transliterated or invented one. Confirm on the FIRST product that the decoded slug read back intact; missing it costs a repair pass over every product already created. Confirmed live on non-Latin WooCommerce catalogs. See rp-source-wordpress/SKILL.md and rp-import-codegen/SKILL.md's 'Never hand-write slug sanitizing' section."
136
+ },
137
+ {
138
+ "code": "seo-data-only-for-proven-overrides",
139
+ "severity": "blocker",
140
+ "summary": "Write product.seoData only for per-field SEO overrides the source proves (see rp-source-wordpress wordpress-seo product-seo-meta). Rendered Yoast output would turn an inherited pattern into a hard per-product override. [UNVERIFIED as of 2026-09-29] Create-time persistence of seoData on the create-with-inventory call has not been live-verified: the throwaway-site canary (create one product with inventory plus title and description seoData, read it back, observe both tags resolve TAG_SOURCE_ITEM, delete it) is still pending. Until it is recorded here, product-seo.js reads every product back after create and, if seoData was dropped, writes it with a revision-protected PATCH and verifies that. A PATCH of seoData with the saved revision is live-observed (2026-08-27, resolved TAG_SOURCE_ITEM). tags[] is replaced whole: send current non-import-owned tags back unchanged."
141
+ }
80
142
  ],
81
143
  "mappingGuidance": [
82
- "Create categories, tags, and media references before products when the source uses them.",
83
- "Preserve recurring offers natively via product.subscriptionDetails.subscriptions[] when the source exposes clear cadence data; live create coverage was verified on July 26, 2026, while patch/update coverage remains unverified."
144
+ "Create categories, brands, tags, and media references before products when the source uses them; assign brands by crosswalked brand.id, never by name (see stores/brand).",
145
+ "Preserve recurring offers natively via product.subscriptionDetails.subscriptions[] when the source exposes clear cadence data; live create coverage was verified on July 26, 2026, while patch/update coverage remains unverified.",
146
+ "Plan the slug for the WHOLE catalog before writing the first product, not per record. Two source shapes decide the target slug and neither is visible one record at a time: a percent-encoded non-Latin slug must be tolerantly percent-decoded first and then kept as the decoded Unicode value (see wordpress-percent-encoded-slug), and an empty source slug must be filled in rather than left for the platform to derive (see empty-source-slug-derives-and-can-collide). Build the source-slug -> planned-target-slug map up front, assert it is unique across the catalog after coercion, and carry the ORIGINAL source slug beside the planned one so a later URL-preservation report can tell a faithful slug from a deviated one.",
147
+ "Product images: pass every candidate url the source record offers to the source adapter's image resolver and use its result, never a hardcoded field such as src. Carry altText and displayName through to the media item. When the resolver reports that only a downscaled crop existed, record those images in the run's faithfulness ledger rather than importing them silently.",
148
+ "Product SEO: build seoData with buildProduct(canonical, { seoPlan }) from product-seo.js planProductSeo; never map rendered source SEO into seoTitle/seoDescription for an evidence-contract source."
149
+ ],
150
+ "setupRequirements": [
151
+ "Wix Stores app",
152
+ "Product data extension schema when source-only product fields are preserved natively.",
153
+ "Product data extension schema (FQDN wix.stores.catalog.*.product, provision-extended-fields step) before any writer emits product extendedFields values."
84
154
  ],
85
- "setupRequirements": ["Wix Stores app", "Product data extension schema when source-only product fields are preserved natively."],
86
155
  "evidence": [
87
- { "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" },
88
- { "type": "repo-research", "path": "research/source-entity-import-suitability-wordpress-woocommerce-wix.md" }
89
- ]
156
+ {
157
+ "type": "wix-docs",
158
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/product-object",
159
+ "note": "object page (docs-survey sweep 2026-08-11)"
160
+ }
161
+ ],
162
+ "extendedFields": {
163
+ "schemaKind": "data-extension-schema",
164
+ "definitionSurface": "Data Extension Schema API",
165
+ "definitionOperation": "Create/Update Data Extension Schema (FQDN wix.stores.catalog.*.product)",
166
+ "valuePath": "extendedFields.namespaces._user_fields",
167
+ "namespaceForCreatedFields": "_user_fields",
168
+ "dataExtensionSchemaBacked": true,
169
+ "fqdn": "wix.stores.catalog.*.product",
170
+ "supportsFiltering": true,
171
+ "nestedSubrecordExtendedFields": "none known",
172
+ "liveVerification": "UNVERIFIED — offline contract only; disposable-site create and concurrent-edit proof pending.",
173
+ "admittedFieldTypes": [
174
+ "string"
175
+ ],
176
+ "keyConvention": "sourceProductId for the source product id; plain keys under _user_fields.",
177
+ "docs": [
178
+ "https://dev.wix.com/docs/api-reference/business-management/data-extension-schema/introduction"
179
+ ]
180
+ },
181
+ "intendedFields": [
182
+ {
183
+ "targetPath": "product.name",
184
+ "sourcePaths": [
185
+ "name"
186
+ ]
187
+ },
188
+ {
189
+ "targetPath": "product.plainDescription",
190
+ "sourcePaths": [
191
+ "description"
192
+ ]
193
+ },
194
+ {
195
+ "targetPath": "product.media.itemsInfo.items[]",
196
+ "sourcePaths": [
197
+ "images[]",
198
+ "media[]"
199
+ ]
200
+ }
201
+ ],
202
+ "readBackProjection": {
203
+ "identity": "source-marker-and-variant-id",
204
+ "serverOwned": [
205
+ {
206
+ "path": "product.revision",
207
+ "reason": "server revision"
208
+ },
209
+ {
210
+ "path": "product.updatedDate",
211
+ "reason": "server timestamp"
212
+ }
213
+ ],
214
+ "read": "getStoresProductForVerification",
215
+ "fields": [
216
+ "MEDIA_ITEMS_INFO",
217
+ "PLAIN_DESCRIPTION"
218
+ ],
219
+ "mediaSettlement": "read-after-60s-unknown-on-exhaustion"
220
+ }
90
221
  }
@@ -0,0 +1,84 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "entity": "promotion",
5
+ "displayName": "Stores Promotion (Category Banner)",
6
+ "capability": "marketing.storefront-banner",
7
+ "target": {
8
+ "classification": "native",
9
+ "nativeEntity": "Stores Promotion",
10
+ "verifiedFqdn": null,
11
+ "idPolicy": "server-assigned",
12
+ "crosswalkRequired": true
13
+ },
14
+ "sourceAliases": [],
15
+ "dependsOn": ["stores/category"],
16
+ "preferredWrite": {
17
+ "surface": "Stores Catalog V3 Promotions",
18
+ "endpoint": "POST /stores/v3/promotions",
19
+ "writerId": null,
20
+ "verification": "verified-live",
21
+ "importSafe": true,
22
+ "bulk": true
23
+ },
24
+ "reliability": {
25
+ "status": "partially-reliable",
26
+ "flags": []
27
+ },
28
+ "pitfalls": [
29
+ {
30
+ "code": "promotion-is-a-banner-not-a-discount",
31
+ "severity": "blocker",
32
+ "summary": "CORRECTED 2026-08-16 (this entity previously claimed the opposite). A Wix Stores promotion is 'a visual banner displayed on store category pages, including their product gallery sections' — it is a MERCHANDISING IMAGE with a name, a required media asset, an optional destinationUrl, and category placements. It carries NO discount, NO percentage, NO scope, NO date window, and NO price effect of any kind; the create schema has no such fields and a body containing them is rejected. Discount-rule plugin campaigns therefore DO NOT map here — route them to stores/coupon, to native discount rules, or to per-product pricing on stores/product. Mapping a source discount campaign to this entity would produce a decorative banner and silently lose the discount."
33
+ },
34
+ {
35
+ "code": "media-is-required-external-url-accepted",
36
+ "severity": "blocker",
37
+ "summary": "promotion.media is a REQUIRED create field (verified live 2026-08-16: omitting it → 400 REQUIRED_FIELD on promotion.media). It is a one-of: media.id for an existing Wix Media Manager file, or media.url for an external image that Wix Media Manager imports asynchronously. The external-URL path means NO media pre-import step is needed for this entity (the earlier 'must come from the Media Manager first' claim was wrong) — but see promotion-media-import-fails-silently before relying on it."
38
+ },
39
+ {
40
+ "code": "promotion-media-import-fails-silently",
41
+ "severity": "blocker",
42
+ "summary": "The media.url import is asynchronous and its failure mode is destructive and silent. Per the docs, during import the promotion is saved DISABLED regardless of the requested enabled value, and if the import fails 'the promotion's entire media object is cleared and the promotion stays disabled'. VERIFIED LIVE 2026-08-16: of three probe promotions, one imported successfully (media resolved to a static.wixstatic.com id with width/height/filename), one was still pending after 12s (media.url and uploadId still present, no image yet), and one came back with NO media object at all and revision bumped to 2 — a failed import, reported by nothing but the absence of a field. A create returning 200 does NOT mean the banner has an image. Any import of these must poll GET /stores/v3/promotions/{id} until media.image is populated, and treat a cleared media object as a per-record failure needing a retry with new media."
43
+ },
44
+ {
45
+ "code": "category-assignment-needs-explicit-position",
46
+ "severity": "warning",
47
+ "summary": "categories[] entries require an explicit position starting from 1 — omitting it fails validation (docs, read 2026-08-16). appliedToSubcategories (default false) controls inheritance, and an inherited placement keeps the same position. A promotion created without categories[] (as the probe was) exists but appears nowhere, so a category crosswalk must be resolved before this write is worth making."
48
+ }
49
+ ],
50
+ "mappingGuidance": [
51
+ "Dependencies: stores/category is required when category placements are mapped, because the promotion must use the category crosswalk; media URLs are imported asynchronously and do not require media/media-file.",
52
+ "Only author this from source data that is genuinely a storefront BANNER — a category-page hero/promo image from a theme or a banner plugin. Never from discount data.",
53
+ "Explicit non-targets, to stop the same source record importing twice: per-product sale prices belong to stores/product pricing; coupon codes belong to stores/coupon; discount-rule plugin campaigns (bulk/tiered/BOGO) have no import path as rules and are reconfigure-in-wix (see ecom/order-applied-discount, which carries only the historical applied-discount RECORDS on past orders).",
54
+ "Create promotions after categories exist and resolve placements through the category crosswalk, supplying categories[].position from the source ordering (1-based).",
55
+ "Prefer media.url with the publicly reachable source image URL over a Media Manager pre-import — then poll the created promotion until media.image is populated, and fail the record loudly if media comes back cleared.",
56
+ "Set enabled deliberately: it is false by default, and with media.url it only takes effect after the import completes."
57
+ ],
58
+ "setupRequirements": [
59
+ "Wix Stores app",
60
+ "SCOPE.STORES.CATALOG_WRITE"
61
+ ],
62
+ "evidence": [
63
+ {
64
+ "type": "wix-docs",
65
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/promotions-v3/promotion-object",
66
+ "note": "object page: id/revision/name/media + category placements"
67
+ },
68
+ {
69
+ "type": "wix-docs",
70
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/promotions-v3/create-promotion",
71
+ "note": "full request schema read 2026-08-16: required promotion.name + promotion.media; media one-of id|url with async import semantics; destinationUrl, categories[].position, enabled (default false), tags; errors MEDIA_NOT_FOUND, DUPLICATE_CATEGORY_ASSIGNMENT, PROMOTIONS_LIMIT_EXCEEDED. No discount, scope, or date fields exist on this entity."
72
+ },
73
+ {
74
+ "type": "wix-docs",
75
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/promotions-v3/bulk-create-promotions"
76
+ },
77
+ {
78
+ "type": "live-run",
79
+ "path": "anonymized-live-verification",
80
+ "note": "Verified live: a first create modelled on this entity's old discount-campaign framing ({ discount: { percentage }, scope, status }) was rejected — 400 REQUIRED_FIELD promotion.media — which is what exposed the model error. Corrected creates with { name, media: { url, altText, displayName }, destinationUrl, enabled: false } → 200 on three probe promotions; readback showed one media import succeeding (image id/url/width/height/filename populated on static.wixstatic.com), one still pending, and one with the media object cleared entirely after a failed import. All three deleted via DELETE /stores/v3/promotions/{id} → 200. Not exercised: media.id (Media Manager) attachment, categories[] placement, bulk create."
81
+ }
82
+ ],
83
+ "notes": "Authored 2026-08-11 from the docs-survey gap (Promotions V3). SUBSTANTIALLY CORRECTED 2026-08-16 by a live probe: the previous version modelled this as a catalog-level DISCOUNT campaign entity (capability commerce.promotions, pitfall 'promotion-model-mismatch', mappingGuidance 'author from discount-rule campaign data'). That was wrong — Promotions V3 is a category-page banner surface with no discount semantics whatsoever, so the capability was renamed to marketing.storefront-banner and the discount-campaign guidance replaced with explicit non-targets. Now verified-live for the create/readback/delete path; reliability is partially-reliable because the async media import failed on one of three probes with no error surfaced, and category placement was never exercised. There is still no profiled source-side population for this entity."
84
+ }
@@ -0,0 +1,178 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "entity": "review",
5
+ "displayName": "Product Review",
6
+ "capability": "commerce.product-reviews",
7
+ "target": {
8
+ "classification": "native",
9
+ "nativeEntity": "Review",
10
+ "verifiedFqdn": null,
11
+ "idPolicy": "server-assigned",
12
+ "crosswalkRequired": true
13
+ },
14
+ "dependsOn": [
15
+ "stores/product",
16
+ "crm/contact"
17
+ ],
18
+ "sourceAliases": [
19
+ {
20
+ "sourceSystem": "woocommerce",
21
+ "sourceEntity": "product_review",
22
+ "routes": [
23
+ "/wc/v3/products/reviews"
24
+ ],
25
+ "confidence": "high"
26
+ }
27
+ ],
28
+ "preferredWrite": {
29
+ "surface": "Wix Reviews",
30
+ "endpoint": "POST /reviews/v1/bulk/reviews/create",
31
+ "writerId": null,
32
+ "verification": "docs",
33
+ "importSafe": false,
34
+ "bulk": true
35
+ },
36
+ "alternateWrites": [
37
+ {
38
+ "surface": "Wix Reviews",
39
+ "endpoint": "POST /reviews/v1/reviews",
40
+ "when": "Single-review create. Use for retries of bulk failures and for the tail of a batch; the required-parameter sets differ (see the required-field-asymmetry pitfall)."
41
+ },
42
+ {
43
+ "surface": "Wix Reviews",
44
+ "endpoint": "POST /reviews/v1/bulk/reviews/moderate",
45
+ "when": "Second pass after create, to force the imported moderation state (APPROVED / REJECTED). moderation.moderationStatus is read-only on create."
46
+ },
47
+ {
48
+ "surface": "Wix Reviews",
49
+ "endpoint": "PATCH /reviews/v1/reviews/{reviewId}/reply",
50
+ "when": "Third pass, only if the source carries merchant replies to reviews; reply is read-only on create."
51
+ }
52
+ ],
53
+ "fallbacks": [
54
+ {
55
+ "classification": "cms",
56
+ "when": "Use for review facts the native object cannot carry — the verified-purchase badge, ratings of 0, over-length bodies, and the source review ID/author email when no contact is created. Native reviews stay the primary record; the CMS shadow is evidence, not display."
57
+ }
58
+ ],
59
+ "reliability": {
60
+ "status": "unknown",
61
+ "flags": []
62
+ },
63
+ "pitfalls": [
64
+ {
65
+ "code": "contact-required-per-review",
66
+ "severity": "blocker",
67
+ "summary": "Every review needs a contact: Bulk Create requires reviews.author.contactId, and the Create Review introduction states the single-create method requires a contact ID too. Importing reviews therefore CREATES OR RESOLVES A CONTACT PER DISTINCT REVIEWER — a CRM side effect well beyond the catalog, and reviewers are frequently not customers. Resolve each reviewer by email through Query Contacts first, create only on miss, and disclose the contact count at the execution gate."
68
+ },
69
+ {
70
+ "code": "moderation-status-read-only-on-create",
71
+ "severity": "warning",
72
+ "summary": "moderation.moderationStatus is read-only on create; a created review starts as SUBMITTED and is then moved by the site's moderation rules to APPROVED / IN_MODERATION / REJECTED. Source approval state (WooCommerce approved vs hold vs spam vs trash) survives only via a second pass — Bulk Update Moderation Status (POST /reviews/v1/bulk/reviews/moderate), whose status enum accepts APPROVED or REJECTED only (not IN_MODERATION), is filter-based, and returns a jobId (asynchronous — completion is not observable in the create response)."
73
+ },
74
+ {
75
+ "code": "verified-badge-not-writable",
76
+ "severity": "warning",
77
+ "summary": "review.verified (the verified-owner/verified-purchase badge) is read-only on create and has no documented import path. WooCommerce's per-review `verified` flag CANNOT CARRY — this is a reportable faithfulness loss on every imported review, not a rounding error, because the badge is the trust signal shoppers read."
78
+ },
79
+ {
80
+ "code": "rating-1-to-5-only",
81
+ "severity": "warning",
82
+ "summary": "content.rating is an integer with Min 1 / Max 5, and it is required on single create. WooCommerce permits rating 0 (\"no rating\" — a review with text and no stars), which cannot be created natively. A run must pick a policy per source site: drop those rows to the CMS shadow, or coerce to a rating the merchant approves. Never silently coerce."
83
+ },
84
+ {
85
+ "code": "one-review-per-author-per-entity",
86
+ "severity": "warning",
87
+ "summary": "\"A review author is limited to 1 review per entity. Duplicate reviews receive an error response.\" WooCommerce permits many reviews by the same author (same email) on the same product, so a collision policy is required BEFORE the write: keep newest / keep highest-rated / merge bodies / spill the losers to the CMS shadow. Detect collisions during mapping by grouping source reviews on (reviewer_email, product_id) — an anonymized verification environment had 0 collisions across 120 reviews, which makes this easy to miss on a first run."
88
+ },
89
+ {
90
+ "code": "body-plain-text-3000",
91
+ "severity": "warning",
92
+ "summary": "content.body is plain text with maxLength 3000 (content.title also maxLength 3000, author.authorName maxLength 100, content.media maxItems 10, entityId maxLength 36). WooCommerce review bodies are HTML — strip tags before the write, and ledger every review whose stripped body exceeds 3000 characters with the chosen policy (truncate or divert to the CMS shadow)."
93
+ },
94
+ {
95
+ "code": "stores-namespace-only",
96
+ "severity": "warning",
97
+ "summary": "namespace supports \"stores\" only — \"Currently, only Wix Stores is fully integrated with the Wix Reviews app.\" entityId must be the Wix Stores PRODUCT ID (maxLength 36), so the product crosswalk must be complete and the products must already exist before any review write. Reviews of non-product entities (WordPress post/page comments) have no home here; they belong to blog/comment."
98
+ },
99
+ {
100
+ "code": "required-field-asymmetry",
101
+ "severity": "warning",
102
+ "summary": "The two create surfaces do not require the same fields. Create Review requires review.namespace, review.entityId, review.content, review.content.rating (author.contactId is not in its required list despite the prose). Bulk Create requires reviews.namespace, reviews.entityId, reviews.content, reviews.author, reviews.author.contactId — but NOT reviews.content.rating. Send the full set on both paths rather than relying on either list."
103
+ },
104
+ {
105
+ "code": "docs-endpoint-path-inconsistency",
106
+ "severity": "warning",
107
+ "summary": "The Create Review and Set Reply reference pages print two different base paths: the Schema \"URL:\" line says https://www.wixapis.com/reviews/api/v1/reviews while the curl example on the same page says https://www.wixapis.com/reviews/v1/reviews. Bulk Create is consistent at /reviews/v1/bulk/reviews/create. This entity records the /reviews/v1/... form (the executable examples); confirm live before promoting verification above docs."
108
+ },
109
+ {
110
+ "code": "bulk-batch-100",
111
+ "severity": "warning",
112
+ "summary": "Bulk Create takes minItems 1 / maxItems 100 reviews per call and returns per-item results with originalIndex and a success flag (entities only when returnEntity is true). Chunk at 100, always request returnEntity so the crosswalk can record server-assigned review IDs, and treat partial failure as normal — the call succeeds while individual items fail."
113
+ }
114
+ ],
115
+ "mappingGuidance": [
116
+ "Import order: products first (entityId is a Wix product ID), then contacts for reviewers, then reviews. Write via POST /reviews/v1/bulk/reviews/create in chunks of 100 with returnEntity=true, recording sourceReviewId -> Wix review ID in the crosswalk.",
117
+ "REVIEWER CONTACTS ARE A SIDE EFFECT THE USER MUST APPROVE AT THE REVIEW GATE. Every imported review needs author.contactId, so importing reviews grows the site's CRM by one contact per distinct reviewer email, including reviewers who are not customers and would otherwise never appear in Contacts. Present the run-specific distinct-reviewer count, state that these contacts are created by the review import, and let the user choose whether to import or skip reviews.",
118
+ "Carry the original review date with review.reviewDate (writable at create, format date-time) — the docs designate it as the import path: \"This should match createdDate, except for reviews imported from another system.\" createdDate is read-only and will be the import timestamp, so reviewDate is the only faithful date.",
119
+ "Approval state needs a second pass. Create everything, then group the created review IDs by the source status and call POST /reviews/v1/bulk/reviews/moderate once per target status (APPROVED for WooCommerce approved, REJECTED for spam/trash). WooCommerce `hold` has no exact native equivalent — IN_MODERATION is not settable through the bulk moderate enum — so decide with the user whether held reviews are left to the site's moderation rules, rejected, or skipped entirely.",
120
+ "Map author.authorName from the WooCommerce reviewer display name (maxLength 100) and author.contactId from the resolved contact. If authorName is omitted, Wix falls back to the member name for members and to null otherwise — always send it explicitly so anonymous reviewers do not lose their display name.",
121
+ "Record in the faithfulness ledger, per run: reviews whose `verified` badge was lost, reviews with source rating 0, reviews whose stripped body exceeded 3000 characters, and reviews dropped by the one-per-author-per-entity collision policy."
122
+ ],
123
+ "setupRequirements": [
124
+ "Wix Reviews app",
125
+ "Wix Stores app (Reviews is only integrated with Wix Stores, and the products must already exist)",
126
+ "SCOPE.DC-REVIEWS.MANAGE-REVIEWS",
127
+ "Contacts write access (SCOPE.DC-CONTACTS.MANAGE-CONTACTS) — every review requires a contact ID",
128
+ "User approval at the review gate for the reviewer-contact side effect"
129
+ ],
130
+ "evidence": [
131
+ {
132
+ "type": "wix-docs",
133
+ "url": "https://dev.wix.com/docs/api-reference/crm/community/feedback-moderation/reviews/reviews/review-object",
134
+ "note": "object page, fetched 2026-08-16. DOC TREE LOCATION: the Reviews API lives under CRM > Community > Feedback & Moderation, NOT under business-solutions/stores — which is why the 2026-08-11 stores docs-survey sweep (docsRoots api-reference/business-solutions/stores) missed it entirely. This entity is filed in the stores domain because namespace supports \"stores\" only and entityId is a Stores product ID; the survey row that claims it lives in the crm domain. Do not 'rediscover' this."
135
+ },
136
+ {
137
+ "type": "wix-docs",
138
+ "url": "https://dev.wix.com/docs/api-reference/crm/community/feedback-moderation/reviews/reviews/introduction",
139
+ "note": "fetched 2026-08-16. Verbatim: \"The Wix Reviews API allows you to: Import reviews from other sites and export reviews to other sites.\" Also: namespace \"stores\" only; \"Every review needs a contact\" (resolve via Query Contacts by email); \"A review author is limited to 1 review per entity. Duplicate reviews receive an error response.\"; rating 1-5."
140
+ },
141
+ {
142
+ "type": "wix-docs",
143
+ "url": "https://dev.wix.com/docs/api-reference/crm/community/feedback-moderation/reviews/reviews/create-review",
144
+ "note": "fetched 2026-08-16. Scope SCOPE.DC-REVIEWS.MANAGE-REVIEWS. Required: review, review.namespace, review.entityId, review.content, review.content.rating. curl example POSTs https://www.wixapis.com/reviews/v1/reviews (the Schema URL line on the same page prints /reviews/api/v1/reviews). Validations: entityId maxLength 36, content.title maxLength 3000, content.body maxLength 3000, content.media maxItems 10, author.contactId format GUID + immutable, authorName maxLength 100, reviewDate format date-time (WRITABLE at create). Read-only on the response: id, createdDate, updatedDate, reply, foundHelpful, foundUnhelpful, helpfulness, moderation (whole object), revision, verified, origin, relevanceScore, publishCount."
145
+ },
146
+ {
147
+ "type": "wix-docs",
148
+ "url": "https://dev.wix.com/docs/api-reference/crm/community/feedback-moderation/reviews/reviews/bulk-create-review",
149
+ "note": "fetched 2026-08-16. POST https://www.wixapis.com/reviews/v1/bulk/reviews/create; reviews array minItems 1, maxItems 100; required reviews, reviews.namespace, reviews.entityId, reviews.content, reviews.author, reviews.author.contactId (content.rating is NOT in the bulk required list). returnEntity flag; results carry itemMetadata {id, originalIndex, success, error}."
150
+ },
151
+ {
152
+ "type": "wix-docs",
153
+ "url": "https://dev.wix.com/docs/api-reference/crm/community/feedback-moderation/reviews/reviews/bulk-update-moderation-status",
154
+ "note": "fetched 2026-08-16. POST https://www.wixapis.com/reviews/v1/bulk/reviews/moderate; filter + status; status enum is UNKNOWN / APPROVED / REJECTED only; returns jobId (asynchronous)."
155
+ },
156
+ {
157
+ "type": "wix-docs",
158
+ "url": "https://dev.wix.com/docs/api-reference/crm/community/feedback-moderation/reviews/reviews/set-reply",
159
+ "note": "fetched 2026-08-16. PATCH /reviews/v1/reviews/{reviewId}/reply, required message — replies are a separate call because review.reply is read-only on create."
160
+ },
161
+ {
162
+ "type": "wix-docs",
163
+ "url": "https://dev.wix.com/docs/api-reference/crm/community/feedback-moderation/reviews-moderation-business-flow",
164
+ "note": "fetched 2026-08-16. \"To import or migrate multiple reviews, call Bulk Create Review.\" Created reviews land at moderationStatus SUBMITTED and are then moved by moderation rules. Prerequisites stated: Wix Stores must be installed, the products must exist, and each review requires a contact ID."
165
+ },
166
+ {
167
+ "type": "review-decision",
168
+ "path": "internal design decision, 2026-07-30",
169
+ "note": "added specifically so mapper/codegen stop reporting 'No verified native Wix product-review primitive was identified for this workflow'. Broader mapper/codegen/execution support for reviews may still need follow-up work."
170
+ },
171
+ {
172
+ "type": "live-run",
173
+ "path": "tests/fixtures/wordpress/rest-index-scope.json",
174
+ "note": "Live source verification established that /wc/v3/products/reviews exposes review status and reviewer email and is classified backend_data/sample by the /wc/v3/products* catch-all rule in lib/wp-route-classifier.js. The fixture pins that classification so future narrowing cannot silently drop reviews."
175
+ }
176
+ ],
177
+ "notes": "Authored 2026-08-16. Before this file no domain entity claimed a product-review capability, so every run dropped its source reviews into a pending row despite Wix having a native, explicitly import-oriented API. Docs-verified only — nothing here has been exercised live, hence verification=docs / reliability=unknown / importSafe=false. importSafe is false because a review import writes into CRM (a contact per distinct reviewer) as well as the catalog, which is a side effect a user must accept at the gate, not a silent consequence. Promote verification after a live subset write that exercises bulk create + the moderation second pass."
178
+ }