@wix/agent-skills 1.33.0 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (635) hide show
  1. package/README.md +23 -0
  2. package/package.json +2 -2
  3. package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
  4. package/skills/wix-export/SKILL.md +83 -0
  5. package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
  6. package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
  7. package/skills/wix-harmony-editor/SKILL.md +317 -0
  8. package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
  9. package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
  10. package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
  11. package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
  12. package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
  13. package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
  14. package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
  15. package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
  16. package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
  17. package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
  18. package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
  19. package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
  20. package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
  21. package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
  22. package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
  23. package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
  24. package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
  25. package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
  26. package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
  27. package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
  28. package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
  29. package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
  30. package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
  31. package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
  32. package/skills/wix-headless/SKILL.md +7 -2
  33. package/skills/wix-headless/references/CAPABILITIES.md +6 -1
  34. package/skills/wix-headless/references/DISCOVERY.md +2 -1
  35. package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
  36. package/skills/wix-headless/references/SEED.md +3 -2
  37. package/skills/wix-headless/references/SETUP.md +1 -0
  38. package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
  39. package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
  40. package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
  41. package/skills/wix-headless/references/managed/CREATE.md +1 -1
  42. package/skills/wix-headless-kit/SKILL.md +110 -21
  43. package/skills/wix-headless-kit/guides/api-run.md +15 -13
  44. package/skills/wix-headless-kit/guides/existing-site.md +31 -0
  45. package/skills/wix-headless-kit/guides/migration.md +49 -17
  46. package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
  47. package/skills/wix-headless-kit/install/context.mjs +61 -6
  48. package/skills/wix-headless-kit/install/pins.json +1 -1
  49. package/skills/wix-headless-kit/install/setup.mjs +107 -12
  50. package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
  51. package/skills/wix-headless-replatform/SKILL.md +116 -0
  52. package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
  53. package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
  54. package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
  55. package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
  56. package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
  57. package/skills/wix-headless-replatform/references/output-contract.md +93 -0
  58. package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
  59. package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
  60. package/skills/wix-headless-replatform/references/safety.md +19 -0
  61. package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
  62. package/skills/wix-headless-replatform/references/workflow.md +157 -0
  63. package/skills/wix-headless-replatform/registry/README.md +20 -0
  64. package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
  65. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
  66. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
  67. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
  68. package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
  69. package/skills/wix-headless-replatform/registry/registry.json +36 -0
  70. package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
  71. package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
  72. package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
  73. package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
  74. package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
  75. package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
  76. package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
  77. package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
  78. package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
  79. package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
  80. package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
  81. package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
  82. package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
  83. package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
  84. package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
  85. package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
  86. package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
  87. package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
  88. package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
  89. package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
  90. package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
  91. package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
  92. package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
  93. package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
  94. package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
  95. package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
  96. package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
  97. package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
  98. package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
  99. package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
  100. package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
  101. package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
  102. package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
  103. package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
  104. package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
  105. package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
  106. package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
  107. package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
  108. package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
  109. package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
  110. package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
  111. package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
  112. package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
  113. package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
  114. package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
  115. package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
  116. package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
  117. package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
  118. package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
  119. package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
  120. package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
  121. package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
  122. package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
  123. package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
  124. package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
  125. package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
  126. package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
  127. package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
  128. package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
  129. package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
  130. package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
  131. package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
  132. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
  133. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
  134. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
  135. package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
  136. package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
  137. package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
  138. package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
  139. package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
  140. package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
  141. package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
  142. package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
  143. package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
  144. package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
  145. package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
  146. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
  147. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
  148. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
  149. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
  150. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
  151. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
  152. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
  153. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
  154. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
  155. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
  156. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
  157. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
  158. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
  159. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
  160. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
  161. package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
  162. package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
  163. package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
  164. package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
  165. package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
  166. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
  167. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
  168. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
  169. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
  170. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
  171. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
  172. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
  173. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
  174. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
  175. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
  176. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
  177. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
  178. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
  179. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
  180. package/skills/wix-import/SKILL.md +90 -0
  181. package/skills/wix-manage/SKILL.md +38 -10
  182. package/skills/wix-manage/references/automations/actions.md +11 -11
  183. package/skills/wix-manage/references/automations/activation-status.md +6 -9
  184. package/skills/wix-manage/references/automations/api-catalog.md +48 -32
  185. package/skills/wix-manage/references/automations/automation-model.md +97 -22
  186. package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
  187. package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
  188. package/skills/wix-manage/references/automations/conditions.md +187 -0
  189. package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
  190. package/skills/wix-manage/references/automations/special-actions.md +210 -0
  191. package/skills/wix-manage/references/automations/triggers.md +47 -10
  192. package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
  193. package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
  194. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
  195. package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
  196. package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
  197. package/skills/wix-manage/references/events/create-wix-event.md +136 -73
  198. package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
  199. package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
  200. package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
  201. package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
  202. package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
  203. package/skills/wix-manage/references/sites/upload-static-site.md +127 -8
  204. package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
  205. package/skills/wix-replatform/.publish-manifest.json +5 -5
  206. package/skills/wix-replatform/CLI.md +162 -0
  207. package/skills/wix-replatform/README.md +52 -0
  208. package/skills/wix-replatform/SKILL.md +229 -684
  209. package/skills/wix-replatform/console/account.css +1 -0
  210. package/skills/wix-replatform/console/app.css +1 -0
  211. package/skills/wix-replatform/console/app.js +117 -0
  212. package/skills/wix-replatform/console/index.html +4 -0
  213. package/skills/wix-replatform/console/json.css +11 -0
  214. package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
  215. package/skills/wix-replatform/lib/app-page-routing.js +75 -0
  216. package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
  217. package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
  218. package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
  219. package/skills/wix-replatform/lib/completion-report.js +1393 -13
  220. package/skills/wix-replatform/lib/config-env.js +85 -11
  221. package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
  222. package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
  223. package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
  224. package/skills/wix-replatform/lib/destination-choice.js +163 -0
  225. package/skills/wix-replatform/lib/destination-handoff.js +62 -0
  226. package/skills/wix-replatform/lib/destination-http.js +81 -0
  227. package/skills/wix-replatform/lib/destination-route.js +98 -0
  228. package/skills/wix-replatform/lib/destination.js +919 -0
  229. package/skills/wix-replatform/lib/discovered-census.js +231 -0
  230. package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
  231. package/skills/wix-replatform/lib/document-url-guard.js +203 -0
  232. package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
  233. package/skills/wix-replatform/lib/entity-verification.js +18 -0
  234. package/skills/wix-replatform/lib/execution-capability.js +120 -0
  235. package/skills/wix-replatform/lib/execution-log.js +170 -0
  236. package/skills/wix-replatform/lib/execution-manifest.js +20 -2
  237. package/skills/wix-replatform/lib/execution-state.js +22 -0
  238. package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
  239. package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
  240. package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
  241. package/skills/wix-replatform/lib/import-recovery.js +800 -6
  242. package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
  243. package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
  244. package/skills/wix-replatform/lib/link-audit.js +173 -0
  245. package/skills/wix-replatform/lib/link-census.js +194 -0
  246. package/skills/wix-replatform/lib/link-plan.js +148 -0
  247. package/skills/wix-replatform/lib/link-verification.js +274 -0
  248. package/skills/wix-replatform/lib/link-write-journal.js +42 -0
  249. package/skills/wix-replatform/lib/local-state.js +869 -30
  250. package/skills/wix-replatform/lib/member-completion.js +658 -0
  251. package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
  252. package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
  253. package/skills/wix-replatform/lib/migration-completion.js +311 -0
  254. package/skills/wix-replatform/lib/operator-identity.js +47 -0
  255. package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
  256. package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
  257. package/skills/wix-replatform/lib/orchestration-router.js +608 -32
  258. package/skills/wix-replatform/lib/orchestration-state.js +188 -12
  259. package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
  260. package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
  261. package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
  262. package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
  263. package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
  264. package/skills/wix-replatform/lib/progress-log.js +19 -3
  265. package/skills/wix-replatform/lib/read-back-approval.js +184 -0
  266. package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
  267. package/skills/wix-replatform/lib/read-back-contract.js +243 -0
  268. package/skills/wix-replatform/lib/read-back-extract.js +118 -0
  269. package/skills/wix-replatform/lib/read-back-gate.js +734 -0
  270. package/skills/wix-replatform/lib/read-back-reads.js +94 -0
  271. package/skills/wix-replatform/lib/read-back-state.js +107 -0
  272. package/skills/wix-replatform/lib/read-back-summary.js +81 -0
  273. package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
  274. package/skills/wix-replatform/lib/run-controller.js +401 -0
  275. package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
  276. package/skills/wix-replatform/lib/setup-verification.js +148 -0
  277. package/skills/wix-replatform/lib/source-access.js +231 -0
  278. package/skills/wix-replatform/lib/source-coverage.js +1130 -0
  279. package/skills/wix-replatform/lib/source-secrets.js +277 -0
  280. package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
  281. package/skills/wix-replatform/lib/task-state.js +110 -0
  282. package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
  283. package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
  284. package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
  285. package/skills/wix-replatform/lib/url-verification.js +315 -0
  286. package/skills/wix-replatform/lib/user-action-effects.js +42 -0
  287. package/skills/wix-replatform/lib/user-actions.js +264 -0
  288. package/skills/wix-replatform/lib/website-handoff.js +1220 -0
  289. package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
  290. package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
  291. package/skills/wix-replatform/lib/write-verification-state.js +92 -0
  292. package/skills/wix-replatform/lib/write-verification.js +274 -0
  293. package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
  294. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
  295. package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
  296. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
  297. package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
  298. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
  299. package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
  300. package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
  301. package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
  302. package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
  303. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
  304. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
  305. package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
  306. package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
  307. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
  308. package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
  309. package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
  310. package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
  311. package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
  312. package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
  313. package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
  314. package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
  315. package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
  316. package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
  317. package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
  318. package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
  319. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
  320. package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
  321. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
  322. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  323. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
  324. package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
  325. package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
  326. package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
  327. package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
  328. package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
  329. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
  330. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
  331. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
  332. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
  333. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
  334. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
  335. package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
  336. package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
  337. package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
  338. package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
  339. package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
  340. package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
  341. package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
  342. package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
  343. package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
  344. package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
  345. package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
  346. package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
  347. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
  348. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
  349. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
  350. package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
  351. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
  352. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
  353. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
  354. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
  355. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
  356. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
  357. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
  358. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
  359. package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
  360. package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
  361. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
  362. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
  363. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
  364. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
  365. package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
  366. package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
  367. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
  368. package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
  369. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
  370. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
  371. package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
  372. package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
  373. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
  374. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
  375. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
  376. package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
  377. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
  378. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
  379. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
  380. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
  381. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
  382. package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
  383. package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
  384. package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
  385. package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
  386. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
  387. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
  388. package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
  389. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
  390. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
  391. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
  392. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
  393. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
  394. package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
  395. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
  396. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
  397. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
  398. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
  399. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
  400. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
  401. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
  402. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
  403. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
  404. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
  405. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
  406. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
  407. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
  408. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
  409. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
  410. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
  411. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
  412. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
  413. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
  414. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
  415. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
  416. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
  417. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
  418. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
  419. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
  420. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
  421. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
  422. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
  423. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
  424. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
  425. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
  426. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
  427. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
  428. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
  429. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
  430. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
  431. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
  432. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
  433. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
  434. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
  435. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
  436. package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
  437. package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
  438. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
  439. package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
  440. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
  441. package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
  442. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
  443. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
  444. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
  445. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
  446. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
  447. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
  448. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
  449. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
  450. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
  451. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
  452. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
  453. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
  454. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
  455. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
  456. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
  457. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
  458. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
  459. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
  460. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
  461. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
  462. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
  463. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
  464. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
  465. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
  466. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
  467. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
  468. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
  469. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
  470. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
  471. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
  472. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
  473. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
  474. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
  475. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
  476. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
  477. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
  478. package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
  479. package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
  480. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
  481. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
  482. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
  483. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
  484. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
  485. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
  486. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
  487. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
  488. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
  489. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
  490. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
  491. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
  492. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
  493. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
  494. package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
  495. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
  496. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
  497. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
  498. package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
  499. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
  500. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
  501. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
  502. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
  503. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
  504. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
  505. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
  506. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
  507. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
  508. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
  509. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
  510. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
  511. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
  512. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
  513. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
  514. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
  515. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
  516. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
  517. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
  518. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
  519. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
  520. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
  521. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
  522. package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
  523. package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
  524. package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
  525. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
  526. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
  527. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
  528. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
  529. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
  530. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
  531. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
  532. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
  533. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
  534. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
  535. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
  536. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
  537. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
  538. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
  539. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
  540. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
  541. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
  542. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
  543. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
  544. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
  545. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
  546. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
  547. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
  548. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
  549. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
  550. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
  551. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
  552. package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
  553. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
  554. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
  555. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
  556. package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
  557. package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
  558. package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
  559. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
  560. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
  561. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
  562. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
  563. package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
  564. package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
  565. package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
  566. package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
  567. package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
  568. package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
  569. package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
  570. package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
  571. package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
  572. package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
  573. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
  574. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
  575. package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
  576. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
  577. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
  578. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
  579. package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
  580. package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
  581. package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
  582. package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
  583. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
  584. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
  585. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
  586. package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
  587. package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
  588. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
  589. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
  590. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
  591. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
  592. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
  593. package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
  594. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
  595. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
  596. package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
  597. package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
  598. package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
  599. package/skills/wix-replatform/scripts/discovered-census.js +26 -0
  600. package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
  601. package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
  602. package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
  603. package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
  604. package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
  605. package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
  606. package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
  607. package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
  608. package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
  609. package/skills/wix-replatform/scripts/migration-completion.js +76 -0
  610. package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
  611. package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
  612. package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
  613. package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
  614. package/skills/wix-replatform/scripts/replatform-console.js +146 -0
  615. package/skills/wix-replatform/scripts/replatform.js +436 -0
  616. package/skills/wix-replatform/scripts/source-secrets.js +77 -0
  617. package/skills/wix-replatform/scripts/url-redirects.js +286 -0
  618. package/skills/wix-replatform/scripts/user-action.js +58 -0
  619. package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
  620. package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
  621. package/skills/wix-replatform/scripts/wix-destination.js +143 -0
  622. package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
  623. package/skills/wix-vibe-headless/SKILL.md +7 -3
  624. package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
  625. package/skills/wix-vibe-headless/platforms/base44.md +1 -0
  626. package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
  627. package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
  628. package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
  629. package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
  630. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
  631. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
  632. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
  633. package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
  634. package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
  635. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: rp-source-inputs
3
+ description: Collects and validates source URLs, exports, acquisition modes, and credentials without exposing secrets.
4
+ ---
5
+
6
+ # rp-source-inputs
7
+
8
+ Use only when the active source input/configuration is missing or invalid.
9
+
10
+ For URL sources, infer platform from the URL/probe before asking the user; ask for a
11
+ platform only when detection is inconclusive. For platforms with public and authenticated
12
+ paths, resolve the acquisition mode before requesting credentials.
13
+
14
+ Record the acquisition mode as the decision key `sourceMode`, and no other key name, with
15
+ one of `private_data` (authenticated capture), `public_content` (public pages only) or
16
+ `files_only` (supplied files). `decide` rejects any other value. If the router stops with
17
+ `invalid_source_mode`, record one of these values through `decide` to replace the bad entry.
18
+ If preflight blocks `source_auth_intent`, the run is public but credentials or an
19
+ authenticated choice were recorded: confirm with the user, then record
20
+ `sourceMode=private_data` or remove the listed signals.
21
+
22
+ When `managementImportMode=quick`, persist the probe's canonical platform id in
23
+ `sourcePlatform` and route to the matching `rp-quick-<platform>` adapter. Quick mode uses only
24
+ the adapter's declared public endpoints and must not request source credentials. An
25
+ inconclusive probe or unsupported adapter is a durable `quick_mode_unsupported` result; offer
26
+ standard mode rather than silently switching behavior.
27
+
28
+ For file sources, record every supplied path as `fileInputPaths`, use `sourceMode=files_only`,
29
+ and load `rp-source-csv`. Do not ask URL acquisition or credential questions for this path.
30
+
31
+ Treat source and Wix env files as secret-bearing once they may contain credentials. Never
32
+ print their contents. Use `scripts/source-secrets.js` for present/blank/missing checks and
33
+ Wix Secrets Manager hydration; request only unresolved secret keys through the secure flow.
34
+ Its result always includes `postHydrationReport` (`{ exists, keys }`, each key
35
+ present/blank/placeholder/missing in the local env file); read that field to confirm a
36
+ hydration succeeded instead of inspecting the file. Vault outcomes stay in per-key `status`.
37
+ Blank required values are a typed needs-user blocker; optional adapter keys may remain blank.
38
+
39
+ **Credentials already on another site.** If the user or a prior run says this source's
40
+ credentials were already captured for another (sibling) destination site, handle it as a
41
+ first-time collection for this destination under the rules above, unchanged. Secrets are
42
+ stored per destination site and there is no cross-site lookup or copy, so do not write an
43
+ ad hoc script to read or copy another site's secrets or env files. Run
44
+ `scripts/source-secrets.js` for this destination and request only the keys it reports
45
+ unresolved.
46
+
47
+ For WordPress/WooCommerce, keep REST scope and bridge access separate. Private `wp/v2` or
48
+ `wc/v3` capture requires `WP_USERNAME`/`WP_APPLICATION_PASSWORD`; a
49
+ `WMH2_MIGRATION_KEY` authenticates only `wix-wp-plugin-v2` bridge reads and never satisfies
50
+ that private REST requirement. When bridge-backed entities are in scope, choose its
51
+ credential from the detected source capabilities as described by `rp-source-wordpress`.
52
+
53
+ For Shopify private data (`sourceMode=private_data`, the "Admin API" answer), the only input is
54
+ `SHOPIFY_SHOP_DOMAIN=<shop>.myshopify.com` in `config/source.shopify.env` (not a secret; no
55
+ token or password is ever requested). Access is the import operator's Shopify CLI session,
56
+ approved in the browser from a dedicated migration staff account and proven by
57
+ `rp-source-shopify` `scripts/shopify-session-check.js`; a `sourceCredentialRef` never
58
+ satisfies preflight. The operator's Node.js must be 22.12 or later for this run.
59
+ `SHOPIFY_STORE_URL` stays the public storefront key.
60
+
61
+ ## Output
62
+
63
+ `orchestration/decisions.json` entries for `sourcePlatform`, `sourceMode`, and either
64
+ `fileInputPaths` (file sources) or the resolved credential status (URL sources), plus the
65
+ populated source/Wix env file(s) with no secret values printed. This is what a dispatched
66
+ run must produce.
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: rp-source-sfcc
3
+ description: >-
4
+ Salesforce Commerce Cloud (SFCC / Demandware, SFRA storefront) source techniques: how to
5
+ get a store's public data with no Business Manager or OCAPI access — the files and public
6
+ storefront endpoints to read, and how to scan the remaining site pages. Use when the
7
+ source platform is SFCC.
8
+ ---
9
+
10
+ # rp-source-sfcc
11
+
12
+ Technique guide for reading a **public** SFCC/SFRA storefront. It ships no capture code:
13
+ `rp-discovery` follows its "no adapter exists → capture manually, same output contract"
14
+ path, and you write the capture code for each migration as generated project code under
15
+ `migrations/<project>/src/`, with its outputs in `migrations/<project>/data/sfcc-discovery/`.
16
+ ⚠️ Nothing site-specific (code, ids, values, fixtures) is ever added to this skill.
17
+
18
+ ## Recognize the platform
19
+
20
+ - Pipeline URLs: `/on/demandware.store/Sites-<site>-Site/<locale>/<Controller>`. The
21
+ homepage `og:url` often uses one, which gives you the site id and the default locale.
22
+ - Static assets: `/on/demandware.static/...`. Image renditions:
23
+ `/dw/image/v2/<REALM>_<ENV>/...`.
24
+ - OCAPI (`/s/<site>/dw/shop/...`, `/s/-/dw/data/...`) answers `401` without credentials.
25
+ Don't ask for Business Manager or OCAPI credentials in this flow; record them as a later
26
+ phase. Use `sourceMode=public_content`.
27
+
28
+ ## Files to read first
29
+
30
+ 1. **`robots.txt`.** Obey it for every request, and take the sitemap index from it.
31
+ 2. **Sitemaps** (index → `sitemap_N.xml`). These list products, categories and
32
+ `<image:loc>` originals. ⚠️ **Sitemaps are incomplete.** Pre-order products and variant
33
+ SKUs are commonly missing, some listed products aren't searchable, and some `*.html`
34
+ entries are content assets or malformed. Never treat the sitemap as the catalog.
35
+ 3. **The homepage, plus a few category and product pages.** Read the header, navigation,
36
+ footer and `hreflang` links. The homepage may have no `hreflang`, so learn the locale
37
+ routes from inner pages before you crawl.
38
+
39
+ ## Public storefront endpoints (SFRA)
40
+
41
+ | Need | Endpoint / source | Notes |
42
+ |---|---|---|
43
+ | Category id | Category page markup (`cgid`) | Links carry it percent-encoded: decode it once, then encode it once when you build a request |
44
+ | Category members | `Search-ShowAjax?cgid=<id>&start=<n>&sz=<page>` | Page until `resultCount` is reached. Tiles are `div.product[data-pid]` with the PDP link. A zero-result listing is not a category |
45
+ | Full product model | `Product-Variation?pid=<id>&quantity=1` → JSON `{product}` | The main source: sales and list price, `variationAttributes` with every value, `options`, `availability`, min/max order quantity, descriptions, images with alt text, promotions, plus the store's own custom fields. It is a storefront controller, not a contracted API |
46
+ | Variant siblings | `Product-Variation?pid=<master>&dwvar_<master>_<attr>=<value>` | The master id appears in the value `url`s. A master alone returns `404`. Accept a value only when the response marks **that** value `selected`; `selectable: false` values may not be fetchable |
47
+ | Fallback | PDP `schema.org` JSON-LD (`Product`, `BreadcrumbList`) | It holds only the sales price and a flattened availability, so a record built from it lists the missing fields as unobserved |
48
+ | SEO and redirect source | PDP/category `<title>`, meta description, `og:*`, canonical | Detect template-generated SEO versus SEO set per item. Store paths decoded. A path is a redirect source, never a Wix slug |
49
+
50
+ The product set is the **union** of the grid tiles from every category (including
51
+ categories linked only from the navigation) and the sitemap's product URLs. Key products by
52
+ SFCC product id, not by URL: locale renditions have their own canonicals.
53
+
54
+ ## Signals that are easy to misread
55
+
56
+ - **Product types.** Variation attributes create SKUs (Wix variant options). SFCC
57
+ *product options* (e.g. engraving) change the price, not the SKU, so they are Wix
58
+ modifiers. Keep them in separate fields.
59
+ - **Option visibility.** An option can be attached to a product but hidden on the
60
+ storefront: its markup is present but hidden. SFRA has no standard visibility flag. Find
61
+ the store's own custom field by comparing products where the option is shown and where
62
+ it isn't. If you can't find one, record visibility as unknown and never drop the option.
63
+ - **Stock.** The values are `inStock`, `preorder` (with `inStockDate`, which only means a
64
+ date when the status is `preorder`), and out of stock (often no status at all, only a
65
+ message). `lowStockCount` and `maxOrderQuantity` are hints, never authoritative
66
+ quantities.
67
+ - **Prices.** `price.list` is the compare-at price. `promotions[]` names promotion ids but
68
+ never their rules. `callForPrice` hides the price and add-to-cart: that needs a human
69
+ decision.
70
+ - **Images.** The original is the static path: drop `/dw/image/v2/<REALM>_<ENV>` and the
71
+ query string. Larger `sw`/`sh` renditions are upscales.
72
+ - **Ratings** can be an aggregate number with no reviews behind it, which can't be imported
73
+ as reviews.
74
+ - **Videos** may be opaque ids whose host is not exposed.
75
+
76
+ ## Scan the other pages
77
+
78
+ Product and category pages are covered by the capture above. Everything else (about,
79
+ shipping, returns, FAQ, legal, store locator, forms, gift certificates, loyalty) is usually
80
+ linked **only** from the header and footer.
81
+
82
+ **Seeds:**
83
+ - the homepage;
84
+ - every link harvested from product and category pages;
85
+ - **every default-locale sitemap URL the catalog capture did not claim** (content assets and
86
+ `Page-Show` pages often appear only there).
87
+
88
+ **Rules:**
89
+ - Stay on the same host, follow `robots.txt`, and skip the alternate-locale prefixes.
90
+ - **Admit content routes:** `Page-Show?cid=<id>` (SFRA content assets), Page Designer pages,
91
+ `Stores-Find` (store locator), and ordinary `*.html` or extensionless content paths.
92
+ - **Skip only these:** assets; query variants of an already-seen page; catalog routes the
93
+ capture owns (`Product-*`, `Search-*`); and action or AJAX routes (`Cart-*`, `Checkout*`,
94
+ `Account-*`, `Login-*`, `Order-*`, `Wishlist-*`, `*-Ajax*`, form `POST` targets).
95
+ ⚠️ Never skip a whole controller family that isn't on this list. Record it for review
96
+ instead.
97
+ - Give every URL a disposition (`captured`, `covered-by-catalog`, `skipped:<reason>` or
98
+ `failed:<status>`) in `data/sfcc-discovery/page-inventory.json`. Re-runs re-attempt
99
+ `failed`.
100
+
101
+ For each captured page, read its content and propose the Wix destination: a static page,
102
+ CMS items, a form, pickup locations, a gift-card product, or a manual or dropped item.
103
+ Policy prose such as free-shipping thresholds, delivery times, VAT wording or the return
104
+ window is **evidence for Wix settings, not settings**.
105
+ - Quote it verbatim into `data/sfcc-discovery/policy-rules.json`, with `status: candidate`.
106
+ - Never fill in a value the text doesn't state.
107
+ - Have the user confirm each rule, including threshold boundaries, shipping option titles
108
+ and delivery estimates. Store their verbatim answer and set `status: confirmed` before
109
+ anything is written to Wix.
110
+
111
+ ## Be polite and resumable
112
+
113
+ - Keep one throttle for every request (start around 60 per minute), use a bounded timeout,
114
+ and retry `429`/`503` honoring `Retry-After`.
115
+ - Checkpoint as you go, so a re-run resumes and re-attempts only failures. Refresh prices
116
+ and stock just before import.
117
+ - Decode URLs tolerantly: a malformed `%` must not abort the run.
118
+
119
+ ## Hand-off (existing artifacts only)
120
+
121
+ Each stage writes only its own part, through the contracts that already exist:
122
+
123
+ | Stage (producer) | Writes | Read by |
124
+ |---|---|---|
125
+ | Capture code (`migrations/<project>/src/`) | Raw data, `page-inventory.json`, `policy-rules.json` under `data/sfcc-discovery/` | `rp-discovery` |
126
+ | `rp-discovery` | `source-schema.json` (catalog entities, `site_page`, confirmed rules as `site_policy_rule`, gaps in `sourceMeta`) and the "Gaps" section of `source-profile.md`, naming each cutover item below | `rp-mapper` |
127
+ | `rp-mapper` | `mapping/mapping-plan.json`, including each routed entity's `urlPolicy`; one `mapping/review/mapping-gaps.json` row per cutover item | `rp-setup-discovery`, `rp-import-codegen` |
128
+ | `rp-setup-discovery` | One `setup/setup-requirements.json` entry per cutover item (`automation: manual` or `blocked`, the `requirementId` below, `recommendedAction`) | The website handoff (`setupContract.manualBlockers`) |
129
+ | Generated import code | URL state in `state/url-preservation/`, through `lib/url-preservation-state.js` (below) | Resume, redirect planning, cutover |
130
+
131
+ URL state, each file in its own role:
132
+ - `base-paths.json`: entity-level route intent from mapping `urlPolicy`.
133
+ - `url-ledger.ndjson`: one append-only row per public record (source URL, planned and actual
134
+ target).
135
+ - `redirects.ndjson`: only when both relative URLs are known and differ.
136
+ - `unresolved.ndjson`: only URLs still waiting on a route decision, a target lookup or
137
+ manual review.
138
+ - A preserved URL (same relative path) closes with no redirect.
139
+
140
+ Cutover items:
141
+
142
+ | `requirementId` | Trigger | Owner → action | Resolves when |
143
+ |---|---|---|---|
144
+ | `sfcc-redirects` | Planned `redirects.ndjson` rows exist | Cutover Operator → enter them in Wix when the domain moves (there is no redirect API) | Each planned old URL lands on its target after cutover |
145
+ | `sfcc-page-build:<path>` | A captured page with no automatic destination, or an `unresolved.ndjson` `manual_review` page | Cutover Operator → build the page from its captured content, or mark it dropped, before launch | The page is published at its target URL (then its ledger row and redirect follow), or a recorded drop decision exists |
146
+ | `sfcc-policy-unconfirmed:<domain>` | A rule still `candidate` in `policy-rules.json` | **Requires Import Operator** → "Confirm or reject the candidate rules in `data/sfcc-discovery/policy-rules.json` with the merchant, then re-run mapping and setup for `site_policy_rule`" | Every rule is `confirmed` (with the Wix setting read back) or `rejected`, each with the merchant's verbatim answer |
147
+ | `sfcc-call-for-price` | A product that hides its price | **Requires Import Operator** → "Ask the merchant how each call-for-price product should sell on Wix, record the answer, and re-import those products" | A recorded answer, and the products read back in that state |
148
+ | `sfcc-option-visibility` | Option visibility is unknown | **Requires Import Operator** → "Confirm which add-on options shoppers can buy, then re-import the affected products" | A recorded answer, and the options read back |
149
+ | `sfcc-partial-variants:<master>` | Unresolved variant values | **Requires Import Operator** → "Re-run the capture to re-attempt them; ask the merchant whether any remaining values are retired" | Every value is resolved or recorded as retired |
150
+ | `sfcc-authenticated-data` | Always, on a public-only run | Cutover Operator → tell the merchant that promotion rules, real inventory, customers, orders, gift-certificate balances and offline products need Business Manager access later | A recorded merchant acknowledgement, or the later authenticated pass is complete |
151
+ | `sfcc-alternate-locale:<locale>` | Locale renditions seen but not captured | Cutover Operator → tell the merchant that locale isn't migrated yet | A recorded merchant acknowledgement, or a later locale pass is complete |
152
+
153
+ ⚠️ No cutover UI reads these yet. They are preserved for it, not wired to it.
@@ -0,0 +1,394 @@
1
+ ---
2
+ name: rp-source-shopify
3
+ description: >-
4
+ Shopify private-data source adapter, read entirely through the Shopify CLI (`shopify store
5
+ execute`) on the import operator's machine: discovery capture, its resumable step sequence,
6
+ source-coverage rows, the bulk extract of the full store, and the read contract for codegen. Use when the source platform is
7
+ Shopify and the Admin API (private data) was chosen. The public storefront route is
8
+ `rp-quick-shopify` / public content, not this skill.
9
+ ---
10
+
11
+ # rp-source-shopify
12
+
13
+ Shopify **source adapter** for private data: orders, customers, gift cards, discounts, draft and
14
+ archived products, content, navigation, locations, shipping, metaobjects, files and redirects.
15
+ It follows the same contract as `rp-source-wordpress` and `rp-source-csv`: it discovers what the
16
+ store holds, writes the standard discovery files, records everything it could not capture as a
17
+ source-coverage row, and hands over to the general mapping, approval, import and reporting
18
+ steps. Nothing it reads is written back; the store is never changed.
19
+
20
+ ## When this skill is used
21
+
22
+ - **`rp-discovery`** runs the *Discovery* section when the Shopify acquisition-mode answer was
23
+ `Admin API` (`sourceMode=private_data`).
24
+ - **`rp-import-codegen`** reads the *Read contract* section.
25
+
26
+ ## Access path: the Shopify CLI, read-only
27
+
28
+ Every call is `store execute --store <shop>.myshopify.com --query <query> --json --version
29
+ 2026-10`, run through `lib/shopify-cli.js` by the adapter's own Shopify CLI install, using the
30
+ session the operator approved in the browser on their machine. No token is stored by this
31
+ adapter.
32
+
33
+ - **Read-only by construction.** A mutation document is refused before any process starts. The
34
+ one exception is the bulk extract's start: Shopify classes `bulkOperationRunQuery` (a read job)
35
+ as a mutation, so `startBulkOperation` sends that one fixed document with `--allow-mutations`.
36
+ No other call can carry the flag, and operations are never cancelled.
37
+ - **A GraphQL error is data about the store**, returned to the caller: discovery turns it into a
38
+ `capture-failed` coverage row. A read Shopify throttles on all 6 calls (1, 2, 4, 8, 16 s
39
+ between them) is `shopify_throttled`, also a `capture-failed` row at discovery. **Any other CLI
40
+ failure stops the step** (exit 2); it is never retried in a loop and never read as "no records".
41
+ - Shopify's terms forbid automating the store admin in a browser. Never do it.
42
+
43
+ ### The connection: one dedicated staff account, checked before every read
44
+
45
+ Inputs: `SHOPIFY_SHOP_DOMAIN=<shop>.myshopify.com` in `config/source.shopify.env` (not a
46
+ secret). The operator's Node.js must be **22.12 or later**.
47
+
48
+ 1. The store owner creates a staff account for the migration (Administrator role, or a custom
49
+ role with app and channel management) and gives it to the import operator. The owner's own
50
+ account is not an allowed fallback.
51
+ 2. Run the session check from this skill directory:
52
+
53
+ ```bash
54
+ node scripts/shopify-session-check.js --project <migrations-root>/<project>
55
+ ```
56
+
57
+ It checks, in order and stopping at the first failure: Node.js ≥ 22.12; the adapter's own
58
+ Shopify CLI at exactly 4.8.3 in `~/.replatform/tools/shopify-cli-4.8.3`; the connection and
59
+ Shopify's scope readback (every scope the reads declare); and that Shopify lists the pinned
60
+ Admin API version `2026-10` as supported. Then it writes
61
+ `data/shopify-discovery/session-receipt.json` (no secret, no personal data).
62
+ 3. The first time, it asks the **first-connection question** (a discovery `question` action):
63
+ was the connection approved from the dedicated migration staff account? Answer
64
+ `dedicated-account` only when it was. `other-account` stops: discovery does not start and the
65
+ question is asked again after the owner provides a dedicated account.
66
+ 4. Follow its stop codes:
67
+
68
+ | Code | What the operator does |
69
+ | --- | --- |
70
+ | `shopify_cli_node_unsupported` | **Requires Import Operator.** Switch this terminal to Node.js 22.12 or later (for example the current LTS) with the usual installer or version manager, check `node --version`, run the check again. Nothing was installed or read |
71
+ | `shopify_cli_not_installed` / `shopify_cli_version_changed` | Ask the operator; with their consent run the check again with `--install` (installs or reinstalls exactly 4.8.3 into the adapter folder, about 52 MB, nothing global) |
72
+ | `shopify_session_missing` / `shopify_scopes_missing` | Run the check with `--connect` and approve in the browser while signed in to the store as the dedicated staff account. `--connect` requests the full derived scope list |
73
+ | `shopify_cli_incompatible` | The adapter install is damaged or moved; reinstall with `--install` |
74
+ | `shopify_api_version_unsupported` | Stop and report: moving the pin is a tested code change, never a workaround |
75
+
76
+ **Never type `shopify store auth` or any other bare `shopify` command.** `--connect` starts the
77
+ browser approval itself through the adapter's CLI with Shopify's self-update switched off; a
78
+ bare command would run another Shopify CLI and could upgrade a machine-wide installation.
79
+ Never run `npm -g`, `shopify config autoupgrade`, or change any Shopify CLI setting.
80
+
81
+ Exit codes: **0** passed and confirmed; **3** the first-connection question is pending;
82
+ **2** stopped (the printed code says why); **1** usage error.
83
+
84
+ Run the check **before discovery and before each extract**. Discovery refuses to start
85
+ (`shopify_session_not_checked`, `shopify_first_connection_unconfirmed`) until the latest check
86
+ passed for this store and the first-connection answer is `dedicated-account`.
87
+
88
+ ### When the connection expires
89
+
90
+ A read whose CLI session expired stops the step with `source_auth_expired` and creates a
91
+ `manual_action` user action for the stage (`discovery` or `execution`); the run holds at
92
+ `awaiting_user_action`. **Requires Import Operator:** run the session check (with `--connect`
93
+ if asked), then answer the request and run the same step again. Only the receipt changes, so the
94
+ step resumes where it stopped and no finished read is repeated.
95
+
96
+ ### The staff account after cutover
97
+
98
+ The first passing check after a `dedicated-account` answer records the account in
99
+ `data/shopify-discovery/staff-access.json`. From then on every completion report lists
100
+ `shopify-staff-account-removal` (high) until the owner's removal is recorded:
101
+
102
+ ```bash
103
+ node scripts/shopify-session-check.js --project <dir> --confirm-staff-removal owner-removed-account
104
+ ```
105
+
106
+ Remove the account only after cutover and after the last read from Shopify (including any
107
+ catch-up). If the confirmation reports the record unreadable or missing, run
108
+ `--repair-staff-access` first: it keeps the damaged file aside, rebuilds a `pending` entry and
109
+ never writes `confirmed`. Nothing else closes the action; never edit the file by hand.
110
+
111
+ ## Discovery
112
+
113
+ Run from this skill directory:
114
+
115
+ ```bash
116
+ node scripts/shopify-discovery.js --project <migrations-root>/<project> --store <shop>.myshopify.com
117
+ ```
118
+
119
+ The steps run in this order. Each records its result in
120
+ `data/shopify-discovery/discovery-steps.json` before the next starts, so a restart runs only
121
+ the steps not yet recorded and reads no entity it already captured:
122
+
123
+ | Step | What it does | Writes |
124
+ | --- | --- | --- |
125
+ | `capture` | One count (where the API has one) and up to 3 sample records per entity, plus the shop and its policies | `entities/<entity>.json` |
126
+ | `withheld-details` | Eight ordinary 3-record probes classify withheld name, email, phone and address kinds for customers and orders | `kind-probes.json` |
127
+ | `gift-card-census` | Exact-count-gated gift-card census; every positive balance is owed | `bulk-manifest.json`, `gift-card-census.json` |
128
+ | `order-window` | Orders older than the CLI's ~60-day order-history window (below) | `order-window.json` |
129
+ | `questions` | Asks the merchant what earlier steps could not read, as discovery `question` user actions | answered `orchestration/user-actions/*.json` |
130
+ | `coverage` | Builds the coverage rows and writes the raw-capture index | `source-coverage.json`, `README.md` |
131
+
132
+ ⚠️ When this bundle does not ship a step's implementation, discovery **stops at that step** with
133
+ `shopify_discovery_step_unavailable` (exit 2) after recording the steps before it. Do not work
134
+ around it: a discovery that skipped the check would look complete while missing data. Report it
135
+ to the user.
136
+
137
+ Exit codes: **0** complete; **3** a merchant question is pending — the run holds at
138
+ `awaiting_user_action`; answer it, then run the same command again (nothing is read again);
139
+ **2** stopped, with the reason code in the printed JSON; **1** usage error.
140
+
141
+ To re-read entities after their access is fixed, add `--reread <entity>` (repeatable). Only those
142
+ entities are read again; the coverage file is rebuilt.
143
+
144
+ **One store per capture.** The store is recorded in `discovery-steps.json` and in every
145
+ `entities/<entity>.json` before anything is read. A run for any other `--store` stops with
146
+ `shopify_discovery_store_mismatch` (exit 2) before reading or changing anything, so no artifact
147
+ ever combines two stores. `--restart` discards the whole `data/shopify-discovery/` capture
148
+ (steps, entities, every technical step's files, coverage file, index) and reads from scratch; it
149
+ keeps the connection records (`session-receipt.json`, `staff-access.json`). It
150
+ is refused with `shopify_restart_blocked_handoff` when this project already hands a different
151
+ store to mapping — `source-profile.md`, `source-schema.json` or the promoted
152
+ `discovery/source-coverage.json` exists — because those would keep presenting the first store:
153
+ start a new migration project for the other store instead. It also refuses with
154
+ `shopify_restart_blocked` while a merchant question from the previous capture is
155
+ still unanswered. Never delete files by hand to get past a mismatch.
156
+
157
+ ### Order-history window
158
+
159
+ Through the CLI Shopify shows only the last ~60 days of orders, on every read path. The
160
+ `order-window` step reads `shop.createdAt`:
161
+
162
+ - shop older than the window, or `createdAt` unreadable → row `shopify:orders-before-window`;
163
+ - shop younger than the window → it reads the visible order with the earliest `processedAt`; one
164
+ processed before the shop existed (imported history) → the row, no question; otherwise it asks
165
+ the merchant "Were orders imported into this Shopify store from another system?" (`no` → no
166
+ row; `yes` or `unknown` → the row).
167
+
168
+ Never use the visible orders' dates as proof of completeness. The row is `auth-gated` /
169
+ `requires-development`, holds the run at mapping until it has a disposition, and loss is
170
+ accepted only through a `loss-accepted` gate.
171
+
172
+ ### Withheld customer and order details
173
+
174
+ The `withheld-details` step sends one ordinary query per entity and protected kind. A kind is
175
+ withheld only when Shopify returns an error path naming one of that kind's fields. A blank with no
176
+ error is the merchant's blank; the accepted policy deliberately adds no full-store census. A
177
+ pathless `ACCESS_DENIED`, an unrelated path or another failure produces `shopify:<entity>`
178
+ `capture-failed`, never a guessed kind. A pathless denial first rechecks the session and permits at
179
+ most one reapproval.
180
+
181
+ `kind-probes.json` records only outcomes, paths and error codes, plus the per-entity projection;
182
+ it never records customer values. Each completed probe is atomic, so restart sends only missing
183
+ probes. `--reread customers` or `--reread orders` also clears that entity's probes.
184
+
185
+ The extract removes exactly the withheld kind's fields from customer and order queries. Name is
186
+ first/last name; address is address lines, zip and geolocation. Company, city, province, country
187
+ and every other explicitly unprotected field remain. A customer is written to
188
+ `customers-withheld-identity.ndjson`, not `customers.ndjson`, only when an identity kind is
189
+ withheld and no readable name, email or phone remains. The manifest records
190
+ `withheldIdentityCount`, and the count check includes the sidecar.
191
+
192
+ ### Gift cards: codes never move, balances remain owed
193
+
194
+ Shopify exposes only `lastCharacters` and `maskedCode`, never a reusable full code. Never create
195
+ a spendable Wix gift card from this read. The census and every extract run the same bulk query,
196
+ then gate it before `done` with `giftCardsCount(limit: null)` bound to the read's `createdAt`.
197
+ Only `precision: EXACT` with at least that many read cards passes. A short or inexact count, a
198
+ rejected filter, or an invalid plain-decimal amount fails the entry and records
199
+ `shopify:gift-cards`; the extract remains stopped until `--retry-failed` starts a new read.
200
+
201
+ Every positive balance is owed, including disabled cards and cards carrying an expiry date.
202
+ Money is summed exactly per currency without floating point or conversion. The census keeps only
203
+ counts, per-currency totals, disabled/expired counts and read evidence; it stores no card id,
204
+ masked code or customer value. A nonempty census emits `shopify:gift-card-codes`. If cards first
205
+ appear during extract, that row is added and the extract stops so mapping can decide it.
206
+
207
+ ### Entities read
208
+
209
+ `products` (all statuses, with variants), `collections`, `orders` (with refunds and
210
+ fulfillments), `customers`, `gift-cards`, `discounts`, `pages`, `blogs`, `articles`, `menus`,
211
+ `locations`, `inventory-items`, `delivery-profiles`, `metaobjects` (listed through their
212
+ definitions, each with its count), `files`, `url-redirects`, and the singletons `shop` and
213
+ `shop-policies`. `lib/discovery-reads.js` holds each named query.
214
+
215
+ ### Synthesize, then promote
216
+
217
+ After the script exits 0, synthesize `source-profile.md` and the project-root
218
+ `source-schema.json` from `data/shopify-discovery/entities/*.json`, following
219
+ `source-schema.example.json` in this directory. Per entity:
220
+
221
+ - `rawFile` is `entities/<entity>.json`; `recordCount` is its `count` **only when its
222
+ `countExact` is true** (Shopify answered `precision: EXACT`). Otherwise `recordCount` is null:
223
+ where the API has no count, say so; where the count is a lower bound (`countPrecision:
224
+ "AT_LEAST"`), put it in `recordCountAtLeast` and never write it as `recordCount`. Never invent
225
+ a count. `inUse` is true when samples were returned.
226
+ - An entity whose file carries `errors[]` is **not** synthesized as an empty entity: it is a
227
+ coverage row already.
228
+ - Record in `source-profile.md`: access is the operator's Shopify CLI session, read-only; the CLI
229
+ only shows recent orders; the store's currency and timezone from the `shop` singleton.
230
+
231
+ Then promote, from `rp-discovery`:
232
+
233
+ ```bash
234
+ node scripts/promote-source-coverage.js <migrations-root>/<project> --adapter shopify
235
+ ```
236
+
237
+ ## Extract
238
+
239
+ The full store is read through Shopify's server-side **bulk export**, one dataset at a time,
240
+ never page by page. Run from this skill directory, after the session check:
241
+
242
+ ```bash
243
+ node scripts/shopify-extract.js --project <migrations-root>/<project> [--retry-failed] [--catch-up]
244
+ ```
245
+
246
+ The store comes from `config/source.shopify.env` (or `--store`). It writes
247
+ `data/source-extract/<entity>.ndjson` — `products`, `collections`, `customers`, `orders` (the
248
+ three order queries joined by order id: core, refunds, fulfillments), `gift-cards-codeless`, `discounts`,
249
+ `delivery-profiles`, `inventory-items`, `pages`, `blogs`, `articles`, `menus`, `url-redirects`,
250
+ `locations`, `metaobjects`, `files` — plus the optional
251
+ `customers-withheld-identity.ndjson` — and `data/source-extract/extract-manifest.json`. The 18
252
+ bulk queries and eight `probe-*.graphql` ordinary queries each start with a `# scopes:` line the
253
+ session check derives the required scopes from. Orders and customers are filtered to the
254
+ manifest's snapshot time `T`.
255
+
256
+ - **One operation at a time**, in the table order. Each state change is one atomic manifest
257
+ write (`pending → starting → running → downloaded → done`, or `settling → failed | denied`), so
258
+ a restart resumes at the exact state and a finished dataset is never read again. A dataset
259
+ whose start was interrupted is simply started again; the first job's result is never read.
260
+ - **Only a complete download counts.** A file is `downloaded` only for HTTP 200, exactly
261
+ `fileSize` bytes, ending in a newline, every line one JSON object. An expired link (HTTP 400 or
262
+ 403) re-runs the dataset (at most 2 times); other failures download again (3 tries), then one
263
+ re-run, then `failed`.
264
+ - **A failed, expired, cancelled or partial operation** is re-run once, then `failed`
265
+ (`shopify_bulk_failed`). A `failed` extract dataset stops the extract now and on every later
266
+ start. `ACCESS_DENIED` first runs the session check; a refusal with a valid session is final
267
+ for that dataset (customer and order queries go to the withheld-detail attribution of the
268
+ customer/order spec; every other dataset is `failed`).
269
+ - **Customer/order denial attribution.** A valid-session bulk denial enters `settling`, then
270
+ runs that entity's four ordinary probes. A named, newly withheld kind is upserted and promoted
271
+ as its own coverage row and stops with `shopify_protected_fields_withheld`; after mapping, the
272
+ denied query resets with the narrower projection. An all-readable, pathless or unrelated
273
+ diagnostic is `unattributed`, leaves the projection unchanged and stops every start with
274
+ `shopify_bulk_failed` until `--retry-failed`. Each diagnostic is keyed by query and
275
+ `settlingAt`, so handler replay never sends a finished probe or duplicates a row.
276
+ - **`settling`** makes consequences recoverable: the verbatim error is written first, then the
277
+ outcome's idempotent handler (the coverage row), then the terminal state. A restart reruns the
278
+ handler of any `settling` dataset before anything else.
279
+ - **Overdue.** A job still preparing 4 hours after it started creates one `question` user action
280
+ (`shopify_bulk_overdue`, choices `wait` / `abort`) and the step holds at
281
+ `awaiting_user_action` (exit 3). Answer it and run the same command again. `abort` makes the
282
+ dataset `failed` (`shopify_bulk_overdue_aborted`); Shopify's operation is not cancelled.
283
+ - **Count check.** After the read, customers (plus the withheld-identity file) and orders must
284
+ reach Shopify's own exact count at `T`. Fewer, or a count Shopify gives only as `AT_LEAST`, is a
285
+ `capture-failed` row `shopify:<entity>` (through `lib/import-findings.js` rules) and the stop
286
+ `shopify_extract_count_short` / `shopify_extract_count_inexact`; the run goes back through
287
+ mapping. A read is a picture of the store while it ran, not a frozen snapshot.
288
+ - **Gift-card gate.** While `gift-cards` is still `downloaded`, its exact count and every decimal
289
+ amount are checked. Only a pass writes the codeless per-read file named by `cardsFile`, records
290
+ owed counts and balances in the manifest, and permits `done`. Files no `done` entry names are
291
+ ignored. `gift-cards-codeless.ndjson` contains no `maskedCode` and is never a Wix gift-card
292
+ import file.
293
+ - **`--retry-failed`** (Import Operator): sends every stopping dataset — each `failed` entry, each
294
+ unattributed `denied` entry, and the datasets whose count check stopped the extract — back to
295
+ `pending` and reads them again. Nothing else is reset.
296
+ - **`--catch-up`** (the source catch-up rerun): archives a `complete` manifest as
297
+ `extract-manifest.<T_prev>.json` and reads the whole store again in full with a new `T`. A
298
+ manifest that is not complete is resumed instead. Without the flag a `complete` manifest with
299
+ its final files present reads nothing.
300
+
301
+ Exit codes: **0** complete; **3** an overdue question is pending; **2** stopped (the printed
302
+ code says why; finished datasets are kept); **1** usage error. Stop codes are in
303
+ `rp-execute-import`. A manifest bound to another store stops with `shopify_extract_store_mismatch`.
304
+
305
+ **Cutover — final re-read.** Every import leaves one task: after the merchant's Shopify activity
306
+ stops (and before the staff account is removed), run the session check, then the rerun for new
307
+ and modified records, which runs `shopify-extract.js --catch-up`. Check that
308
+ `extract-manifest.json` says `complete`, every entry's `readAt` is after activity stopped, and the
309
+ rerun completed. **Requires Import Operator.**
310
+
311
+ **Cutover — export withheld details.** Any withheld-kind or hollow-customer row also keeps the
312
+ high `shopify-withheld-details-export` completion action open, whatever its mapping disposition.
313
+ After the final catch-up and after the merchant exports customers and orders from Shopify Admin,
314
+ record the attestation in the original migration environment:
315
+
316
+ ```bash
317
+ node scripts/shopify-discovery.js --project <migrations-root>/<project> --confirm-withheld-export owner-exported
318
+ ```
319
+
320
+ Regenerate the completion report and check the action is gone. A later Shopify read or a new
321
+ withheld row reopens it. This is an operator attestation, not a Shopify verification. The future
322
+ 0197/0198 catch-up/checklist integration is not wired; the completion report is the durable
323
+ handoff. **Requires Import Operator.**
324
+
325
+ **Cutover — owed gift-card balances.** The completion report always reevaluates the high-severity
326
+ `shopify-gift-card-codes-not-migrated` action whenever `shopify:gift-card-codes` exists, even
327
+ after its loss was accepted. **Requires Import Operator:**
328
+
329
+ ```bash
330
+ node scripts/shopify-gift-card-remedy.js export --project <project>
331
+ node scripts/shopify-gift-card-remedy.js activity-stopped --project <project> --at <ISO-time> --by <name>
332
+ # Run the final --catch-up read here.
333
+ node scripts/shopify-gift-card-remedy.js record-replacements --project <project> --evidence <file.csv> --by <name>
334
+ # Or record the still-open date on which Shopify will stop redeeming them:
335
+ node scripts/shopify-gift-card-remedy.js keep-redeeming --project <project> --until <YYYY-MM-DD> --by <name>
336
+ ```
337
+
338
+ `export` writes `data/shopify-cutover/gift-cards-owed.csv` with id, last characters, balance,
339
+ currency, enabled, expiry and current replaced state — no code or customer column. A card closes
340
+ only when the current manifest has a successful read started after `activity-stopped`, and its
341
+ CSV evidence names a Wix replacement worth at least that card's balance in the same currency
342
+ plus a non-future holder-notification date and confirmer. A newer card or higher balance reopens
343
+ that card; a pending/failed read or newer activity-stop record reopens all. Keeping Shopify
344
+ redeeming is never closure.
345
+
346
+ ## Coverage rows
347
+
348
+ The adapter always writes `data/shopify-discovery/source-coverage.json` (`platform: "shopify"`,
349
+ `adapter: "shopify"`), with `rows: []` when there is nothing to report. Rows are decided at
350
+ mapping like any source's rows.
351
+
352
+ | `coverageId` | When | `reason` | `recoverability` |
353
+ | --- | --- | --- | --- |
354
+ | `shopify:<entity>` | A discovery read of that entity failed | `capture-failed` | `import-operator` |
355
+ | `shopify:<entity>` | A throttled read, an unattributed protected-field probe, a failed or overdue-aborted extract dataset, or a full read short of Shopify's count | `capture-failed` | `import-operator` |
356
+ | `shopify:orders-before-window` | Orders older than the CLI window may exist (order-window step) | `auth-gated` | `requires-development` |
357
+ | `shopify:customer-<kind>`, `shopify:order-<kind>` (`name`, `email`, `phone`, `address`) | An ordinary probe error path names that withheld kind | `auth-gated` | `requires-development` |
358
+ | `shopify:customers-withheld-identity` | At least one extracted customer has no readable identity after projection | `auth-gated` | `requires-development` |
359
+ | `shopify:gift-card-codes` | Gift-card codes are never readable | `route-unsupported` | `not-recoverable` |
360
+
361
+ `capability` is the registry string where one exists (`commerce.orders`, `crm.contact`,
362
+ `commerce.gift-cards`, `commerce.catalog-product`, …); otherwise `null` with
363
+ `capabilityUnregistered: true`. ⚠️ A row carries no count field; counts stay in the entity files
364
+ and the row's `evidence` points at them.
365
+
366
+ ## Read contract
367
+
368
+ For `rp-import-codegen` when `source-schema.json.platform === "shopify"`:
369
+
370
+ - Vendor `lib/shopify-cli.js` and read only through it, with its defaults (the adapter's CLI,
371
+ `CI=1`, `--version 2026-10`); never pass `command` or `env`. No direct HTTP, no stored token,
372
+ never `--allow-mutations` for a read. The discovery samples and counts page with `readAllPages`
373
+ (`first: 250`, 500 ms apart); a full-store read never does.
374
+ - Run the session check before each extract. On `source_auth_expired` call
375
+ `lib/shopify-session.js` `recordAuthExpired(projectDir, { stage: 'execution', store })` and stop;
376
+ the extract resumes from its manifest after re-approval.
377
+ - The full-store extract is the adapter's bulk extractor (`scripts/shopify-extract.js`, above), not
378
+ a generated per-record pager: generate the importer to read `data/source-extract/<entity>.ndjson`
379
+ only when `extract-manifest.json` says `complete`. If this bundle does not ship
380
+ it, stop codegen and report it.
381
+ - **A gap first found during the extract** is recorded with `lib/import-findings.js`
382
+ `stopWithFinding(projectDir, { row, code })`: the row is added to the raw coverage file by
383
+ `coverageId` (replacing a row with the same id), the file is re-promoted, and the extract stops
384
+ with `code`. From there the run goes back through mapping by the pipeline's general path, the
385
+ same as for every source.
386
+
387
+ ## Not in this adapter
388
+
389
+ - Installed apps and their data (reviews, subscriptions, loyalty points) are not inventoried
390
+ here.
391
+ - The merchant's own CSV exports go through `rp-source-csv`, a separate, degraded route.
392
+ - The final catch-up remains the source-catch-up task shared with every source. Withheld-detail
393
+ export and staff-account removal are tracked here (above) until the cutover checklist carries
394
+ them.