@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
@@ -0,0 +1,73 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "seo",
4
+ "dependsOnRequired": true,
5
+ "docsRoots": [
6
+ "api-reference/business-management/seo",
7
+ "api-reference/business-management/marketing/seo",
8
+ "api-reference/business-management/headless/sitemap",
9
+ "api-reference/site/viewer/seo-tags"
10
+ ],
11
+ "displayName": "Wix SEO",
12
+ "ownerHint": "SEO (item SEO tags, site SEO tags, SEO patterns, robots.txt/ads.txt/llms.txt) domain owners",
13
+ "wixAppsRequired": [],
14
+ "defaultImportOrder": [
15
+ "site-seo-tags",
16
+ "seo-pattern",
17
+ "item-seo-tags"
18
+ ],
19
+ "sharedPitfalls": [
20
+ {
21
+ "code": "seo-tags-resolve-through-a-precedence-chain",
22
+ "severity": "warning",
23
+ "summary": "A rendered tag is not stored in one place. Wix combines, in increasing precedence: site tags -> the Wix default pattern for the page type -> the site's own pattern -> the host page's tags -> the item's own tags. Writing a value at the item level therefore SHADOWS everything below it, and the docs warn explicitly that 'writing the same title onto a thousand items is the same outcome as one pattern, and much harder to undo'. Import at the level that matches the source fact: a WordPress SEO title TEMPLATE belongs in seo/seo-pattern, a per-post override belongs in seo/item-seo-tags."
24
+ },
25
+ {
26
+ "code": "seo-writes-replace-in-full",
27
+ "severity": "blocker",
28
+ "summary": "Every SEO write replaces what it targets in full and there is NO revision checking - the last write wins, and a Wix user editing SEO in the dashboard writes the same data. Read immediately before writing, send back the complete tag set (not only the changed tag), and never interleave an import with dashboard editing."
29
+ },
30
+ {
31
+ "code": "coverage-depends-on-installed-business-solutions",
32
+ "severity": "warning",
33
+ "summary": "The supported itemType / pageType list is per site: a type provided by a business solution only exists where that solution is installed (UNSUPPORTED_ITEM_TYPE / UNSUPPORTED_PAGE_TYPE list the supported values in the error message, and PAGE_TYPE_NOT_ON_SITE is a distinct 404). Discover the list from a failing call at setup time; never hard-code it."
34
+ },
35
+ {
36
+ "code": "primary-language-only",
37
+ "severity": "warning",
38
+ "summary": "Item SEO tags can be written only for the site's primary language: sending `language` fails with LANGUAGE_NOT_SUPPORTED. A multilingual WordPress source cannot carry per-locale SEO meta through this API; ledger the secondary-language tags rather than dropping them silently."
39
+ },
40
+ {
41
+ "code": "url-redirect-api-not-yet-integrated",
42
+ "severity": "warning",
43
+ "summary": "Wix publicly documents the SEO Redirects API in Developer Preview for permanent URL rules (seo-redirects-service/v1); the Headless Redirect Sessions API is a different auth/checkout facility. Current method schema: List Redirects is unpaged and takes no filter; Bulk Create accepts 1-100 items and reports each by itemMetadata.originalIndex; writes need Manage SEO Settings through a Wix app or Wix user identity; site-member identity is distinct and is not accepted by the helper. The CLI requires an explicit APP or WIX_USER identity declaration and matching destination site. Single Create resolves a loop by DELETING the loop-closing rule and forceReplace deletes the rule holding the path. Bulk Create fails an item whose path is taken (FROM_URL_EXISTS) or that loops within the same request (REDIRECT_LOOP), but a rule that closes a loop with a rule already on the site is still created and the existing loop-closing rule deleted. The shared helper therefore writes through Bulk Create only, never sends forceReplace, refuses any destination that is an existing rule's source, and stops if an existing rule disappears between batches. An existing rule with the same from/to is reported as success without an id, so outcomes are settled by List Redirects reconciliation, never by HTTP 200. RePlatform's post-build helper (scripts/url-redirects.js plan/apply/verify) applies only exact same-site 301 rules after conflict preflight and verifies old addresses over HTTP. Live API acceptance confirmed site-scoped Wix user List/Bulk Create/read-back, duplicate-create success without an id, and exact-ID cleanup. Bulk maximum remains schema-based, not live stress-tested; frontend serving and full public acceptance remain unverified, so never report a planned or installed rule as a working link and never use the temporary Wix domain as a redirect destination."
44
+ }
45
+ ],
46
+ "evidence": [
47
+ {
48
+ "type": "wix-docs",
49
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/introduction",
50
+ "note": "domain root; menu walked 2026-08-16 (Item SEO Tags V1, Site SEO Tags V1, SEO Pattern V1) plus the second SEO tree under Marketing (robots.txt / ads.txt / llms.txt / keyword SPI / SEO user config), Headless > Sitemap, and Site > Viewer > SEO Tags"
51
+ },
52
+ {
53
+ "type": "wix-docs",
54
+ "url": "https://dev.wix.com/docs/api-reference/business-management/marketing/seo/introduction",
55
+ "note": "second docs root: Wix splits SEO across Business Management > SEO (tags) and Business Management > Marketing > SEO (TXT files, keyword SPI, site URL config) — finding one tree does not mean the other does not exist"
56
+ },
57
+ {
58
+ "type": "domain-kb",
59
+ "path": "skills/wix-replatform/SKILL.md",
60
+ "note": "URL preservation and redirect planning remain local; the public API has not yet been integrated into an application and verification workflow"
61
+ },
62
+ {
63
+ "type": "wix-docs",
64
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/redirects/redirect-v1/create-redirect",
65
+ "note": "Public Developer Preview URL-rule API. Documentation establishes the capability, not live verification or integration into this migration workflow."
66
+ },
67
+ {
68
+ "type": "wix-docs",
69
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/redirects/redirect-v1/bulk-create-redirects",
70
+ "note": "Per-item results and potentially destructive loop/conflict handling; inspect existing rules before creating. Current method documentation says 100 items while the introduction says 500; validate the current schema before selecting a batch limit."
71
+ }
72
+ ]
73
+ }
@@ -0,0 +1,148 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "seo",
4
+ "entity": "item-seo-tags",
5
+ "displayName": "Item SEO Tags",
6
+ "capability": "content.seo-meta",
7
+ "target": {
8
+ "classification": "native",
9
+ "nativeEntity": "Item SEO Tags",
10
+ "verifiedFqdn": null,
11
+ "idPolicy": "natural-key",
12
+ "crosswalkRequired": true
13
+ },
14
+ "dependsOn": [],
15
+ "sourceAliases": [
16
+ {
17
+ "sourceSystem": "wordpress",
18
+ "sourceEntity": "yoastHeadJson",
19
+ "sourcePlugin": "wordpress-seo",
20
+ "routes": [
21
+ "/wp/v2/posts",
22
+ "/wc/v3/products",
23
+ "/wp/v2/categories"
24
+ ],
25
+ "confidence": "high"
26
+ },
27
+ {
28
+ "sourceSystem": "wordpress",
29
+ "sourceEntity": "rankMathPostMeta",
30
+ "sourcePlugin": "seo-by-rank-math",
31
+ "routes": [],
32
+ "confidence": "medium"
33
+ }
34
+ ],
35
+ "preferredWrite": {
36
+ "surface": "Item SEO Tags V1",
37
+ "endpoint": "POST /promote/seo/v1/bulk/item-seo-tags/set",
38
+ "writerId": null,
39
+ "verification": "docs",
40
+ "importSafe": true,
41
+ "bulk": true
42
+ },
43
+ "reliability": {
44
+ "status": "unknown",
45
+ "flags": []
46
+ },
47
+ "pitfalls": [
48
+ {
49
+ "code": "item-id-is-the-wix-id-not-the-source-id",
50
+ "severity": "blocker",
51
+ "summary": "An item is addressed by `{itemType}:{itemId}` where itemId is the WIX GUID of an already-created item (a page, a Blog post, a Stores product). SEO tags therefore import in a SECOND pass, after the owning entity has been written and its id recorded in the crosswalk. There is no create-by-source-id path here, which is why crosswalkRequired is true."
52
+ },
53
+ {
54
+ "code": "one-item-type-per-bulk-call",
55
+ "severity": "warning",
56
+ "summary": "Bulk Set Item SEO Tags takes a single `itemType` for the whole request and at most 100 entries (minItems 1, maxItems 100; tags maxItems 100 per item, focusKeywords maxItems 5). Batch by item type, then by 100. An unsupported item type or one that does not support bulk rejects the WHOLE call (UNSUPPORTED_ITEM_TYPE 400, BULK_NOT_SUPPORTED_FOR_ITEM_TYPE 428) with no per-entry results, so handle whole-call failure separately from per-entry failure (itemMetadata.originalIndex / bulkActionMetadata.totalFailures). Per-entry writes are idempotent, so retry only the failures."
57
+ },
58
+ {
59
+ "code": "static-page-publish-flag-hides-the-write",
60
+ "severity": "warning",
61
+ "summary": "For an item type that keeps a separate draft and published revision (STATIC_PAGE), an entry with `publish: true` updates only the PUBLISHED revision - Get/List Item SEO Tags keep returning the pre-call values for that item, and publishStatus always reports PUBLISH_STATUS_UNSPECIFIED for STATIC_PAGE because there is no live-revision read path. A verification read that compares what was written will look like a failed write. Verify static pages through Site > Viewer > Resolve Static Page SEO Tags, or accept the read-back gap in the ledger."
62
+ },
63
+ {
64
+ "code": "item-level-write-shadows-the-pattern",
65
+ "severity": "warning",
66
+ "summary": "Item tags sit at the TOP of the precedence chain (site -> Wix default pattern -> user pattern -> host page -> item). Materialising a WordPress SEO title that was itself produced by a Yoast/Rank Math TEMPLATE onto every item converts an inherited value into a thousand hard overrides that the Wix user cannot undo from one place. Import per-item tags only where the source proves a genuine per-item override (see the wordpress-seo profile's `post-seo-override-signal` entity); route template-derived values to seo/seo-pattern instead."
67
+ },
68
+ {
69
+ "code": "custom-flag-is-not-an-override-signal",
70
+ "severity": "warning",
71
+ "summary": "`tag.custom` marks a tag as an entry from the site's Advanced/Custom Tags list ONLY. Standard tags (title, description, Open Graph) always resolve with `custom: false` even when their content came from a manually saved per-page override, so it cannot be used to verify that a manual SEO edit landed. Worse, when ResolveStaticPageSeoTags is called without `seoData` the per-page data is read only from the Vibe/managed-headless override store, which holds nothing for classic Wix Editor or Wix Studio pages - there `false` means 'this API could not tell'."
72
+ },
73
+ {
74
+ "code": "primary-language-only",
75
+ "severity": "warning",
76
+ "summary": "`language` is read-only on a write and sending it fails with LANGUAGE_NOT_SUPPORTED: tags can be written only for the site's primary language. Per-locale SEO meta from a multilingual WordPress source (WPML/Polylang alongside Yoast) has no import path today - ledger it."
77
+ },
78
+ {
79
+ "code": "unsupported-item-type-is-per-site",
80
+ "severity": "warning",
81
+ "summary": "Item types documented as examples are STATIC_PAGE, BLOG_POST and STORES_PRODUCT, plus WIX_DATA_PAGE_ITEM-{pageId} for an item on a CMS-driven dynamic page. The real list depends on which business solutions the site has, and the docs say to read it from the UNSUPPORTED_ITEM_TYPE error message rather than hard-coding it. Probe once at setup time; a WordPress taxonomy-term SEO record (category/tag/product-category, all of which carry yoast_head_json) has NO confirmed item type and must not be assumed."
82
+ },
83
+ {
84
+ "code": "bulk-set-silent-success-for-stores-product",
85
+ "severity": "blocker",
86
+ "summary": "[LIVE 2026-08-27, one call, dated evidence, not a permanent platform rule] POST /promote/seo/v1/bulk/item-seo-tags/set with itemType STORES_PRODUCT returned per-entry success, yet the read-back showed empty itemSeoTags.tags and every tag still resolving TAG_SOURCE_DEFAULT_PATTERN; the single-item GET returned 404. A PATCH of the product's own seoData then resolved as TAG_SOURCE_ITEM. So Stores product SEO is written only through Catalog V3 product.seoData, and wix-writers' bulkSetItemSeoTags refuses STORES_PRODUCT. Any future probe of this call must treat a success response as untrusted until an independent read-back confirms persistence."
87
+ },
88
+ {
89
+ "code": "historical-request-shape-traps",
90
+ "severity": "warning",
91
+ "summary": "From the same 2026-08-27 probe: per-entry fieldMask is a comma-separated string, the payload must be nested under itemSeoTags (a root-level payload returns an HTML error page), and robots values are bare tokens."
92
+ }
93
+ ],
94
+ "mappingGuidance": [
95
+ "A tag is `{type, props, children, meta, custom, disabled}` where type is one of `title` | `meta` | `script` | `link`. Title -> {type:'title', children:'<the title>'}. Meta description -> {type:'meta', props:{name:'description', content:'...'}}. Canonical -> {type:'link', props:{rel:'canonical', href:'...'}}. Open Graph -> {type:'meta', props:{property:'og:title'|'og:description'|'og:image'|'og:type'|'og:url', content:'...'}}. Twitter -> {type:'meta', props:{name:'twitter:card'|..., content:'...'}}. JSON-LD -> {type:'script', props:{type:'application/ld+json'}, children:'<the JSON>'}.",
96
+ "From Yoast: yoast_head_json.title -> title tag; .description -> meta description (absent when the post has none - do NOT substitute .og_description, which Yoast derives from the excerpt); .canonical -> link rel=canonical; .og_* / .twitter_* -> the matching meta tags; .robots -> {type:'meta', props:{name:'robots', content:'index, follow, ...'}}; .schema -> a script tag. See the wordpress-seo profile for which of these are genuine overrides versus computed defaults.",
97
+ "Focus keyphrases map to `focusKeywords[]` ({term, isMain, origin}), max 5, and are NOT rendered on the page - they only feed Wix's SEO tools. Yoast `_yoast_wpseo_focuskw` and Rank Math `rank_math_focus_keyword` land here with isMain: true.",
98
+ "A write is a full replacement of what the fieldMask names (`tags`, `focusKeywords`), with no revision check. Read the item first (GET /promote/seo/v1/item-seo-tags/{itemType}/{itemId}) and send the complete set; never send a partial tags array expecting a merge.",
99
+ "`origin` is derived from the CALLER, not the request, and is not stored - reads always return ORIGIN_UNSPECIFIED. ORIGIN_MIGRATION exists in the enum, so a migration caller Wix recognises is labelled automatically; do not try to set it.",
100
+ "Two roads reach the same data, and the cheaper one is usually right. Wix Blog draft posts and Catalog V3 products carry a `seoData` (SeoSchema: the same `tags[]` plus `settings.preventAutoRedirect`) field on their own create/update call, so a blog post or product imported with its SEO already attached needs NO second pass here. Use this entity for (a) item types whose create call has no seoData, chiefly STATIC_PAGE, (b) a repair/backfill pass over items already created, and (c) reading back `resolvedTags` to verify. See stores/product and blog/post.",
101
+ "`resolvedTags[]` (read-only) reports the tags an item is expected to render with, each labelled TAG_SOURCE_SITE | TAG_SOURCE_DEFAULT_PATTERN | TAG_SOURCE_USER_PATTERN | TAG_SOURCE_HOST_PAGE | TAG_SOURCE_ITEM. That is the only place the precedence chain is reported, and it is the right post-import check: an item whose title still resolves with TAG_SOURCE_DEFAULT_PATTERN did not receive its override. It excludes tags added by site code or apps at render time, so it is not a literal copy of the rendered head.",
102
+ "`hasOverride: false` does not mean the item shows Wix defaults - it may inherit from a pattern, the site tags, or the host page. Never use it as 'nothing was imported here'.",
103
+ "Stores products: write SEO only through product.seoData, only for proven per-field overrides or an owner's materialize choice, and read `resolvedTags` from GET /promote/seo/v1/item-seo-tags/STORES_PRODUCT/{productId} to verify: an override must resolve TAG_SOURCE_ITEM with the same value; an inherited field must have no own tag and resolve from a pattern or site setting (or not at all)."
104
+ ],
105
+ "setupRequirements": [
106
+ "SCOPE.PROMOTE.MANAGE-SEO (writes)",
107
+ "SCOPE.PROMOTE.VIEW-SEO (reads and post-import verification)",
108
+ "The owning items must already exist and be crosswalked (Blog posts, Stores products, static pages)"
109
+ ],
110
+ "evidence": [
111
+ {
112
+ "type": "wix-docs",
113
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/item-seo-tags-v1/item-seo-tags-object",
114
+ "note": "object page: id format {itemType}:{itemId}, tags[] shape, focusKeywords, hasOverride, resolvedTags + TagSource enum, hostPageId, publishStatus, language, origin (read 2026-08-16)"
115
+ },
116
+ {
117
+ "type": "wix-docs",
118
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/item-seo-tags-v1/bulk-set-item-seo-tags",
119
+ "note": "POST https://www.wixapis.com/promote/seo/v1/bulk/item-seo-tags/set; single itemType per call, entries 1-100, per-entry fieldMask, publish/returnEntity flags, idempotent retries, errors UNSUPPORTED_ITEM_TYPE / BULK_NOT_SUPPORTED_FOR_ITEM_TYPE, scope SCOPE.PROMOTE.MANAGE-SEO (read 2026-08-16)"
120
+ },
121
+ {
122
+ "type": "wix-docs",
123
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/item-seo-tags-v1/set-item-seo-tags",
124
+ "note": "PATCH https://www.wixapis.com/promote/seo/v1/item-seo-tags/{itemType}/{itemId}; errors INVALID_FIELD_MASK / INVALID_TAGS / UNSUPPORTED_ITEM_TYPE / ITEM_NOT_FOUND (read 2026-08-16)"
125
+ },
126
+ {
127
+ "type": "wix-docs",
128
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/introduction",
129
+ "note": "the three-level precedence chain, full-replacement writes, no revision checking, per-site item-type coverage (read 2026-08-16)"
130
+ },
131
+ {
132
+ "type": "wix-docs",
133
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/product-object",
134
+ "note": "the alternative path: product.seoData is a SeoSchema (tags[] + settings.preventAutoRedirect) written on the product's own create call (read 2026-08-16)"
135
+ },
136
+ {
137
+ "type": "repo-research",
138
+ "path": "skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json",
139
+ "note": "source side: yoast_head_json is the RESOLVED output, _yoast_wpseo_* registered meta is the override signal"
140
+ },
141
+ {
142
+ "type": "live-run",
143
+ "path": "anonymized-live-verification",
144
+ "note": "2026-08-27 (dev notes): Bulk Set Item SEO Tags for STORES_PRODUCT reported per-entry success and persisted nothing; product PATCH seoData resolved TAG_SOURCE_ITEM. Recorded as a failure observation; preferredWrite verification stays docs."
145
+ }
146
+ ],
147
+ "notes": "Authored 2026-08-16 with the seo domain. Docs-verified only; no live write has been exercised. This entity is the standalone road to per-item SEO; the per-entity `seoData` field on blog/post and stores/product is the cheaper road for those two types and should be preferred when the item is being created anyway (see mappingGuidance)."
148
+ }
@@ -0,0 +1,91 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "seo",
4
+ "entity": "seo-pattern",
5
+ "displayName": "SEO Pattern",
6
+ "capability": "content.seo-patterns",
7
+ "target": {
8
+ "classification": "native",
9
+ "nativeEntity": "SEO Pattern",
10
+ "verifiedFqdn": null,
11
+ "idPolicy": "natural-key",
12
+ "crosswalkRequired": false
13
+ },
14
+ "sourceAliases": [],
15
+ "dependsOn": [],
16
+ "preferredWrite": {
17
+ "surface": "SEO Pattern V1",
18
+ "endpoint": "POST /promote/seo/v1/seo-patterns/{pageType}",
19
+ "writerId": null,
20
+ "verification": "docs",
21
+ "importSafe": true,
22
+ "bulk": false
23
+ },
24
+ "reliability": {
25
+ "status": "unknown",
26
+ "flags": []
27
+ },
28
+ "pitfalls": [
29
+ {
30
+ "code": "create-versus-set-is-a-real-branch",
31
+ "severity": "warning",
32
+ "summary": "POST /promote/seo/v1/seo-patterns/{pageType} fails with 409 PATTERN_ALREADY_EXISTS when the site already has its own pattern for that page type, and PATCH on the same path fails with 404 PATTERN_NOT_FOUND when it does not. `source` on the object says which is the case (the site's own pattern versus the Wix default). Read first, then branch; do not retry the other verb blindly."
33
+ },
34
+ {
35
+ "code": "variables-are-per-page-type",
36
+ "severity": "blocker",
37
+ "summary": "A pattern may reference only the variables its page type offers ({{product.name}} style, double braces). Anything else fails with INVALID_PATTERN, whose message lists the permitted variables. Call List SEO Pattern Variables (GET /promote/seo/v1/seo-patterns/{pageType}/variables) for the page type before translating a source template; a WordPress template variable such as %%title%% %%sep%% %%sitename%% (Yoast) or %title% %sep% %sitename% (Rank Math) has no automatic equivalent and must be mapped variable by variable, with anything unmappable resolved to a literal or ledgered."
38
+ },
39
+ {
40
+ "code": "page-type-availability-is-per-site",
41
+ "severity": "warning",
42
+ "summary": "UNSUPPORTED_PAGE_TYPE (400) means Wix does not recognise the page type at all; PAGE_TYPE_NOT_ON_SITE (404) means it is valid but the business solution providing it is not installed. These are different problems - the second is a setup ordering bug (install the app first), not a mapping gap. Only WIX_DATA_PAGE_ITEM supports a per-page pattern via pageId; passing pageId for any other type fails with PAGE_ID_NOT_SUPPORTED, and passing collectionName fails with COLLECTION_NAME_NOT_SUPPORTED."
43
+ },
44
+ {
45
+ "code": "pattern-write-is-blast-radius",
46
+ "severity": "warning",
47
+ "summary": "A pattern applies to EVERY item of its page type that has no override, so one bad write changes the title of every product or post on the site at once, with no revision check to stop a concurrent dashboard edit. `defaultPattern` is always returned so a reset target is known - record it before writing."
48
+ },
49
+ {
50
+ "code": "boolean-fields-cannot-be-variables-round-trip",
51
+ "severity": "info",
52
+ "summary": "A tag whose `disabled` or `custom` value is itself a variable is returned with that value UNSET (they are booleans), even though the behaviour still applies at render time. A read-modify-write round trip therefore silently drops such a variable; re-send the intended value rather than echoing what was read."
53
+ }
54
+ ],
55
+ "mappingGuidance": [
56
+ "Dependencies: no other modeled record must exist first; page types are site configuration, while a dynamic-page ID is only needed for the optional unmodeled dynamic-page case.",
57
+ "This is where a WordPress SEO plugin's per-post-type TITLE and META DESCRIPTION TEMPLATES belong - Yoast's Settings > Content Types templates (wpseo_titles option) and Rank Math's equivalent. Migrating those as patterns reproduces the source's SEO conventions in one write per page type instead of one write per item, which is exactly the split the Wix SEO introduction asks for.",
58
+ "The source side is the hard half: those templates live in wp_options, which WordPress REST does not expose, so they arrive only from a user-supplied export or by asking. No plugin profile claims content.seo-patterns today for that reason; the capability is here so the surface has an owner and the mapping is written down.",
59
+ "Pattern id is the page type (`{pageType}`), or `{pageType}:{pageId}` for a single Wix Data dynamic page. No crosswalk is needed for the page type itself, but WIX_DATA_PAGE_ITEM patterns need the created page's GUID.",
60
+ "The tag shape is identical to seo/item-seo-tags (`{type, props, children, meta, custom, disabled}`); only the values differ, in that they may contain {{variables}}.",
61
+ "Precedence: the site's own pattern beats the Wix default pattern, and both are beaten by the host page and the item. Import patterns BEFORE per-item overrides so that a later item write is a deliberate exception rather than an accidental duplicate of the pattern's output."
62
+ ],
63
+ "setupRequirements": [
64
+ "SCOPE.PROMOTE.MANAGE-SEO (writes)",
65
+ "SCOPE.PROMOTE.VIEW-SEO (reads, incl. List SEO Pattern Variables)",
66
+ "The business solution that provides each page type must be installed before its pattern is written"
67
+ ],
68
+ "evidence": [
69
+ {
70
+ "type": "wix-docs",
71
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/seo-pattern-v1/seo-pattern-object",
72
+ "note": "object page: id {pageType} / {pageType}:{pageId}, pattern vs defaultPattern, source, boolean-variable caveat, language is the primary language (read 2026-08-16)"
73
+ },
74
+ {
75
+ "type": "wix-docs",
76
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/seo-pattern-v1/set-seo-pattern",
77
+ "note": "PATCH https://www.wixapis.com/promote/seo/v1/seo-patterns/{pageType}; errors PATTERN_NOT_FOUND / INVALID_PATTERN / UNSUPPORTED_PAGE_TYPE / PAGE_ID_NOT_SUPPORTED / COLLECTION_NAME_NOT_SUPPORTED (read 2026-08-16)"
78
+ },
79
+ {
80
+ "type": "wix-docs",
81
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/seo-pattern-v1/create-seo-pattern",
82
+ "note": "POST same path; 409 PATTERN_ALREADY_EXISTS, 404 PAGE_TYPE_NOT_ON_SITE (read 2026-08-16)"
83
+ },
84
+ {
85
+ "type": "wix-docs",
86
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/seo-pattern-v1/list-seo-pattern-variables",
87
+ "note": "GET https://www.wixapis.com/promote/seo/v1/seo-patterns/{pageType}/variables - the only authoritative source of the variables a page type offers (read 2026-08-16)"
88
+ }
89
+ ],
90
+ "notes": "Authored 2026-08-16 with the seo domain. Docs-verified only. Unclaimed by any WordPress plugin profile today because the source templates are in wp_options and unreadable over REST - the honest verdict for the Yoast/Rank Math template settings is reconfigure-in-wix unless the user supplies an export, and this entity is where that reconfiguration lands if it is ever automated."
91
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "seo",
4
+ "entity": "site-seo-tags",
5
+ "displayName": "Site SEO Tags",
6
+ "capability": "content.site-seo-tags",
7
+ "target": {
8
+ "classification": "native",
9
+ "nativeEntity": "Site SEO Tags",
10
+ "verifiedFqdn": null,
11
+ "idPolicy": "not-applicable",
12
+ "crosswalkRequired": false
13
+ },
14
+ "sourceAliases": [],
15
+ "dependsOn": [],
16
+ "preferredWrite": {
17
+ "surface": "Site SEO Tags V1",
18
+ "endpoint": "PATCH /promote/seo/v1/site-seo-tags",
19
+ "writerId": null,
20
+ "verification": "docs",
21
+ "importSafe": true,
22
+ "bulk": false
23
+ },
24
+ "reliability": {
25
+ "status": "unknown",
26
+ "flags": []
27
+ },
28
+ "pitfalls": [
29
+ {
30
+ "code": "site-noindex-is-writable-here",
31
+ "severity": "blocker",
32
+ "summary": "A `robots` tag with `noindex` or `none` at site level stops search engines indexing the WHOLE site. A WordPress source in staging almost always carries site-wide noindex (blog_public = 0; verified live on an anonymized verification environment 2026-08-16, where every yoast_head_json.robots reported index: noindex). Copying the source's site-level robots value across would silently de-index the new Wix site. Never carry noindex; treat indexability as a launch decision, not migrated data."
33
+ },
34
+ {
35
+ "code": "only-site-wide-tags-accepted",
36
+ "severity": "warning",
37
+ "summary": "Only og:image (default social share image), a site-level robots directive, search-engine verification tags (google-site-verification, msvalidate.01, p:domain_verify, yandex-verification - one per provider) and other site-wide name/content meta are valid here. A title, description or canonical belongs to a page and is rejected with INVALID_TAGS; use seo/item-seo-tags or seo/seo-pattern."
38
+ },
39
+ {
40
+ "code": "embed-tags-are-read-only",
41
+ "severity": "info",
42
+ "summary": "`embedTags[]` returns verification tags a Wix user added through the dashboard's SEO settings, which are stored as HTML embeds rather than as site tags. They are never included in `tags` and cannot be written here, so a read-then-write round trip does not preserve them - they simply stay where they are. Empty also when they cannot be retrieved, so an empty array is not proof there are none."
43
+ },
44
+ {
45
+ "code": "full-replacement-no-revision-check",
46
+ "severity": "warning",
47
+ "summary": "PATCH with a fieldMask replaces the named field in full and there is no revision check (INVALID_FIELD_MASK when the mask is empty or names an unwritable field). Read the current tags, merge, and send the complete set."
48
+ }
49
+ ],
50
+ "mappingGuidance": [
51
+ "Dependencies: no other modeled record must exist first; site SEO tags are a site-level configuration resource.",
52
+ "The migratable content here is thin and deliberate: the site's default Open Graph share image and the search-engine VERIFICATION tags. Everything else a WordPress SEO plugin keeps at site level - title/meta templates per post type, breadcrumb settings, social profile URLs, knowledge-graph organisation data - is either a pattern (seo/seo-pattern) or reconfigure-in-wix.",
53
+ "Verification tags are worth carrying because they preserve an existing Google Search Console / Bing property association across the platform switch. In WordPress they live in plugin OPTIONS (Yoast: wpseo `googleverify`/`msverify`; Rank Math: `rank-math-options-general`), which are NOT exposed over REST - they arrive only from a user-supplied export or by asking the user. Treat them as blocked: user-file, never as absent.",
54
+ "Site tags are the BOTTOM of the precedence chain, so anything set here is overridden by a pattern, the host page, or the item. Setting a site-wide description is not a way to give every page a description.",
55
+ "`language` is always empty: site SEO tags are not language specific, one set applies to every language version."
56
+ ],
57
+ "setupRequirements": [
58
+ "SCOPE.PROMOTE.MANAGE-SEO (writes)",
59
+ "SCOPE.PROMOTE.VIEW-SEO (reads)"
60
+ ],
61
+ "evidence": [
62
+ {
63
+ "type": "wix-docs",
64
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/site-seo-tags-v1/site-seo-tags-object",
65
+ "note": "object page: supported site-wide tags (og:image, robots noindex/none, verification providers), embedTags read-only, language always empty, origin derived from caller (read 2026-08-16)"
66
+ },
67
+ {
68
+ "type": "wix-docs",
69
+ "url": "https://dev.wix.com/docs/api-reference/business-management/seo/site-seo-tags-v1/set-site-seo-tags",
70
+ "note": "PATCH https://www.wixapis.com/promote/seo/v1/site-seo-tags; errors INVALID_FIELD_MASK / INVALID_TAGS; scope SCOPE.PROMOTE.MANAGE-SEO (read 2026-08-16)"
71
+ },
72
+ {
73
+ "type": "repo-research",
74
+ "path": "skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json",
75
+ "note": "source side: Yoast site-level settings live in wp_options and are not REST-readable"
76
+ }
77
+ ],
78
+ "notes": "Authored 2026-08-16 with the seo domain. No WordPress plugin profile claims content.site-seo-tags today, because the source-side values sit in plugin options that REST does not expose; the entity exists so the Site SEO Tags V1 surface has an owner and so the noindex trap is written down before someone copies it across."
79
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "site",
4
+ "fetchedAt": "2026-09-01",
5
+ "roots": [
6
+ "api-reference/business-management/site-properties"
7
+ ],
8
+ "surfaces": [
9
+ {
10
+ "id": "api-reference/business-management/site-properties/properties",
11
+ "title": "Properties",
12
+ "url": "https://dev.wix.com/docs/api-reference/business-management/site-properties/properties",
13
+ "group": null,
14
+ "verdict": "claimed",
15
+ "refs": [
16
+ "site/business-contact"
17
+ ],
18
+ "reviewedOn": "2026-09-01",
19
+ "note": "Business Contact is authored. Profile (display name, business name, logo, description), Schedule, Region and Consent Policy are real siblings on the same API with no entity yet -- each needs its own source mapping before it is worth authoring."
20
+ },
21
+ {
22
+ "id": "api-reference/business-management/site-properties/skills",
23
+ "title": "Skills",
24
+ "url": "https://dev.wix.com/docs/api-reference/business-management/site-properties/skills",
25
+ "group": null,
26
+ "verdict": "gap",
27
+ "reviewedOn": "2026-09-01",
28
+ "reason": "Holds 'Change Payment Currency (Site Properties)' and 'Site Settings Dashboard Navigation'. The currency one is a REAL uncovered need: a source store declares its own currency (WooCommerce: woocommerce_currency in the general settings group) and nothing in this pipeline reads or applies it, so a migrated site can price in a currency the merchant never chose. No entity authored yet; the source-side read is itself not part of the default discovery sweep.",
29
+ "tracking": "site/business-contact covers the address half of this group; the store's declared CURRENCY is captured by rp-source-wordpress/scripts/capture-store-settings.js and reported at the setup gate, but nothing WRITES it — Change Payment Currency has no entity yet. Awaiting a decision on whether a migration should set a site's currency at all."
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "site",
4
+ "dependsOnRequired": true,
5
+ "displayName": "Wix Site Properties",
6
+ "ownerHint": "Site Properties domain owners (Business Info: profile, contact, schedule, region, consent policy)",
7
+ "wixAppsRequired": [],
8
+ "docsRoots": [
9
+ "api-reference/business-management/site-properties"
10
+ ],
11
+ "defaultImportOrder": [
12
+ "business-contact"
13
+ ],
14
+ "sharedPitfalls": [
15
+ {
16
+ "code": "field-mask-clears-what-it-lists-but-you-did-not-send",
17
+ "severity": "blocker",
18
+ "summary": "Every Site Properties update takes a `fields.paths[]` mask, and its semantics are DESTRUCTIVE in one direction: a property named in `fields.paths` but absent from the payload object is CLEARED, not left alone. Only properties absent from `fields.paths` are ignored. So the mask must list EXACTLY the properties actually being sent -- never a convenient superset, and never a copy of a documentation example's list. Wix's own Update Business Contact example demonstrates the hazard rather than the safe pattern: it passes paths ['phone','fax','email','address','businessSchedule'] while sending no businessSchedule, which by the documented rule wipes the site's business hours. Build the mask FROM the payload's own keys, never alongside it."
19
+ },
20
+ {
21
+ "code": "updates-return-an-empty-body-so-read-back-is-a-separate-call",
22
+ "severity": "warning",
23
+ "summary": "Update Business Contact (and its sibling updates) return `{}` -- no echo of what was stored, no revision. A successful write proves only that the request was accepted. To verify anything actually landed, call GET /site-properties/v4/properties separately and compare. This matters more than usual here because the field mask above can silently clear a field on the same call that successfully sets another."
24
+ },
25
+ {
26
+ "code": "site-properties-is-not-versioned-by-revision",
27
+ "severity": "info",
28
+ "summary": "Unlike most Wix entities, these calls take no `revision` and cannot 409 on a concurrent write. Two writers updating different properties will not conflict, but two writers updating the SAME property silently last-write-wins. Read before writing when a value may already be set by the merchant or by an earlier phase of the run."
29
+ },
30
+ {
31
+ "code": "a-site-can-legitimately-have-no-business-address-at-all",
32
+ "severity": "info",
33
+ "summary": "LIVE-OBSERVED: GET /site-properties/v4/properties on a fresh site returned only locale/currency/timezone with no business address key present at all -- an absent address is the normal starting state, not an error or a partially-migrated one. Treat 'no address' as 'nothing written yet' and never infer from its absence that a write failed."
34
+ }
35
+ ],
36
+ "evidence": [
37
+ {
38
+ "type": "wix-docs",
39
+ "url": "https://dev.wix.com/docs/api-reference/business-management/site-properties/introduction",
40
+ "note": "Site Properties is the single source of truth for the site's public business information; the merchant edits the same values in the dashboard under Settings > Business Info"
41
+ },
42
+ {
43
+ "type": "wix-docs",
44
+ "url": "https://dev.wix.com/docs/api-reference/business-management/site-properties/properties/introduction",
45
+ "note": "the five property groups: Profile, Contact, Schedule, Region, Consent Policy"
46
+ }
47
+ ],
48
+ "notes": "Authored to give the business address a real home. It had been an unowned gap: a migrated site published with an empty address field, and the pickup-location entity needed an address the pipeline had no target for. Only `business-contact` is authored so far -- Profile (site display name, business name, logo, description), Schedule, Region (locale, currency, timezone) and Consent Policy are real siblings on the same API and are the obvious next entities, but each needs its own source mapping before it is worth authoring."
49
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "site",
4
+ "entity": "business-contact",
5
+ "displayName": "Site Business Contact",
6
+ "capability": "site.business-contact",
7
+ "target": {
8
+ "classification": "setup-config",
9
+ "nativeEntity": "BusinessContactData",
10
+ "verifiedFqdn": null,
11
+ "idPolicy": "not-applicable",
12
+ "crosswalkRequired": false
13
+ },
14
+ "dependsOn": [],
15
+ "sourceAliases": [
16
+ {
17
+ "sourceSystem": "woocommerce",
18
+ "sourceEntity": "settings.general",
19
+ "routes": [
20
+ "/wc/v3/settings/general"
21
+ ],
22
+ "confidence": "high",
23
+ "note": "The store's own address lives in the general settings group as woocommerce_store_address / _address_2 / _city / _postcode / woocommerce_default_country. Two traps: the REST index advertises only the PARAMETERIZED form /wc/v3/settings/(?P<group>...), so the group must be read directly; and the WooCommerce consumer key 401s here while the WordPress application password succeeds. See rp-source-wordpress's SKILL.md."
24
+ }
25
+ ],
26
+ "preferredWrite": {
27
+ "surface": "Site Properties",
28
+ "endpoint": "POST https://www.wixapis.com/site-properties/v4/properties/business-contact",
29
+ "writerId": "updateBusinessContact",
30
+ "verification": "verified-live",
31
+ "importSafe": true,
32
+ "bulk": false,
33
+ "releaseStatus": "stable",
34
+ "decision": "A site-wide singleton, applied at the setup gate as configuration -- not a per-record import. Permission SITE_PROPERTIES.UPDATE_BUSINESS_CONTACT, scope SCOPE.DC-SITEPROP.MANAGE-BUSINESS-CONTACT. Read back with GET /site-properties/v4/properties, which is a separate call because the update returns an empty body."
35
+ },
36
+ "reliability": {
37
+ "status": "reliable",
38
+ "flags": []
39
+ },
40
+ "pitfalls": [
41
+ {
42
+ "code": "listing-a-field-you-do-not-send-clears-it",
43
+ "severity": "blocker",
44
+ "summary": "`fields.paths[]` is destructive in one direction: a property NAMED in the mask but ABSENT from `businessContact` is CLEARED. Migrating only an address therefore means sending paths ['address'] and nothing more -- adding 'email','phone','fax' to be thorough wipes contact details the merchant may already have entered by hand. Build the mask from the payload's own keys. Wix's own documented example is itself unsafe to copy: it lists 'businessSchedule' in paths while sending none."
45
+ },
46
+ {
47
+ "code": "state-is-a-bare-subdivision-and-the-source-encodes-it-in-the-country-field",
48
+ "severity": "warning",
49
+ "summary": "Wix takes `country` (ISO 3166-1 alpha-2) and `state` as separate fields. WooCommerce packs both into one setting: `woocommerce_default_country` is either `IL` or `COUNTRY:STATE` (e.g. `US:CA`). Split on the colon -- the same encoding a WooCommerce shipping zone's `state`-type location uses, so shipping-build.js already carries the parse. Sending `US:CA` as `country` does not error; it just stores a country code that matches nothing."
50
+ },
51
+ {
52
+ "code": "street-is-free-text-do-not-parse-a-house-number-out-of-it",
53
+ "severity": "warning",
54
+ "summary": "The object has separate `street` and `streetNumber` fields, which invites splitting the source's single address line. Do not. WooCommerce's `woocommerce_store_address` is one free-text field with no structure guarantee -- some shops put the number first, some last, some have no number at all (a store address can be a street name only). Put the whole source line in `street`, leave `streetNumber` empty, and let the merchant correct it. A wrong split is worse than no split: it looks deliberate."
55
+ },
56
+ {
57
+ "code": "zip-has-a-20-character-limit-the-source-does-not",
58
+ "severity": "warning",
59
+ "summary": "`zip` is capped at 20 characters; WooCommerce's `woocommerce_store_postcode` is unbounded free text. Guard the length rather than letting the API reject the whole write for one long field."
60
+ },
61
+ {
62
+ "code": "update-returns-nothing-so-success-is-not-evidence",
63
+ "severity": "warning",
64
+ "summary": "The response body is `{}`. A 200 proves the request was accepted, not that the address is stored as intended -- and given the clearing behaviour above, a call can succeed while having wiped a sibling field. Always follow a write with GET /site-properties/v4/properties and compare what came back. CONFIRMED LIVE 2026-09-01: an address-only write returned {} and the follow-up read showed the address stored exactly as sent, with the site's other contact fields untouched."
65
+ },
66
+ {
67
+ "code": "coordinates-and-google-formatted-address-have-no-source",
68
+ "severity": "info",
69
+ "summary": "`coordinates` and `googleFormattedAddress` are real fields with no WooCommerce counterpart. Omit them rather than geocoding: a migration that silently invents a latitude/longitude is asserting a precision the source never had. Wix resolves display formatting itself."
70
+ }
71
+ ],
72
+ "mappingGuidance": [
73
+ "Field map: woocommerce_store_address -> street (whole line, unparsed); woocommerce_store_address_2 -> apartmentNumber; woocommerce_store_city -> city; woocommerce_store_postcode -> zip (truncate-guard at 20); woocommerce_default_country -> country, plus state when the value is COUNTRY:STATE. Set isPhysical true -- a shop's registered address is a real place. Omit coordinates and googleFormattedAddress.",
74
+ "Send `fields.paths` built from the keys actually present on the payload, never a fixed list. See this file's first pitfall; it is the one mistake here that destroys data rather than failing loudly.",
75
+ "This is the site's OWN address. It is NOT a pickup address, and must never be used as one without a human confirming it -- a shop's registered address and the place customers collect from are routinely different (they can sit in different towns). ecom/pickup-location may OFFER this value as a default to confirm; it may not adopt it.",
76
+ "Apply at the setup gate with the other configuration, and read back afterwards. An absent business address on the destination is the normal starting state, not evidence of a failed earlier write."
77
+ ],
78
+ "setupRequirements": [],
79
+ "objectPageException": "Site Properties is modelled as a property stream with per-group update methods rather than as a fetchable object with its own '…-object' reference page; the API-reference tree exposes Update Business Contact / Profile / Schedule / Consent Policy and a single Get Properties read, with no object page for BusinessContactData. The field shape here is taken from the Update Business Contact method schema.",
80
+ "evidence": [
81
+ {
82
+ "type": "wix-docs",
83
+ "url": "https://dev.wix.com/docs/api-reference/business-management/site-properties/properties/update-business-contact",
84
+ "note": "full request schema: businessContact.address fields (street, streetNumber, apartmentNumber, city, state, country, zip maxLength 20, hint, isPhysical, googleFormattedAddress, coordinates), the fields.paths mask semantics, the empty response body, permission and scope names"
85
+ },
86
+ {
87
+ "type": "wix-docs",
88
+ "url": "https://dev.wix.com/docs/api-reference/business-management/site-properties/properties/introduction",
89
+ "note": "Site Properties as the single source of truth for the site's public business information"
90
+ },
91
+ {
92
+ "type": "live-verification",
93
+ "path": "anonymized-live-verification",
94
+ "note": "GET /site-properties/v4/properties on a fresh site returned only locale/currency/timezone with no business address key present"
95
+ },
96
+ {
97
+ "type": "live-run",
98
+ "path": "anonymized-live-verification",
99
+ "note": "2026-09-01: a site whose business address was entirely blank (street/city/zip empty, isPhysical false) was populated by an address-only update. Read-back matched the payload field for field; email and phone were absent before and after, confirming the derived field mask cleared nothing."
100
+ }
101
+ ],
102
+ "notes": "Authored 2026-09-01 to close an unowned gap: nothing in the pipeline had ever written a business address, so every migrated site published with the field empty, and ecom/pickup-location needed an address with no target entity to point at. Write path VERIFIED LIVE the same day against a site whose address was blank."
103
+ }