@wix/agent-skills 1.33.0 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (635) hide show
  1. package/README.md +23 -0
  2. package/package.json +2 -2
  3. package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
  4. package/skills/wix-export/SKILL.md +83 -0
  5. package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
  6. package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
  7. package/skills/wix-harmony-editor/SKILL.md +317 -0
  8. package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
  9. package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
  10. package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
  11. package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
  12. package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
  13. package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
  14. package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
  15. package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
  16. package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
  17. package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
  18. package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
  19. package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
  20. package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
  21. package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
  22. package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
  23. package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
  24. package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
  25. package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
  26. package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
  27. package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
  28. package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
  29. package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
  30. package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
  31. package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
  32. package/skills/wix-headless/SKILL.md +7 -2
  33. package/skills/wix-headless/references/CAPABILITIES.md +6 -1
  34. package/skills/wix-headless/references/DISCOVERY.md +2 -1
  35. package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
  36. package/skills/wix-headless/references/SEED.md +3 -2
  37. package/skills/wix-headless/references/SETUP.md +1 -0
  38. package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
  39. package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
  40. package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
  41. package/skills/wix-headless/references/managed/CREATE.md +1 -1
  42. package/skills/wix-headless-kit/SKILL.md +110 -21
  43. package/skills/wix-headless-kit/guides/api-run.md +15 -13
  44. package/skills/wix-headless-kit/guides/existing-site.md +31 -0
  45. package/skills/wix-headless-kit/guides/migration.md +49 -17
  46. package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
  47. package/skills/wix-headless-kit/install/context.mjs +61 -6
  48. package/skills/wix-headless-kit/install/pins.json +1 -1
  49. package/skills/wix-headless-kit/install/setup.mjs +107 -12
  50. package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
  51. package/skills/wix-headless-replatform/SKILL.md +116 -0
  52. package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
  53. package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
  54. package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
  55. package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
  56. package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
  57. package/skills/wix-headless-replatform/references/output-contract.md +93 -0
  58. package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
  59. package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
  60. package/skills/wix-headless-replatform/references/safety.md +19 -0
  61. package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
  62. package/skills/wix-headless-replatform/references/workflow.md +157 -0
  63. package/skills/wix-headless-replatform/registry/README.md +20 -0
  64. package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
  65. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
  66. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
  67. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
  68. package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
  69. package/skills/wix-headless-replatform/registry/registry.json +36 -0
  70. package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
  71. package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
  72. package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
  73. package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
  74. package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
  75. package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
  76. package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
  77. package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
  78. package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
  79. package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
  80. package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
  81. package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
  82. package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
  83. package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
  84. package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
  85. package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
  86. package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
  87. package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
  88. package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
  89. package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
  90. package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
  91. package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
  92. package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
  93. package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
  94. package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
  95. package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
  96. package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
  97. package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
  98. package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
  99. package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
  100. package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
  101. package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
  102. package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
  103. package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
  104. package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
  105. package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
  106. package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
  107. package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
  108. package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
  109. package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
  110. package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
  111. package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
  112. package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
  113. package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
  114. package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
  115. package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
  116. package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
  117. package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
  118. package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
  119. package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
  120. package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
  121. package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
  122. package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
  123. package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
  124. package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
  125. package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
  126. package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
  127. package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
  128. package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
  129. package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
  130. package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
  131. package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
  132. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
  133. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
  134. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
  135. package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
  136. package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
  137. package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
  138. package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
  139. package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
  140. package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
  141. package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
  142. package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
  143. package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
  144. package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
  145. package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
  146. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
  147. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
  148. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
  149. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
  150. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
  151. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
  152. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
  153. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
  154. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
  155. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
  156. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
  157. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
  158. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
  159. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
  160. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
  161. package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
  162. package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
  163. package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
  164. package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
  165. package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
  166. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
  167. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
  168. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
  169. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
  170. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
  171. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
  172. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
  173. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
  174. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
  175. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
  176. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
  177. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
  178. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
  179. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
  180. package/skills/wix-import/SKILL.md +90 -0
  181. package/skills/wix-manage/SKILL.md +38 -10
  182. package/skills/wix-manage/references/automations/actions.md +11 -11
  183. package/skills/wix-manage/references/automations/activation-status.md +6 -9
  184. package/skills/wix-manage/references/automations/api-catalog.md +48 -32
  185. package/skills/wix-manage/references/automations/automation-model.md +97 -22
  186. package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
  187. package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
  188. package/skills/wix-manage/references/automations/conditions.md +187 -0
  189. package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
  190. package/skills/wix-manage/references/automations/special-actions.md +210 -0
  191. package/skills/wix-manage/references/automations/triggers.md +47 -10
  192. package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
  193. package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
  194. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
  195. package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
  196. package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
  197. package/skills/wix-manage/references/events/create-wix-event.md +136 -73
  198. package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
  199. package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
  200. package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
  201. package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
  202. package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
  203. package/skills/wix-manage/references/sites/upload-static-site.md +127 -8
  204. package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
  205. package/skills/wix-replatform/.publish-manifest.json +5 -5
  206. package/skills/wix-replatform/CLI.md +162 -0
  207. package/skills/wix-replatform/README.md +52 -0
  208. package/skills/wix-replatform/SKILL.md +229 -684
  209. package/skills/wix-replatform/console/account.css +1 -0
  210. package/skills/wix-replatform/console/app.css +1 -0
  211. package/skills/wix-replatform/console/app.js +117 -0
  212. package/skills/wix-replatform/console/index.html +4 -0
  213. package/skills/wix-replatform/console/json.css +11 -0
  214. package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
  215. package/skills/wix-replatform/lib/app-page-routing.js +75 -0
  216. package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
  217. package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
  218. package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
  219. package/skills/wix-replatform/lib/completion-report.js +1393 -13
  220. package/skills/wix-replatform/lib/config-env.js +85 -11
  221. package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
  222. package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
  223. package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
  224. package/skills/wix-replatform/lib/destination-choice.js +163 -0
  225. package/skills/wix-replatform/lib/destination-handoff.js +62 -0
  226. package/skills/wix-replatform/lib/destination-http.js +81 -0
  227. package/skills/wix-replatform/lib/destination-route.js +98 -0
  228. package/skills/wix-replatform/lib/destination.js +919 -0
  229. package/skills/wix-replatform/lib/discovered-census.js +231 -0
  230. package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
  231. package/skills/wix-replatform/lib/document-url-guard.js +203 -0
  232. package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
  233. package/skills/wix-replatform/lib/entity-verification.js +18 -0
  234. package/skills/wix-replatform/lib/execution-capability.js +120 -0
  235. package/skills/wix-replatform/lib/execution-log.js +170 -0
  236. package/skills/wix-replatform/lib/execution-manifest.js +20 -2
  237. package/skills/wix-replatform/lib/execution-state.js +22 -0
  238. package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
  239. package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
  240. package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
  241. package/skills/wix-replatform/lib/import-recovery.js +800 -6
  242. package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
  243. package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
  244. package/skills/wix-replatform/lib/link-audit.js +173 -0
  245. package/skills/wix-replatform/lib/link-census.js +194 -0
  246. package/skills/wix-replatform/lib/link-plan.js +148 -0
  247. package/skills/wix-replatform/lib/link-verification.js +274 -0
  248. package/skills/wix-replatform/lib/link-write-journal.js +42 -0
  249. package/skills/wix-replatform/lib/local-state.js +869 -30
  250. package/skills/wix-replatform/lib/member-completion.js +658 -0
  251. package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
  252. package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
  253. package/skills/wix-replatform/lib/migration-completion.js +311 -0
  254. package/skills/wix-replatform/lib/operator-identity.js +47 -0
  255. package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
  256. package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
  257. package/skills/wix-replatform/lib/orchestration-router.js +608 -32
  258. package/skills/wix-replatform/lib/orchestration-state.js +188 -12
  259. package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
  260. package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
  261. package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
  262. package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
  263. package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
  264. package/skills/wix-replatform/lib/progress-log.js +19 -3
  265. package/skills/wix-replatform/lib/read-back-approval.js +184 -0
  266. package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
  267. package/skills/wix-replatform/lib/read-back-contract.js +243 -0
  268. package/skills/wix-replatform/lib/read-back-extract.js +118 -0
  269. package/skills/wix-replatform/lib/read-back-gate.js +734 -0
  270. package/skills/wix-replatform/lib/read-back-reads.js +94 -0
  271. package/skills/wix-replatform/lib/read-back-state.js +107 -0
  272. package/skills/wix-replatform/lib/read-back-summary.js +81 -0
  273. package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
  274. package/skills/wix-replatform/lib/run-controller.js +401 -0
  275. package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
  276. package/skills/wix-replatform/lib/setup-verification.js +148 -0
  277. package/skills/wix-replatform/lib/source-access.js +231 -0
  278. package/skills/wix-replatform/lib/source-coverage.js +1130 -0
  279. package/skills/wix-replatform/lib/source-secrets.js +277 -0
  280. package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
  281. package/skills/wix-replatform/lib/task-state.js +110 -0
  282. package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
  283. package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
  284. package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
  285. package/skills/wix-replatform/lib/url-verification.js +315 -0
  286. package/skills/wix-replatform/lib/user-action-effects.js +42 -0
  287. package/skills/wix-replatform/lib/user-actions.js +264 -0
  288. package/skills/wix-replatform/lib/website-handoff.js +1220 -0
  289. package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
  290. package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
  291. package/skills/wix-replatform/lib/write-verification-state.js +92 -0
  292. package/skills/wix-replatform/lib/write-verification.js +274 -0
  293. package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
  294. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
  295. package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
  296. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
  297. package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
  298. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
  299. package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
  300. package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
  301. package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
  302. package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
  303. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
  304. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
  305. package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
  306. package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
  307. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
  308. package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
  309. package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
  310. package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
  311. package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
  312. package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
  313. package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
  314. package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
  315. package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
  316. package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
  317. package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
  318. package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
  319. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
  320. package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
  321. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
  322. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  323. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
  324. package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
  325. package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
  326. package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
  327. package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
  328. package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
  329. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
  330. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
  331. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
  332. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
  333. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
  334. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
  335. package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
  336. package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
  337. package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
  338. package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
  339. package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
  340. package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
  341. package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
  342. package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
  343. package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
  344. package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
  345. package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
  346. package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
  347. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
  348. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
  349. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
  350. package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
  351. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
  352. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
  353. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
  354. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
  355. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
  356. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
  357. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
  358. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
  359. package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
  360. package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
  361. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
  362. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
  363. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
  364. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
  365. package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
  366. package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
  367. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
  368. package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
  369. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
  370. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
  371. package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
  372. package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
  373. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
  374. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
  375. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
  376. package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
  377. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
  378. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
  379. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
  380. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
  381. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
  382. package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
  383. package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
  384. package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
  385. package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
  386. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
  387. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
  388. package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
  389. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
  390. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
  391. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
  392. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
  393. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
  394. package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
  395. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
  396. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
  397. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
  398. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
  399. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
  400. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
  401. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
  402. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
  403. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
  404. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
  405. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
  406. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
  407. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
  408. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
  409. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
  410. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
  411. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
  412. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
  413. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
  414. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
  415. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
  416. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
  417. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
  418. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
  419. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
  420. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
  421. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
  422. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
  423. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
  424. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
  425. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
  426. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
  427. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
  428. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
  429. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
  430. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
  431. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
  432. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
  433. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
  434. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
  435. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
  436. package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
  437. package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
  438. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
  439. package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
  440. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
  441. package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
  442. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
  443. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
  444. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
  445. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
  446. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
  447. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
  448. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
  449. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
  450. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
  451. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
  452. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
  453. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
  454. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
  455. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
  456. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
  457. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
  458. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
  459. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
  460. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
  461. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
  462. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
  463. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
  464. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
  465. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
  466. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
  467. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
  468. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
  469. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
  470. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
  471. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
  472. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
  473. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
  474. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
  475. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
  476. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
  477. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
  478. package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
  479. package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
  480. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
  481. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
  482. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
  483. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
  484. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
  485. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
  486. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
  487. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
  488. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
  489. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
  490. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
  491. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
  492. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
  493. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
  494. package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
  495. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
  496. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
  497. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
  498. package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
  499. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
  500. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
  501. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
  502. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
  503. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
  504. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
  505. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
  506. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
  507. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
  508. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
  509. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
  510. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
  511. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
  512. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
  513. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
  514. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
  515. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
  516. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
  517. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
  518. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
  519. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
  520. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
  521. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
  522. package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
  523. package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
  524. package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
  525. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
  526. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
  527. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
  528. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
  529. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
  530. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
  531. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
  532. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
  533. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
  534. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
  535. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
  536. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
  537. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
  538. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
  539. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
  540. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
  541. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
  542. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
  543. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
  544. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
  545. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
  546. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
  547. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
  548. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
  549. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
  550. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
  551. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
  552. package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
  553. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
  554. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
  555. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
  556. package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
  557. package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
  558. package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
  559. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
  560. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
  561. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
  562. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
  563. package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
  564. package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
  565. package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
  566. package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
  567. package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
  568. package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
  569. package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
  570. package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
  571. package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
  572. package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
  573. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
  574. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
  575. package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
  576. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
  577. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
  578. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
  579. package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
  580. package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
  581. package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
  582. package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
  583. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
  584. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
  585. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
  586. package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
  587. package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
  588. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
  589. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
  590. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
  591. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
  592. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
  593. package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
  594. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
  595. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
  596. package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
  597. package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
  598. package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
  599. package/skills/wix-replatform/scripts/discovered-census.js +26 -0
  600. package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
  601. package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
  602. package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
  603. package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
  604. package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
  605. package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
  606. package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
  607. package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
  608. package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
  609. package/skills/wix-replatform/scripts/migration-completion.js +76 -0
  610. package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
  611. package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
  612. package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
  613. package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
  614. package/skills/wix-replatform/scripts/replatform-console.js +146 -0
  615. package/skills/wix-replatform/scripts/replatform.js +436 -0
  616. package/skills/wix-replatform/scripts/source-secrets.js +77 -0
  617. package/skills/wix-replatform/scripts/url-redirects.js +286 -0
  618. package/skills/wix-replatform/scripts/user-action.js +58 -0
  619. package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
  620. package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
  621. package/skills/wix-replatform/scripts/wix-destination.js +143 -0
  622. package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
  623. package/skills/wix-vibe-headless/SKILL.md +7 -3
  624. package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
  625. package/skills/wix-vibe-headless/platforms/base44.md +1 -0
  626. package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
  627. package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
  628. package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
  629. package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
  630. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
  631. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
  632. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
  633. package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
  634. package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
  635. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
@@ -3,6 +3,7 @@
3
3
  "domain": "ecom",
4
4
  "entity": "order",
5
5
  "displayName": "eCommerce Order",
6
+ "capability": "commerce.orders",
6
7
  "target": {
7
8
  "classification": "native-plus-cms",
8
9
  "nativeEntity": "eCommerce Order",
@@ -10,19 +11,51 @@
10
11
  "idPolicy": "server-assigned",
11
12
  "crosswalkRequired": true
12
13
  },
14
+ "dependsOn": [
15
+ "crm/contact",
16
+ "stores/product",
17
+ "gift-cards/gift-card-product",
18
+ "stores/coupon",
19
+ "gift-cards/gift-card",
20
+ "tax/tax-group",
21
+ "ecom/shipping-option",
22
+ "ecom/delivery-profile"
23
+ ],
24
+ "blockedSourceDependencies": [
25
+ {
26
+ "sourceEntityRef": "plugin.woo-checkout-field-editor-pro.checkout-field-definition",
27
+ "degradedField": "extendedFields",
28
+ "pitfallCode": "checkout-custom-field-values-need-definitions",
29
+ "degradation": "deferred"
30
+ }
31
+ ],
13
32
  "sourceAliases": [
14
- { "sourceSystem": "woocommerce", "sourceEntity": "order", "routes": ["/wc/v3/orders"], "confidence": "high" },
15
- { "sourceSystem": "wix", "sourceEntity": "ecomOrder", "routes": ["eCommerce Orders API"], "confidence": "high" }
33
+ {
34
+ "sourceSystem": "woocommerce",
35
+ "sourceEntity": "order",
36
+ "routes": [
37
+ "/wc/v3/orders"
38
+ ],
39
+ "confidence": "high"
40
+ },
41
+ {
42
+ "sourceSystem": "wix",
43
+ "sourceEntity": "ecomOrder",
44
+ "routes": [
45
+ "eCommerce Orders API"
46
+ ],
47
+ "confidence": "high"
48
+ }
16
49
  ],
17
50
  "preferredWrite": {
18
51
  "surface": "eCom Orders",
19
52
  "endpoint": "POST /ecom/v1/orders/import",
20
53
  "writerId": "importOrder",
21
- "verification": "unverified",
54
+ "verification": "verified-live",
22
55
  "importSafe": true,
23
56
  "bulk": false,
24
57
  "releaseStatus": "beta",
25
- "decision": "Import Order is the dedicated migration path (ECOM-01): settable purchasedDate/createdDate/number, values stored as-is, no side effects (no buyer notifications, no inventory adjustment, no contact/invoice/receipt/subscription creation; only the OrderImported event fires). Beta, single-order only (no bulk endpoint), no SHOPIFY/WOOCOMMERCE channel enums (use OTHER_PLATFORM), analytics inclusion not suppressible. Rollback via Bulk Delete Imported Orders; re-send with the same id fully replaces."
58
+ "decision": "Import Order is the dedicated migration path: settable purchasedDate/number (createdDate is NOT settable -- see pitfalls), values stored as-is, no side effects (no buyer notifications, no inventory adjustment, no contact/invoice/receipt/subscription creation; only the OrderImported event fires). Beta, single-order only (no bulk endpoint), no SHOPIFY/WOOCOMMERCE channel enums (use OTHER_PLATFORM), analytics inclusion not suppressible. Rollback via Bulk Delete Imported Orders (VERIFIED LIVE 2026-09-05: async jobId, orders gone within seconds, a deleted id can be re-imported). Caller-supplied `id` VERIFIED LIVE 2026-09-05 (disposable site): a never-seen GUID is ACCEPTED and kept, so the order write can be made idempotent by deriving the id from the source -- `lib/order-history.js` does this; a re-send with an existing id fully REPLACES the body (omitted fields are cleared, createdDate kept, updatedDate moves, the number can change) while attached payments and extendedFields SURVIVE; a non-GUID id is a 400. See the silent-replace pitfall."
26
59
  },
27
60
  "alternateWrites": [
28
61
  {
@@ -32,9 +65,63 @@
32
65
  "verification": "unverified",
33
66
  "importSafe": false,
34
67
  "bulk": false,
35
- "when": "Live-commerce order creation only — NEVER for historical import: decrements inventory, sends buyer confirmation email, auto-creates a contact (ECOM-02)."
68
+ "when": "Live-commerce order creation only \u2014 NEVER for historical import: decrements inventory, sends buyer confirmation email, auto-creates a contact."
36
69
  }
37
70
  ],
71
+ "extendedFields": {
72
+ "schemaKind": "data-extension-schema",
73
+ "definitionSurface": "Data Extension Schema API",
74
+ "definitionOperation": "Create/Update Data Extension Schema (FQDN wix.ecom.*.order)",
75
+ "valuePath": "extendedFields.namespaces._user_fields",
76
+ "namespaceForCreatedFields": "_user_fields",
77
+ "dataExtensionSchemaBacked": true,
78
+ "keyConvention": "wpCheckout_<metaKey> for values sourced from a checkout-field-editor-style plugin \u2014 avoids collision with merchant-created or other-plugin _user_fields entries.",
79
+ "fieldTypeMapping": [
80
+ {
81
+ "csvType": "text",
82
+ "fieldType": "string",
83
+ "notes": "maxLength 255 default"
84
+ },
85
+ {
86
+ "csvType": "textarea",
87
+ "fieldType": "string",
88
+ "notes": "maxLength 2000 default"
89
+ },
90
+ {
91
+ "csvType": "select",
92
+ "fieldType": "string",
93
+ "notes": "options documented in description, not enforced \u2014 DES has no enum"
94
+ },
95
+ {
96
+ "csvType": "radio",
97
+ "fieldType": "string",
98
+ "notes": "same as select"
99
+ },
100
+ {
101
+ "csvType": "multiselect",
102
+ "fieldType": "array",
103
+ "notes": "items: string"
104
+ },
105
+ {
106
+ "csvType": "checkbox",
107
+ "fieldType": "boolean",
108
+ "notes": "single yes/no field"
109
+ },
110
+ {
111
+ "csvType": "date",
112
+ "fieldType": "string",
113
+ "notes": "format: date"
114
+ }
115
+ ],
116
+ "docs": [
117
+ "https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/orders/import-order",
118
+ "https://dev.wix.com/docs/api-reference/business-management/data-extension-schema/introduction"
119
+ ],
120
+ "fqdn": "wix.ecom.*.order",
121
+ "supportsFiltering": false,
122
+ "nestedSubrecordExtendedFields": "unknown \u2014 which order subrecords expose nested extendedFields is open and out of scope; never provision nested fields",
123
+ "liveVerification": "Schema create/update/re-read and value writes verified live 2026-09-04 (string fields only)."
124
+ },
38
125
  "safeModeContactFields": [
39
126
  {
40
127
  "kind": "email",
@@ -74,24 +161,302 @@
74
161
  }
75
162
  ],
76
163
  "fallbacks": [
77
- { "classification": "cms", "when": "Use for separate audit/history records or unsupported nested source details." }
164
+ {
165
+ "classification": "cms",
166
+ "when": "Use for separate audit/history records or unsupported nested source details."
167
+ }
78
168
  ],
79
- "reliability": { "status": "partially-reliable", "flags": [] },
169
+ "reliability": {
170
+ "status": "partially-reliable",
171
+ "flags": []
172
+ },
80
173
  "pitfalls": [
81
- { "code": "create-order-not-import-safe", "severity": "blocker", "summary": "Never route historical orders through createOrder — it decrements inventory, emails the buyer, and auto-creates contacts; importOrder is the only import-safe writer." },
82
- { "code": "contact-crosswalk-sequencing", "severity": "blocker", "summary": "Import creates no contact; contacts (including guest buyers from order billing emails) must be imported first so buyerInfo.contactId can be passed." },
83
- { "code": "beta-single-order", "severity": "warning", "summary": "Import Order is Beta and single-order only (no bulk endpoint); undocumented rate limits apply at scale." },
84
- { "code": "analytics-not-suppressible", "severity": "warning", "summary": "Imported orders appear in sales analytics/reports with no documented exclusion flag." },
85
- { "code": "imported-orders-invisible-to-events", "severity": "warning", "summary": "Only the OrderImported event fires and only eCom's own indexer consumes it — imported orders never materialize in contacts/loyalty/event-driven views." }
174
+ {
175
+ "code": "create-order-not-import-safe",
176
+ "severity": "blocker",
177
+ "summary": "Never route historical orders through createOrder \u2014 it decrements inventory, emails the buyer, and auto-creates contacts; importOrder is the only import-safe writer."
178
+ },
179
+ {
180
+ "code": "order-number-must-be-numeric",
181
+ "severity": "blocker",
182
+ "summary": "VERIFIED LIVE 2026-08-16: `order.number` must be a numeric string. A non-numeric value (e.g. the 'WT-1042' shape produced by WooCommerce sequential-order-number plugins) fails the entire Import Order call with a bare 400 {\"message\":\"Not a numeric value\"} carrying no field path \u2014 the error does not say which field, so it reads as a malformed payload. Strip prefixes to the numeric core and ledger the original as a fidelity note; do not pass the source order number through unvalidated."
183
+ },
184
+ {
185
+ "code": "merchant-note-author-is-token-holder",
186
+ "severity": "warning",
187
+ "summary": "VERIFIED LIVE 2026-08-16: Add Activities stamps `authorEmail` with the login email of whoever holds the token, not the source note's author, and the timestamp is call time (not backdatable). In a partner-run migration this writes the partner's address across the merchant's whole order history \u2014 prefix the source author/date into the message body when that provenance matters. See ecom/order-merchant-note."
188
+ },
189
+ {
190
+ "code": "contact-crosswalk-sequencing",
191
+ "severity": "blocker",
192
+ "summary": "Import creates no contact; contacts (including guest buyers from order billing emails) must be imported first so buyerInfo.contactId can be passed."
193
+ },
194
+ {
195
+ "code": "beta-single-order",
196
+ "severity": "warning",
197
+ "summary": "Import Order is Beta and single-order only (no bulk endpoint); undocumented rate limits apply at scale."
198
+ },
199
+ {
200
+ "code": "analytics-not-suppressible",
201
+ "severity": "warning",
202
+ "summary": "Imported orders appear in sales analytics/reports with no documented exclusion flag."
203
+ },
204
+ {
205
+ "code": "imported-orders-invisible-to-events",
206
+ "severity": "warning",
207
+ "summary": "Only the OrderImported event fires and only eCom's own indexer consumes it \u2014 imported orders never materialize in contacts/loyalty/event-driven views."
208
+ },
209
+ {
210
+ "code": "checkout-custom-field-values-need-definitions",
211
+ "severity": "warning",
212
+ "summary": "A checkout-field-editor-style plugin's custom field VALUES ride as unregistered order postmeta with no fixed key or envelope (see woo-checkout-field-editor-pro.json's values-have-no-fallback-envelope-key pitfall) \u2014 they cannot be identified, let alone written as extendedFields.namespaces._user_fields entries, until the field list (label/type/meta-key) is known. Without it, these values are not degraded, they are entirely unattempted."
213
+ },
214
+ "buyerInfo.memberId is what member-facing reads authorize on. A member-identity Get Order returns an order only if that member placed it, and the invoice download backend checks the same field again itself -- so an imported order carrying only buyerInfo.contactId is invisible to its own buyer, and one attributed to the WRONG member hands that member someone else's invoice. Both checks read the same stored value, so neither catches a bad crosswalk. Setting and validating buyerInfo.memberId is a prerequisite of any member-facing order feature, not something those features can verify.",
215
+ "VERIFIED LIVE 2026-09-05: `createdDate` sent to Import Order is IGNORED. The order reads back with createdDate = the moment of the import, while `purchasedDate` and the payment record's own createdDate both hold the real source dates. Earlier notes here claimed createdDate was settable; the live sentinel printed it but only ever asserted purchasedDate, so the claim was never actually tested. Do not report createdDate as preserved history, and do not use it to reconcile against a source date -- purchasedDate is the field that carries when the order happened.",
216
+ "LIVE-FOUND 2026-09-05: Import Order rejects an order with no `status` and no `billingInfo.contactDetails` -- 400 \"status value is required\" and \"contactDetails must not be empty\". A billing ADDRESS alone does not satisfy it. Neither field is obvious from the response shape, and the 400 names them only once you have already omitted them.",
217
+ {
218
+ "code": "existing-id-replaces-silently",
219
+ "severity": "blocker",
220
+ "summary": "VERIFIED LIVE 2026-09-05: Import Order with the `id` of an EXISTING imported order replaces its whole body with no conflict response -- nothing distinguishes \"replace my own earlier import\" from \"overwrite the merchant's edits since\", and an omitted field is cleared rather than kept. So never re-send an order that already exists: `lib/order-history.js` reads by derived id on a crosswalk miss and reconciles an existing order instead of importing. Payments and extendedFields do survive a replace, so an accidental one loses order-body edits, not payment history or preserved documents."
221
+ },
222
+ {
223
+ "code": "buyerinfo-memberid-stored-unvalidated",
224
+ "severity": "blocker",
225
+ "summary": "VERIFIED LIVE 2026-09-05 (fresh site): Import Order accepts `buyerInfo.memberId` with or without `contactId` and reads it back; it ALSO accepts a memberId that is not a member on the site and stores it as-is -- no validation, no error. Since member-facing reads and the invoice download authorize on this field, a wrong value hands one member another's order. The field is set only from `lib/order-buyer.js` resolveOrderBuyer -- member crosswalk row whose loginEmail equals the order's billing email -- stamped; the composite refuses a caller-set memberId on the body and requires the body's buyerInfo.email to be the email the member was corroborated against. That corroborated-email requirement applies to the SOURCE-DERIVED body, checked once before the first send; a contact-field retry may send the verified memberId without the email Import Order's rejection named, keeping memberId and contactId unchanged. A memberId alone reads back without a contactId (no derivation)."
226
+ },
227
+ {
228
+ "code": "malformed-contact-value-fails-the-whole-order",
229
+ "severity": "blocker",
230
+ "summary": "OBSERVED LIVE: a single email or phone Import Order refuses -- on billingInfo, shippingInfo or buyerInfo -- fails the ENTIRE order, not just that field. The source's validation is weaker than Wix's, so real historical orders carry values the source stored happily (see crm/contact's source-email-can-fail-the-target-validator for the observed email shape), and they surface on live orders rather than in testing. The rule is order-contact-field-refused-fails-whole-order above; this entry does not widen it. Remove only the email or phone field the rejection itself names and send the order once more; if that single retry is also refused, the order is `order-import-failed` -- reported as failed, its source record and rejection kept, and listed for a person to act on. Never remove, rewrite or invent a value on a local check alone (a local check only warns), and never add a second retry or a runner-side drop around the composite. Three consequences to plan and report for: (1) the removed value is not on the imported order and must not be assumed to exist on the linked contact -- it stays recoverable only from the run's on-disk source extraction, and no result, journal row, report or repo file carries the value itself; (2) an order imported without a field is a fidelity loss, not a clean import: it reads back complete, so only its order-contact-email-dropped / order-contact-phone-dropped finding separates it from a fully preserved order, and a reconciliation that compares counts or re-reads orders cannot see it; (3) Import Order still requires `billingInfo.contactDetails` to be non-empty, so removing the named field can leave the order invalid -- the retry is then refused and the order fails; do not remove further fields to get it through."
231
+ },
232
+ {
233
+ "code": "member-area-order-history-list-matches-by-contactid-not-memberid",
234
+ "severity": "info",
235
+ "summary": "LIVE-VERIFIED 2026-09-16: a customer promoted from a safe-mode contact to a real-email Member AFTER their orders were already imported with only `buyerInfo.contactId` (no `memberId` -- the promotion flow never resends Import Order) could immediately see their full order history in the site's Member Area, with no order-backfill write at all. This does NOT contradict `buyerinfo-memberid-stored-unvalidated` above: the Member Area's order-history list is reading by the order's `buyerInfo.contactId` matching the member's OWN contactId, which is guaranteed here because promotion reuses the pre-existing contact rather than creating a new one (see crm/contact's mappingGuidance and the ensureMember composite). This is a narrower claim than 'memberId is unnecessary' -- it confirms the customer-facing order-LIST view specifically, for exactly this contactId-preserving promotion order (contacts/orders imported first, member created afterward on the same contact). It does NOT retest member-scoped API reads (a member-identity Get Order call) or invoice-download authorization, which the still-standing blocker above says authorize on `memberId` specifically and were not re-verified against a contactId-only order in this pass. Do not generalize this to 'memberId can be skipped' for any workflow that authorizes programmatically rather than through the Member Area UI."
236
+ },
237
+ {
238
+ "code": "order-contact-field-refused-fails-whole-order",
239
+ "severity": "blocker",
240
+ "summary": "A source email or phone Import Order refuses fails the ENTIRE order, not just the field, so the financial record is lost to a descriptive detail. Resolution: remove only a contact field the rejection itself NAMES -- a 400 whose `details.validationError.fieldViolations[].field`, after an optional leading `order.`, exactly equals a `safeModeContactFields[]` path, with no other violation -- and send the order once more under the same derived id; a second refusal is `order-import-failed`. Never remove or rewrite a field on a local or customer-path check alone (the E.164 rule in members/member `phone-must-be-e164-and-dedupes-across-contacts` is verified for Contacts/Members, not Import Order), and never invent a stand-in value. On a member-linked order the retry keeps `buyerInfo.memberId`/`contactId`. `order-history.js` `importOrderHistory` does this and emits `order-contact-email-dropped`/`order-contact-phone-dropped` (field and reason, never the value); `checkOrderContactFields` only warns (`-suspect`). NOT VERIFIED LIVE for Import Order: no contact-field rejection body has been captured. The first live rejection must record its error shape (without the value)."
241
+ },
242
+ {
243
+ "code": "import-order-currency-default-not-applied",
244
+ "severity": "blocker",
245
+ "summary": "Verified on a disposable site: omitting currency from Import Order stored an empty currency despite the documented site default. The dashboard order page then failed with an invalid-currency rendering error. Always provide explicit source currency; the corrected reference canary separately verified shipping/tax fidelity."
246
+ }
86
247
  ],
87
248
  "mappingGuidance": [
88
249
  "Resolve product, variation, contact, and coupon crosswalks before writing orders.",
89
- "Contacts import first, orders second: Import Order accepts buyerInfo.contactId (schema-checked 2026-08-04) but creates no contact itself — always pass the crosswalked contact ID, including for guest buyers derived from order billing emails (see crm/contact). The field doc's 'automatically created if one doesn't exist' text is shared with live Create Order and is unverified for the import path — do not rely on it.",
90
- "Use order and line-item extended fields for source-only metadata when configured."
250
+ "Contacts import first, orders second: Import Order accepts buyerInfo.contactId (schema-checked 2026-08-04) but creates no contact itself \u2014 always pass the crosswalked contact ID, including for guest buyers derived from order billing emails (see crm/contact). The field doc's 'automatically created if one doesn't exist' text is shared with live Create Order and is unverified for the import path \u2014 do not rely on it.",
251
+ "Use order and line-item extended fields for source-only metadata when configured.",
252
+ "A per-order merchant note or comment from the source (e.g. a WooCommerce order note, or a payment-gateway plugin's note field) has no import-time field \u2014 `activities[]` is read-only on Create/Import Order (dev.wix.com verified 2026-08-11). Add it as a SEPARATE follow-up call after the order is imported: POST /ecom/v1/orders/{orderId}/activities/add with activityType MERCHANT_COMMENT and merchantComment.message (max 5000 chars). This stamps authorEmail and createdDate at migration time \u2014 the original note's author and timestamp cannot be preserved; prefix the message with the original date/author if that provenance matters.",
253
+ "Source order notes map to merchant comment activities (POST /ecom/v1/orders/{id}/activities) after the order import, preserving original author/date inside the message text \u2014 verified live 2026-08-12.",
254
+ "Always set channelInfo = { type: \"OTHER_PLATFORM\", externalOrderId: <source order id>, externalOrderUrl: <source order edit link, if constructible> }. This documented field makes the source identity visible on the Wix order as well as in the local crosswalk. lib/order-channel-build.js's buildChannelInfo() constructs it; the caller constructs or omits externalOrderUrl because legacy post-based order storage and WooCommerce HPOS use different admin URL shapes.",
255
+ "If the order bought a gift card, import that line item normally and use the gift-card crosswalk for later redemption linking. If the order redeemed a gift card as payment, do not reconstruct that from WooCommerce order data because the required source signal is absent from /wc/v3/orders. Record an explicit blocked capability until verified source gift-card activity data is available; lib/gift-card-redemption-build.js's buildGiftCardRedemption() builds the redemption call from that activity row.",
256
+ "ADDED 2026-08-17 \u2014 full sub-object review against the live Import Order request schema (dev.wix.com, fetched 2026-08-17), reconciled with the already-live-verified sibling entities (order-line-item, order-line-item-options, order-applied-discount, order-merchant-note, order-refund):",
257
+ "lineItems[].catalogReference is optional overall (a custom, non-catalog line has none) but catalogItemId+appId are required together when it is present, as verified by gift-card orders imported without catalogReference. appId picks the dependency: Wix Stores' fixed app id -> stores/product; the Wix Gift Cards app id (d80111c5-a0f4-47a8-b63a-65b54d774a27, see domains/gift-cards/domain.json) -> gift-cards/gift-card-product. Resolve the crosswalk for whichever catalog the line actually belongs to \u2014 never assume Stores.",
258
+ "Verified on a disposable site with explicit source currency: omit shippingInfo.carrierId and shippingInfo.code for historical order import while preserving the single source shipping line title, price and available logistics. Both isolated and combined omission preserved the shipping method and cost in Get Order and the dashboard. Included target references must still resolve through current, fully passed setup evidence; never use source or invented IDs.",
259
+ "Verified on a disposable site: omit lineItems[].taxInfo.taxGroupId while preserving explicit source tax amounts and the order-level breakdown. Isolated and combined omission preserved tax display. The order-level taxInfo.taxBreakdown entries have tax name/type/rate/aggregated amount, not a taxGroupId field. Required setup edges remain task-complete.",
260
+ "Reviewed and found to need NO crosswalk dependency (plain data, no other-entity reference): recipientInfo (final-recipient address/contact, distinct from shippingInfo.logistics.shippingDestination \u2014 both are just address+contact data), businessLocation.id (a Wix Locations id; no domain entity models Locations in this repo yet \u2014 treat as informational/omit if the source has no location concept), customFields/extendedFields (free-form key:value, extendedFields additionally requires the namespace to be pre-configured in the app dashboard \u2014 a setup step, not an entity crosswalk), lineItems[].subscriptionInfo (subscription cycle metadata carried as-is, no subscription-entity crosswalk found on the Import Order path), additionalFees (free-form fee records, no crosswalk), buyerNote/tags/weightUnit/currency/taxIncludedInPrices/attributionSource/buyerLanguage (scalar/enum fields, no dependency).",
261
+ "purchasedDate/number are settable on import and immutable after (order.number must additionally be numeric \u2014 see the order-number-must-be-numeric pitfall); createdDate/updatedDate/fulfillmentStatus/createdBy/currencyConversionDetails (once set) are read-only or import-then-immutable \u2014 do not attempt to set the ones docs mark read-only, and do not rely on an LLM-summarized docs read for this distinction without cross-checking wix-writers.js's own live-verified required-field comment on buildImportOrderRequest, which already caught fields a generic docs summary got wrong (e.g. incorrectly claiming catalogReference is unconditionally required).",
262
+ "Never resend an existing derived order ID to backfill shipping. Preserve existing-order adoption. Use the verified bundled omission mapping for the tested scope; a changed or unverified mapping remains blocked until a disposable-site canary proves source title/cost/tax and dashboard fidelity; API acceptance alone proves no meaning. Zero source shipping lines omit shippingInfo; one maps source title/cost; multiple defer with order-multiple-shipping-lines and a blocker gap. Setup-produced edges always require every bound step to pass. Use only gate-owned setup-reference resolutions for any required target IDs."
263
+ ],
264
+ "setupRequirements": [
265
+ "Order data extension schema if extended fields are used.",
266
+ "Side-effect verification before execution."
91
267
  ],
92
- "setupRequirements": ["Order data extension schema if extended fields are used.", "Side-effect verification before execution."],
93
268
  "evidence": [
94
- { "type": "repo-research", "path": "research/import-api-suitability/orders-contacts-members.md" },
95
- { "type": "repo-research", "path": "research/source-entity-import-suitability-wordpress-woocommerce-wix.md" }
96
- ]
269
+ {
270
+ "type": "wix-docs",
271
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/orders/order-object",
272
+ "note": "object page (docs-survey sweep 2026-08-11)"
273
+ },
274
+ {
275
+ "type": "wix-docs",
276
+ "url": "https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/orders/add-activities",
277
+ "note": "Add Activities with activityType MERCHANT_COMMENT is the verified post-import path for a source order note or comment."
278
+ },
279
+ {
280
+ "type": "live-run",
281
+ "path": "anonymized-live-verification",
282
+ "note": "Verified live: create + query-back readback, safe mode on \u2014 orders via the import-safe Import Order flow, read back; no notification/inventory side effects observed"
283
+ },
284
+ {
285
+ "type": "wix-docs",
286
+ "url": "https://dev.wix.com/docs/rest/business-solutions/e-commerce/orders/orders/import-order",
287
+ "note": "A full Import Order request-schema review cross-checked every field against live-verified sibling entities and wix-writers.js. Live gift-card order imports without catalogReference confirmed that the field is optional overall."
288
+ },
289
+ {
290
+ "type": "live-verification",
291
+ "path": "anonymized-live-verification",
292
+ "note": "Order <anonymized-id> imported via POST /ecom/v1/orders/import with lineItems carrying only quantity/itemType/productName/price \u2014 no catalogReference \u2014 and succeeded, confirming catalogReference is genuinely optional on this endpoint."
293
+ },
294
+ {
295
+ "type": "live-verification",
296
+ "path": "anonymized-live-verification",
297
+ "note": "Import Order id semantics, confirmed by probes on a disposable site: never-seen v4 and derived v5-style GUIDs accepted and returned unchanged; same-id re-send is a full replace (createdDate kept, updatedDate moved, omitted purchasedDate cleared, one order per number); payments and extendedFields survive the replace; extendedFields settable through Import Order; non-GUID id -> 400; Bulk Delete Imported Orders returns a jobId and a deleted id re-imports. One refuted: Search Orders by the OLD number still matched ~1s after a renumber (eventually consistent) -- search is not an existence check."
298
+ },
299
+ {
300
+ "type": "live-verification",
301
+ "path": "anonymized-live-verification",
302
+ "note": "Nine synthetic historical Import Order cases with explicit currency were each accepted, read back and inspected in the dashboard, after requiring the all-valid baseline to pass first. Shipping and line-item tax references were independently omitted, jointly omitted, individually invalidated, or partially omitted. Source shipping title/cost and explicit tax amounts/breakdown displayed faithfully in all nine. The selected combined omission is the tested joint-omission case. Invalid IDs were stored verbatim and confer no permission to invent references; setup dependencies remain task-complete."
303
+ }
304
+ ],
305
+ "intendedFields": [
306
+ {
307
+ "targetPath": "order.number",
308
+ "sourcePaths": [
309
+ "number"
310
+ ]
311
+ },
312
+ {
313
+ "targetPath": "order.lineItems[]",
314
+ "sourcePaths": [
315
+ "lineItems[]"
316
+ ]
317
+ },
318
+ {
319
+ "targetPath": "order.billingInfo",
320
+ "sourcePaths": [
321
+ "billingInfo"
322
+ ]
323
+ },
324
+ {
325
+ "targetPath": "order.shippingInfo",
326
+ "sourcePaths": [
327
+ "shippingInfo"
328
+ ]
329
+ }
330
+ ],
331
+ "readBackProjection": {
332
+ "identity": "derived-id-and-sent-number",
333
+ "serverOwned": [
334
+ {
335
+ "path": "order.createdDate",
336
+ "reason": "import ignores creation timestamp"
337
+ },
338
+ {
339
+ "path": "order.updatedDate",
340
+ "reason": "server timestamp"
341
+ },
342
+ {
343
+ "path": "order.activities",
344
+ "reason": "server history"
345
+ }
346
+ ],
347
+ "read": "GET /ecom/v1/orders/{id}",
348
+ "arrays": {
349
+ "lineItems": "id",
350
+ "appliedDiscounts": "content"
351
+ }
352
+ },
353
+ "dependencyModes": {
354
+ "crm/contact": "per-record",
355
+ "stores/product": "per-record",
356
+ "stores/coupon": "per-record",
357
+ "gift-cards/gift-card": "per-record"
358
+ },
359
+ "dependencyReferenceFields": {
360
+ "crm/contact": [
361
+ "buyerInfo.contactId"
362
+ ],
363
+ "stores/product": [
364
+ "lineItems[].catalogReference.catalogItemId"
365
+ ],
366
+ "stores/coupon": [
367
+ "appliedDiscounts[].coupon.id"
368
+ ],
369
+ "gift-cards/gift-card": [
370
+ "appliedDiscounts[].giftCard.id"
371
+ ],
372
+ "ecom/shipping-option": [
373
+ "shippingInfo.code"
374
+ ],
375
+ "ecom/delivery-profile": [
376
+ "shippingInfo.carrierId"
377
+ ],
378
+ "tax/tax-group": [
379
+ "lineItems[].taxInfo.taxGroupId"
380
+ ]
381
+ },
382
+ "importReferenceCanary": {
383
+ "verifiedAt": "2026-10-19",
384
+ "scope": "historical Import Order with a synthetic custom item, explicit currency, one shipping line and preserved explicit tax breakdown",
385
+ "taxGroupPath": "lineItems[].taxInfo.taxGroupId",
386
+ "selectedCell": 4,
387
+ "cells": [
388
+ {
389
+ "cell": 1,
390
+ "accepted": true,
391
+ "readBackVerified": true,
392
+ "dashboardVerified": true,
393
+ "shippingFidelity": true,
394
+ "taxFidelity": true
395
+ },
396
+ {
397
+ "cell": 2,
398
+ "accepted": true,
399
+ "readBackVerified": true,
400
+ "dashboardVerified": true,
401
+ "shippingFidelity": true,
402
+ "taxFidelity": true
403
+ },
404
+ {
405
+ "cell": 3,
406
+ "accepted": true,
407
+ "readBackVerified": true,
408
+ "dashboardVerified": true,
409
+ "shippingFidelity": true,
410
+ "taxFidelity": true
411
+ },
412
+ {
413
+ "cell": 4,
414
+ "accepted": true,
415
+ "readBackVerified": true,
416
+ "dashboardVerified": true,
417
+ "shippingFidelity": true,
418
+ "taxFidelity": true
419
+ },
420
+ {
421
+ "cell": 5,
422
+ "accepted": true,
423
+ "readBackVerified": true,
424
+ "dashboardVerified": true,
425
+ "shippingFidelity": true,
426
+ "taxFidelity": true
427
+ },
428
+ {
429
+ "cell": 6,
430
+ "accepted": true,
431
+ "readBackVerified": true,
432
+ "dashboardVerified": true,
433
+ "shippingFidelity": true,
434
+ "taxFidelity": true
435
+ },
436
+ {
437
+ "cell": 7,
438
+ "accepted": true,
439
+ "readBackVerified": true,
440
+ "dashboardVerified": true,
441
+ "shippingFidelity": true,
442
+ "taxFidelity": true
443
+ },
444
+ {
445
+ "cell": 8,
446
+ "accepted": true,
447
+ "readBackVerified": true,
448
+ "dashboardVerified": true,
449
+ "shippingFidelity": true,
450
+ "taxFidelity": true
451
+ },
452
+ {
453
+ "cell": 9,
454
+ "accepted": true,
455
+ "readBackVerified": true,
456
+ "dashboardVerified": true,
457
+ "shippingFidelity": true,
458
+ "taxFidelity": true
459
+ }
460
+ ]
461
+ }
97
462
  }
@@ -0,0 +1,122 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "ecom",
4
+ "entity": "pickup-location",
5
+ "displayName": "Wix Pickup Location",
6
+ "capability": "commerce.pickup-location",
7
+ "target": {
8
+ "classification": "native",
9
+ "nativeEntity": "PickupLocation",
10
+ "verifiedFqdn": "wix.ecom.v1.pickup_location",
11
+ "idPolicy": "server-assigned",
12
+ "crosswalkRequired": true
13
+ },
14
+ "dependsOn": [
15
+ "ecom/delivery-profile"
16
+ ],
17
+ "sourceAliases": [
18
+ {
19
+ "sourceSystem": "woocommerce",
20
+ "sourceEntity": "shipping-zone.method[local_pickup|pickup_location]",
21
+ "routes": [
22
+ "/wc/v3/shipping/zones/{id}/methods"
23
+ ],
24
+ "confidence": "high",
25
+ "note": "shipping-build.js's classifyMethod returns kind:'pickup' for these two method_ids. That classification produces a PickupLocation and NEVER a ShippingOption. It does NOT mean no carrier: the Pickup DeliveryCarrier must still be attached, with backupRate {amount '0', active FALSE}, or the collection point does not render at checkout at all -- see the attach-the-pickup-carrier blocker pitfall. What the classification is terminal about is the SHIPPING side: no ShippingOption, and no delivery carrier of any other role."
26
+ },
27
+ {
28
+ "sourceSystem": "woocommerce",
29
+ "sourceEntity": "settings.pickup_locations",
30
+ "routes": [
31
+ "/wp/v2/settings"
32
+ ],
33
+ "confidence": "high",
34
+ "note": "WooCommerce Blocks Local Pickup stores its locations as WordPress options surfaced on the core settings route -- NOT under /wc/v3/. This route is already part of the default discovery sweep, so a Blocks source's pickup addresses are already captured; they just had no consumer until now."
35
+ }
36
+ ],
37
+ "preferredWrite": {
38
+ "surface": "Pickup Locations",
39
+ "endpoint": "POST https://manage.wix.com/_api/pickup-locations/v1/pickup-locations (the public www.wixapis.com host 404s — see the host pitfall)",
40
+ "writerId": "createPickupLocation",
41
+ "verification": "verified-live",
42
+ "importSafe": true,
43
+ "bulk": true,
44
+ "releaseStatus": "beta",
45
+ "decision": "Collection points are their own entity on their own service host. Bulk create/update/delete exist (max 100 per call) but a migration rarely has more than a handful of collection points, so the single create is the default path."
46
+ },
47
+ "reliability": {
48
+ "status": "reliable",
49
+ "flags": []
50
+ },
51
+ "pitfalls": [
52
+ {
53
+ "code": "pickup-is-not-a-shipping-option",
54
+ "severity": "blocker",
55
+ "summary": "A source local_pickup method must NEVER be written as a ShippingOption. A ShippingOption has no app/carrier/role field, so a 0-amount collection option renders at checkout as a free DELIVERY sitting next to the real paid delivery -- buyers pick it expecting their order shipped for nothing. Observed live: collection rendered as a 0-priced shipping choice beside a paid one. The classification is terminal: kind:'pickup' produces a PickupLocation and no shipping option."
56
+ },
57
+ {
58
+ "code": "attach-the-pickup-carrier-but-never-with-an-active-backup-rate",
59
+ "severity": "blocker",
60
+ "summary": "Two facts that look contradictory and are not. (a) A Pickup carrier whose backupRate is ACTIVE renders as a 0-priced DELIVERY row beside the paid one -- live-observed, alongside a duplicate 0-priced shipping option for the same collection point. (b) But removing the Pickup carrier ENTIRELY made the collection point stop appearing at all, even though the PickupLocation still existed, was active, and was bound to the region -- observed live after exactly that removal. The correct shape is therefore: attach the Pickup carrier so the region can render collection, with backupRate {amount '0', active FALSE} so the carrier itself never becomes a delivery row -- and create the PickupLocation for the actual collection point. Never an active backupRate, never no carrier at all. resolvePickupAppId is how the Pickup app's installation-scoped appId is resolved; it IS a write path after all, just a carefully constrained one."
61
+ },
62
+ {
63
+ "code": "address-is-required-and-only-one-source-shape-has-one",
64
+ "severity": "blocker",
65
+ "summary": "`address` (with at least `country`) is required by the create call, and whether the source has one depends entirely on WHICH pickup implementation it uses. BLOCKS Local Pickup (`pickup_location` method) keeps real locations WITH addresses in WordPress options, exposed on GET /wp/v2/settings as `pickup_locations[]` = {name, address:{address_1, city, state, postcode, country}, details, enabled} plus `pickup_location_settings` = {enabled, title, tax_status, cost}. LEGACY `local_pickup` (a shipping-zone method) carries only {title, tax_status, cost} -- no address, no linked record, nothing to read; its town is often named inside the method's own TITLE text, which is a label and must never be parsed as an address. So check the Blocks locations FIRST (shipping-build.js's resolvePickupAddressSource): a Blocks source needs no human input at all, while a legacy source can only be answered by the merchant. buildPickupLocationInput throws without an address either way, because the server-side failure carries far less context than the local one."
66
+ },
67
+ {
68
+ "code": "blocks-global-settings-gate-the-locations-and-carry-the-fee",
69
+ "severity": "blocker",
70
+ "summary": "BLOCKS Local Pickup splits its configuration in two, and the GLOBAL half owns things no individual location carries: `pickup_location_settings` = {enabled, title, tax_status, cost}. (1) `enabled` is the MASTER SWITCH. Every location can be individually `enabled: true` while pickup as a whole is off, so reading only the per-location flag re-enables a fulfillment method the merchant deliberately turned off, and Wix checkout starts offering collection. Both gates must pass: a location is active only when the global switch is not explicitly off AND the location itself is not `enabled: false`. WooCommerce writes this as the strings yes/no on some routes and as a real boolean on others, and ABSENT means \"not configured\", which for a feature switch reads as ON -- only an explicit no/false/0/off turns it off. (2) `cost` is the collection FEE, set ONCE for all locations. Blocks pickup has no per-zone cost field, so the zone method's own `settings.cost` -- which is where the LEGACY local_pickup method correctly keeps its fee -- is absent for this shape and the classification reads 0. Read the fee from the global settings and pass it to buildPickupLocationInput's `amount`, or every pickup order silently charges nothing. shipping-build.js's pickupLocationsFromWpSettings returns both the resolved `active` and the `amount` per location, so a caller never has to know which half of the config they came from."
71
+ },
72
+ {
73
+ "code": "shipping-rule-id-is-deprecated-and-internal",
74
+ "severity": "warning",
75
+ "summary": "`shippingRuleId` is deprecated, marked internal, and replaced by `deliveryRegionIds`, with a removal target already in the past. Wix's own dashboard front-end still sends it; that is not a reason for a migration to. Send `deliveryRegionIds` only."
76
+ },
77
+ {
78
+ "code": "delivery-regions-are-not-updatable-through-update",
79
+ "severity": "warning",
80
+ "summary": "The Update call cannot change region membership -- the service says so explicitly. Use the dedicated Add Delivery Region / Remove Delivery Region calls on the pickup location (each takes pickupLocationId + deliveryRegionId + revision). Note the name collision with the Delivery Profiles API's own addDeliveryRegion, which adds a REGION TO A PROFILE; this one adds a PICKUP LOCATION TO A REGION."
81
+ },
82
+ {
83
+ "code": "create-failed-precondition-limits",
84
+ "severity": "warning",
85
+ "summary": "Create can fail FAILED_PRECONDITION with LOCATIONS_IN_SHIPPING_RULE_LIMIT_EXCEEDED or LIMIT_OF_OPTIONS_PER_DELIVERY_REGION_EXCEEDED. Caps: deliveryRegionIds max 50 per location, rates max 50, name 1-100 chars, deliveryTime max 500, instructions max 1000."
86
+ },
87
+ {
88
+ "code": "documented-public-host-404s-use-the-dashboard-proxy",
89
+ "severity": "blocker",
90
+ "summary": "LIVE-VERIFIED 2026-09-01, and NOT what the service's own documentation says. Its documentation.yaml declares `host: www.wixapis.com/pickup-locations`, but EVERY path under that host returns 404 with a valid site token -- both the hyphenated and camelCase spellings, and the /ecom/ prefix too. The service is BETA and is not exposed on the public gateway yet. The route that works is the dashboard proxy, `https://manage.wix.com/_api/pickup-locations/v1/pickup-locations`, which accepts the same CLI-minted site token. wix-writers.js's resolvePickupLocationsBase probes the public host first and falls back to the proxy on 404 (rethrowing anything else, so a 401/403 is never hidden behind a fallback), so this starts using the public host by itself once Wix exposes it. Permission scopes are unchanged: ECOM.PICKUP_LOCATION_CREATE / _READ / _UPDATE / _DELETE."
91
+ },
92
+ {
93
+ "code": "a-blank-address-is-a-real-choice-but-cannot-mean-absent",
94
+ "severity": "warning",
95
+ "summary": "Plenty of merchants coordinate collection by phone and deliberately do not publish a street -- the source method's own title usually says exactly that. That is a legitimate configuration, NOT missing data, and must not be treated as a failure to migrate. But `address` is required by the create call, so 'blank' cannot mean omitted. The honest minimum is the one part actually known: the country, DERIVED from the delivery region the location is bound to (shipping-build.js's buildMinimalPickupAddress), with no street, city or postcode invented to fill the gap. The location's `name` is then what tells buyers where and how to collect. Two guards: a region spanning more than one country has no single answer and throws rather than picking one; and a country-plus-city collection point (no street) was CREATED AND READ BACK LIVE 2026-09-01, address {country, city} preserved exactly as sent. How it renders at checkout is still worth one look."
96
+ }
97
+ ],
98
+ "mappingGuidance": [
99
+ "Two source shapes, checked in this order. (1) BLOCKS: `pickup_locations[]` on /wp/v2/settings already holds real locations -- map name -> name, address.address_1 -> addressLine (whole line, unparsed), address.city -> city, address.state -> subdivision, address.postcode -> postalCode, address.country -> country, details -> instructions, enabled -> active. Note `state` is a SEPARATE field here, unlike the store address's COUNTRY:STATE packing. (2) LEGACY `local_pickup` zone method: one PickupLocation per method, bound to the delivery region built from that method's zone via deliveryRegionIds[]; the method's title becomes `name` and its cost the single rate (a non-numeric cost falls back to 0 and is flagged).",
100
+ "`address` cannot be derived from a LEGACY method -- resolve it from the store address as a proposal the merchant confirms, or ask. `deliveryTime` has no WooCommerce counterpart in either shape; leave it unset rather than inventing a value. `instructions` maps from a Blocks location's `details`, and has no legacy counterpart.",
101
+ "Never also create a ShippingOption for the same method -- that re-creates the 0-priced-delivery defect this entity exists to avoid. The Pickup DeliveryCarrier is the opposite case and must NOT be omitted: attach it with backupRate {amount '0', active FALSE}. An ACTIVE backup rate re-creates the same 0-priced-delivery row, and no carrier at all makes the collection point vanish from checkout even though the PickupLocation exists and is bound to the region -- both were observed live. See the two blocker pitfalls above.",
102
+ "A zone whose only enabled method is pickup is NOT a checkout dead end -- collection is a real way to receive an order -- so it does not get delivery-profile.json's missing-rates alert even though it offers no DELIVERY rate. It still carries the Pickup carrier; that carrier's backup rate is inactive by design, so the zone has a carrier and no deliverable rate at the same time, which is the correct shape here rather than the gap the alert looks for.",
103
+ "A merchant who declines to publish a street address gets a country-only address derived from the delivery region, and the full source method title as `name`. Reach that branch only through an explicit decline (resolvePickupAddressSource's `addressDeclined`) -- never as a silent fallback when an address could not be found, because those two states need different follow-ups."
104
+ ],
105
+ "setupRequirements": [
106
+ "Wix Stores app (eCommerce checkout) — the site's default delivery profile must exist so a delivery region id is available to bind to."
107
+ ],
108
+ "objectPageException": "The public API-reference tree for shipping and delivery exposes Delivery Profiles only; there is no PickupLocations subsection and no '…-object' page for this entity anywhere in it. The field shape, limits, deprecations, error codes, host and permission names are taken from Wix's own service contract for the resource instead.",
109
+ "evidence": [
110
+ {
111
+ "type": "service-definition",
112
+ "path": "wix-internal-service-definition",
113
+ "note": "Wix's own PickupLocations service contract and its shipped create/query examples: entity fields and limits, the required-on-create set, the shippingRuleId deprecation and its replacement, the Add/Remove Delivery Region calls, the FAILED_PRECONDITION application codes, the public REST host, and the permission names. Read directly from the service definition rather than from a documentation page."
114
+ },
115
+ {
116
+ "type": "service-definition",
117
+ "path": "wix-internal-service-definition",
118
+ "note": "PickupLocation.rates is the same ConditionalRates type as ShippingOption.rates, so the conditional-rate shape documented on ecom/shipping-option applies here unchanged."
119
+ }
120
+ ],
121
+ "notes": "Authored to close the pickup half of the shipping phase-2 work: phase 1 wrote collection points as shipping options, which is what put a 0-priced delivery next to a paid one. Create and read-back VERIFIED LIVE 2026-09-01, through the dashboard proxy host (the documented public host 404s -- see its pitfall). A country+city address with no street round-tripped exactly. What is still unverified is purely cosmetic: how a street-less collection point renders at checkout."
122
+ }