@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,373 @@
1
+ # WordPress Plugin Profiles
2
+
3
+ Declarative, machine-readable profiles describing how to **detect** one WordPress /
4
+ WooCommerce plugin and **how to read** its durable business data.
5
+
6
+ Profile files are the source of truth. `index.json` is generated from them and checked in so
7
+ runtime lookups stay token-cheap. `lib/plugin-knowledge.js` is the authority on a profile's
8
+ shape; the field reference below documents it.
9
+
10
+ ## What a profile is, and is not
11
+
12
+ - **It is** detection signals, per-entity read channels, route scope, and pointers to Wix
13
+ target refs.
14
+ - **It is not** authoritative about what a route returns. The live `OPTIONS` + sample `GET`
15
+ in `scripts/wp-discovery.js` always is. A profile is *advisory*: a stale one can only make
16
+ detection less complete — it can never cause a wrong read.
17
+ - **It does not** hold Wix target behavior. That lives in
18
+ `replatform/resources/rp-target-wix/domains/`. A profile only points at target refs
19
+ (`candidateTargetRefs`) and declares its `capabilities`.
20
+
21
+ ## Recognized or not
22
+
23
+ A plugin does not need a profile to migrate; it needs one to migrate *natively*.
24
+
25
+ | Population | What it means |
26
+ | --- | --- |
27
+ | recognized | a profile matched — named entities, channels, and target refs are known; the mapping is `confirmed` |
28
+ | derived | no profile, but the data is REST-visible; the mapping is `proposed` (CMS, or native when the domain KB confirms the proposed capability) |
29
+ | named only | detected with no readable channel — lands in *Pending* or on the no-migration-needed list, reported, never silent |
30
+
31
+ The invariant: **every installed plugin lands in exactly one of the four statuses**
32
+ (migration-planned · no-need-to-migrate · pending · requires-development). Authoring a
33
+ profile is always an upgrade from a working baseline, never the difference between working
34
+ and broken.
35
+
36
+ ### Two states automation may assign, and one only a human may
37
+
38
+ **By default every plugin is either profiled or pending.** A capability with no resolved Wix
39
+ target is *pending*, not impossible.
40
+
41
+ | State | Means | Assigned by |
42
+ | --- | --- | --- |
43
+ | migration planned / no need to migrate | resolved to a Wix target — native or CMS — or nothing to move | automation |
44
+ | **pending** | we do not know how to migrate this yet | automation — **the default** |
45
+ | **requires development** | Wix genuinely has no surface for this | **a named human, only** |
46
+
47
+ **Why the restriction.** An agent concluded twice that Wix had no target — gift cards and
48
+ events — and was wrong both times, because Wix splits capabilities across doc trees and a
49
+ service plugin reads like an absent write API. A wrong impossibility is the most expensive
50
+ error in this system: it tells a customer to abandon data that could have moved. So automation
51
+ is capped at *pending*, and the impossibility verdict needs a name against it.
52
+
53
+ **Recording pending** — `capabilities-pending-decision.json`, optional but useful: `reason`,
54
+ the `searched` evidence, and `suspected` (`target-exists` with a `plannedTarget` to author, or
55
+ `no-target` if we think Wix cannot). `suspected` carries **no authority** — a `no-target`
56
+ suspicion is still pending until signed.
57
+
58
+ **Recording a verdict** — `requires-development.json` requires `decidedBy` and
59
+ `decidedOn` alongside the search. Validation rejects an entry without them, and rejects any
60
+ entry once a target entity claims that capability, so a verdict cannot outlive its truth.
61
+
62
+ **Recording "nothing to move" for a capability of a profiled plugin** — the `capabilities[]`
63
+ register in `no-migration-needed.json`: `capability`, `reason` (`platform-does-it` /
64
+ `not-needed` / `reconfigure-in-wix`), `replacedBy`, `rationale`, `decidedBy`, `decidedOn`. The
65
+ slug list below cannot carry this (a slug with a profile is rejected there) and
66
+ *requires-development* is the wrong verdict when Wix covers the outcome natively — so this is
67
+ the third register, and the only way a profiled capability reaches *No need to migrate*
68
+ (`basis: decision`). It is not an impossibility verdict, so no recorded search is required,
69
+ but it is still signed: unsigned entries fail validation and are ignored at runtime. Mutually
70
+ exclusive with the other two registers, and rejected once a target entity claims the
71
+ capability.
72
+
73
+ **Recording "CMS may keep the records" — `cms-fallback-eligible.json`.** A profile **never**
74
+ names a `cms/*` ref in `candidateTargetRefs` (validation rejects it, and the classifier drops
75
+ one from a stale profile): a profile-declared CMS ref used to ship as a *confirmed* CMS plan
76
+ with no merchant decision. CMS keeps a plugin's records; it does not bring back what the plugin
77
+ *did*. So a recognized capability reaches CMS only through two gates:
78
+
79
+ 1. **Eligibility (here, signed).** One `capabilities[]` entry per capability: `capability`,
80
+ `targetRefsByEntity` (`"<plugin-slug>/<entity>": ["cms/collection", ...]`, keys covering
81
+ exactly the capability's profile entities), `reason` (why nothing native fits),
82
+ `nativeAlternativesChecked`, `featureLoss` (one merchant-readable sentence of what does not
83
+ work after archival — shown verbatim at the ask and in reports), `decidedBy`, `decidedOn`,
84
+ optional `note`. Only a capability whose every declaring profile declares exactly one
85
+ capability may appear (a multi-capability profile's entity set is ambiguous). Every ref
86
+ starts with `cms/` and resolves. Mutually exclusive with `requires-development.json` and
87
+ the no-need `capabilities[]` register, and rejected once a target entity claims the
88
+ capability. Unsigned entries fail validation and are ignored at runtime.
89
+ 2. **Approval (per migration, the merchant).** Eligibility alone plans nothing: the row stays
90
+ *Pending* (`cms-fallback-awaiting-approval`) until the merchant approves or declines at the
91
+ mapping review, recorded as `pluginCmsFallback:<capability>` in that project's
92
+ `orchestration/decisions.json` by `orchestration-state.js decide-cms-fallback`. Nothing is
93
+ written back to this register.
94
+
95
+ Unresolved capabilities are deliberately **not** a validation error. Blocking there would push
96
+ authors to invent a verdict just to make the build pass — which is the failure this rule exists
97
+ to prevent. The coverage report surfaces pending rows and asks a human instead.
98
+
99
+ ### Promotion paths into the recognized population
100
+
101
+ Two triggers, three possible destinations. Adding a plugin is a data change: no classifier,
102
+ discovery, mapper or codegen edit.
103
+
104
+ | Trigger | Destination | Cost |
105
+ | --- | --- | --- |
106
+ | **Research phase** — we investigate a plugin we expect to matter | full profile | research doc → profile → target entity → area entry |
107
+ | **After a run** — telemetry flags it unresolved, a human reviews it | full profile | same four |
108
+ | Either, and it turns out to need **no** data migration | one `no-migration-needed.json` line | one line |
109
+
110
+ **Order matters: author the target entity before the profile that points at it**, or record the
111
+ capability as awaiting a target. Validation enforces this rather than leaving it to memory.
112
+
113
+ ## Read channels
114
+
115
+ | `channel` | Reads from | Needs |
116
+ | --- | --- | --- |
117
+ | `plugin-rest` | the plugin's own namespace | sometimes plugin-specific credentials |
118
+ | `core-cpt` | `/wp/v2/<rest_base>` | nothing extra |
119
+ | `core-embedded` | properties injected into core/Woo records | sometimes `context=edit` |
120
+ | `core-meta` | registered meta (`show_in_rest`) | auth for edit-context meta |
121
+ | `plugin-rest-child` | a `{parentId}`-templated sub-resource on an already-sampled parent (`route` + `parentRoute`) | nothing extra, but only a representative sample — see SKILL.md |
122
+ | `export-file` | a user-supplied WXR / CSV / JSON export | the file |
123
+ | `db-only` | plugin custom tables | see "Resolving a db-only capability" below |
124
+ | `admin-page-only` | a wp-admin settings page with no REST route at all (config, not records) | human transcription — see below |
125
+
126
+ **Resolving a `db-only` capability -- try this order, do not default straight to a user file:**
127
+
128
+ 1. **Check whether the plugin exposes a REST route at all.** Confirm live against
129
+ `GET /wp/v2/plugins` and the REST index -- do not assume from the plugin's name or
130
+ marketing copy.
131
+ 2. **If there is no REST route, check the plugin's own admin UI for a built-in export
132
+ first.** Two `db-only` guesses on this project turned out to have one (Discount Rules'
133
+ CSV export, MailPoet's own REST API) and needed no bridge at all -- an existing native
134
+ export is simpler than authoring a new fulfillment.
135
+ 3. **Research the plugin's actual storage mechanism** before assuming a bridge can reach
136
+ it: check the plugin's public docs/WordPress.org page, or clone its public GitHub
137
+ source (many WordPress.org plugins are mirrored) and grep for `CREATE TABLE` /
138
+ `dbDelta` (a real custom table) versus `get_option`/`update_option` (`wp_options`) or
139
+ `add_post_meta`/`add_user_meta` (postmeta/usermeta). This determines which of the next
140
+ two steps applies -- guessing wrong wastes a whole fulfillment-authoring attempt.
141
+ 4. **A genuine custom database table is reachable, with zero user effort, via
142
+ wix-wp-plugin-v2's `structure-bridge-plugin` fulfillment kind -- try
143
+ this BEFORE falling back to a user-supplied export.** wix-wp-plugin-v2 is this skill
144
+ bundle's own bridge plugin (unlike the retired Wix Migration Helper below, it ships
145
+ with this skill and is meant to be installed on every source site this adapter
146
+ targets). Its `/structure` route describes any live table's real columns; its `/query`
147
+ route reads it with a safe, validated query. A permanent profile is optional: for an
148
+ unfamiliar plugin prepare an evidence-backed project-local entity plan through
149
+ [the shared producer](../PLUGIN-READ-PLANS.md). Do not edit this bundle during a migration.
150
+ Reuse a complete supported REST reader first. When maintaining a reusable profile,
151
+ author its entity's `blocked[]` as
152
+ `{"kind": "structure-bridge-plugin", "resolution": "<what/why, cite live evidence>",
153
+ "declined": false, "fulfillment": {"kind": "structure-bridge-plugin", "handlerId":
154
+ "wix-wp-plugin-v2", "table": "<bare_table_name>"}}` -- `handlerId`/`table` (and the
155
+ optional `sampleStructureRequest` below) live nested under `fulfillment`, not flattened
156
+ onto the `blocked[]` entry itself; `resolution` and `declined` are required on every
157
+ `blocked[]` entry regardless of kind (see the field reference below). Add
158
+ `sampleStructureRequest` when a raw "every column" read would expose something that needs
159
+ filtering or aggregating -- see `pw-woocommerce-gift-cards.json`'s gift-card-balance
160
+ aggregate for a full worked example of the complete shape.
161
+ See `lib/wix-wp-plugin-v2-client.js`, `scripts/wp-discovery.js`'s
162
+ `sampleStructureBridgeEntities` for the full contract.
163
+
164
+ **Credential split, decided by whether the source site has WooCommerce.** The bridge's
165
+ routes register two ways: an Application Password path gated on
166
+ `current_user_can('manage_woocommerce')`, and a signed migration-key JWT path gated only
167
+ on the signature/request-binding. `manage_woocommerce` does not exist on a WordPress
168
+ site with no WooCommerce installed, not even for an administrator -- on such a site the
169
+ Application Password bridge routes are structurally unusable for every user, so do not
170
+ offer an Application Password as the bridge credential on a content-only/blog/marketing
171
+ WordPress site; collect the migration key (`WMH2_MIGRATION_KEY`) instead. An Application
172
+ Password may still be required separately for private `wp/v2` reads. When a migration
173
+ key is configured, `wp-discovery.js` prefers the signed bridge route; otherwise it uses
174
+ the Application Password route when WooCommerce supplies the required capability.
175
+ Standard private `wp/v2`/`wc/v3` reads still require their own WordPress REST credential;
176
+ the migration key is never a substitute for that scope.
177
+ 5. **Know which tables the bridge can and cannot reach.**
178
+
179
+ | Table | Reachable? |
180
+ | --- | --- |
181
+ | `wp_options`, `wp_usermeta`, `wp_links`, multisite globals | **No, never.** No unlock path; pinning `option_name` does not help |
182
+ | `wp_postmeta`, `wp_commentmeta`, `wp_termmeta`, `wc_orders_meta`, any `*meta` table, or any table whose live schema carries a recognized key/value column pair | **Yes -- key-scoped.** Key names and counts are freely listable; a value is readable by naming its key (max 50 per request) |
183
+ | A table NAMED like a meta table whose key/value columns are *not* one of the six recognized pairs | **No.** No key column to pin means nothing to scope |
184
+ | Everything else | Yes, in full, minus the named credential columns in `COLUMN_DENYLIST` |
185
+
186
+ Row 2 is the one that changed. `wp_postmeta` **is** reachable now, via a two-step read
187
+ (discover key names, then read the keys you want) -- see `rp-source-wordpress/SKILL.md`'s
188
+ "Reading key/value tables through the bridge" for the request shapes. So Flamingo's message
189
+ data, which this list previously called permanently unreachable, is reachable: it is
190
+ `wp_postmeta` on a `flamingo_inbound` CPT. Checkout Field Editor's is not: it is a single
191
+ `wp_options` row (`thwcfe_sections`), and row 1 is unchanged.
192
+
193
+ **Do not declare a `user-file` blocker or accept a gap for a `wp_postmeta`-shaped entity
194
+ without checking this first.** Asking a site owner to hand-export data the bridge can read
195
+ is a real cost, and a profile that hard-codes "unreachable" outlives the reason it was
196
+ written. When research in step 3 lands on rows 1 or 3, then yes -- stop, and the remaining
197
+ options are `user-file` or accepting the gap.
198
+
199
+ The retired Wix Migration Helper plugin used the same idea -- a
200
+ site-installed bridge exposing specifically-named read-only REST routes for `db-only`
201
+ data -- but was a bespoke, per-capability plugin the site owner had to install
202
+ separately. wix-wp-plugin-v2 replaces it with one generic bridge covering any table,
203
+ subject only to the reachability table in step 5; do not author a new profile against the retired
204
+ `bridge-plugin` fulfillment kind.
205
+
206
+ **`admin-page-only` is not the same limitation as `db-only`.** `admin-page-only` means the
207
+ *configuration itself* renders only inside an authenticated wp-admin page (e.g.
208
+ `wp-admin/admin.php?page=<slug>`), and **WordPress Application Passwords do not
209
+ authenticate wp-admin page loads at all** — only REST API requests. VERIFIED against a
210
+ live WordPress installation (Discount Rules for WooCommerce's `woo_discount_rules`
211
+ settings page): a Basic-Auth request with a valid Application Password 302-redirects to
212
+ `wp-login.php?reauth=1`, the standard unauthenticated-session response, identical to what
213
+ an anonymous request gets. There is no scrapeable path here — WordPress core does not
214
+ extend Application Password auth to admin page rendering, by design.
215
+
216
+ ### Blocked source data and fulfillment
217
+
218
+ An entity may declare `blocked[]` only for a concrete, evidenced access gap. Every entry needs a
219
+ `kind` (`user-file` or `structure-bridge-plugin`), a `resolution` (what/why, citing live
220
+ evidence), and a `declined` boolean (whether the user has already declined this ask at
221
+ run time -- always `false` at authoring time). `user-file` means the owner must supply or
222
+ transcribe data; it does not imply a machine-readable import path. `structure-bridge-plugin`
223
+ means wix-wp-plugin-v2 (this skill bundle's own generic bridge -- see "Resolving a `db-only`
224
+ capability" above) can read the table directly; its optional `fulfillment` names the
225
+ registered `handlerId` and the bare `table` to read (plus an optional `sampleStructureRequest`
226
+ -- see the field reference below). A future file handoff uses `fulfillment.kind:
227
+ "csv-upload"` with a registered `handlerId` and `expectedInputPath`.
228
+
229
+ wix-wp-plugin-v2 has no manifest or case registry of its own to check a fulfillment's
230
+ readiness against -- unlike the retired, per-capability Wix Migration Helper bridge, which did (`manifestCaseId`, `expectedNamespace`, `extractionRoute`,
231
+ `productionReady: true` -- do not author against that retired shape). Authorization for
232
+ `structure-bridge-plugin` is a live core-table denylist plus a live `DESCRIBE` check at
233
+ request time, not a build-time readiness flag. Markdown documents are never runtime readiness
234
+ authorities.
235
+
236
+ Do not ask the user for their real WordPress account password to work around this — that is a
237
+ materially more sensitive credential than an Application Password and outside this pipeline's
238
+ secrets model. The correct escalation is the same one already established for other
239
+ structurally-invisible config (Checkout Field Editor's custom fields, PW Gift Cards' DB-only
240
+ balances): surface it as a `blocked: [{kind: "user-file"}]`-style row at the mapping review
241
+ gate and ask the site owner to transcribe or screenshot the specific admin page, since they can
242
+ view it directly with their own login.
243
+
244
+ `core-embedded` matters more than it looks: several major WooCommerce extensions add **no
245
+ REST route at all** and only widen `wc/v3/products` / `wc/v3/orders` payloads. Those plugins
246
+ are detectable solely from sampled record keys, which is why detection runs a second pass
247
+ after sampling.
248
+
249
+ `plugin-rest-child` is for a sub-resource that needs a known parent id first (e.g.
250
+ `/wc/v3/orders/{parentId}/notes`) and so can never be listed as its own flat collection.
251
+ `route` carries the literal `{parentId}` placeholder; `parentRoute` names the collection route
252
+ (already in scope and sampled) that supplies real ids. See SKILL.md's "Read channels" section
253
+ for how presence is checked and why a live per-parent sample is a representative check, not a
254
+ completeness claim.
255
+
256
+ ## Adding a plugin
257
+
258
+ 1. Read the vendor's REST documentation and record its URL in `sourceOfTruth`.
259
+ 2. Create `plugins/<slug>.json` following the field reference below. The filename slug must
260
+ equal `plugin`.
261
+ 3. Declare detection signals. Prefer `pluginFileIds` and `routes` (high confidence) over
262
+ `restNamespaces` and `assetPathSlugs` (low confidence — `wc/v3` is shared by dozens of
263
+ plugins).
264
+ 4. Declare one entity per durable record type, each with a `channel` and
265
+ `candidateTargetRefs`. An entity with no target refs must carry a `pitfall` explaining the
266
+ gap. Never list a `cms/*` ref: if nothing native fits and CMS should keep the records, a
267
+ named human adds a signed `cms-fallback-eligible.json` entry instead.
268
+ 5. Put helper, runtime, and configuration routes in `excludeRoutes` so the plugin's data
269
+ routes can be opted in without widening scope.
270
+ 6. Add a fixture: extend `test-fixtures/rest-index-plugins.json` and, if relevant,
271
+ `test-fixtures/wp-plugin-signals.json`, then assert detection in
272
+ `scripts/wp-plugin-contract-test.js`.
273
+ 7. Regenerate and validate:
274
+
275
+ ```bash
276
+ node scripts/plugin-knowledge-validate.js --write-index
277
+ node scripts/wp-plugin-contract-test.js
278
+ node scripts/wp-discovery-classifier-test.js
279
+ ```
280
+
281
+ ## Profile field reference
282
+
283
+ `lib/plugin-knowledge.js` is the **authority** on this shape — there is no `schema.json`, on
284
+ purpose: a second non-enforcing definition of the same contract only drifts out of sync.
285
+
286
+ **Required:** `schemaVersion` (1) · `plugin` (must equal the filename slug) · `displayName` ·
287
+ `profileVersion` (bump when the plugin's API changes) · `sourceOfTruth` (vendor docs URL) ·
288
+ `capabilities[]` · `detect` · `entities[]`.
289
+
290
+ **`detect`** — at least one signal required:
291
+
292
+ | Field | Confidence | Notes |
293
+ | --- | --- | --- |
294
+ | `pluginFileIds[]` | high | `plugin` values from `GET /wp/v2/plugins`. Matched on the directory too, because the main-file basename often differs (`wordpress-seo/wp-seo`). |
295
+ | `routes[]` | high | routes whose presence in the REST index identifies this plugin |
296
+ | `restBases[]` | medium | `rest_base` from `/wp/v2/types` or `/wp/v2/taxonomies` |
297
+ | `recordProperties[]` | medium | keys this plugin injects into core/Woo payloads; the only way to see route-less extensions |
298
+ | `restNamespaces[]` | low | **shared platform namespaces are rejected** — `wc/v3` identifies WooCommerce, not your plugin |
299
+ | `assetPathSlugs[]` | low | `/wp-content/plugins/<slug>/`, works with no credentials |
300
+ | `minVersion` | — | below it, detection reports `api-below-min-version` rather than assuming the API |
301
+
302
+ **`entities[]`** — each requires `entity`, `channel`, `candidateTargetRefs[]`. `capability` is
303
+ optional for backward compatibility, but required on every entity once any entity in that profile
304
+ uses it; it must name one of the profile's `capabilities[]`. This attribution prevents a
305
+ multi-capability profile's entities and target refs from leaking into each other's coverage rows.
306
+ Then:
307
+ **The FIRST `blocker`-severity pitfall across a capability's entities is what the merchant
308
+ reads.** `classifyCoverage` uses it verbatim as the coverage row's `userImpact`, and
309
+ `buildDispositionRows` joins those into the plugin's `consequence` line. So lead that one with
310
+ the consequence in plain words and put the internal instruction after it — an authoring note or
311
+ a cross-reference in first position becomes the customer-facing sentence.
312
+
313
+ `route` (route-bearing channels; a `{parentId}`-templated path for `plugin-rest-child`) ·
314
+ `parentRoute` (`plugin-rest-child` only — the already-sampled collection route parent ids come
315
+ from) · `responseEnvelope` (route-bearing channels only — `{itemsPath, countPath}` for a
316
+ non-standard wrapped response; see below) · `embeddedIn[]` + `propertyPath` (`core-embedded`) ·
317
+ `context` (`view`/`edit`/`both`, when the two differ) · `requiresParent` (sub-collection
318
+ ordering) · `hierarchical` · `recordKeyField` · `relations[]` · `pitfalls[]`
319
+ (`code`/`severity`/`summary`) · `blocked[]` (an evidenced access gap; `kind`, `resolution`,
320
+ `declined`, and optional executable `fulfillment`) · `overridesCoreRule`.
321
+
322
+ **`responseEnvelope`** — for a plugin whose REST route does not return a flat array (or a
323
+ single object), and does not advertise `X-WP-Total`/`X-WP-TotalPages` headers. `itemsPath` is
324
+ the dot-path to the array of records inside the response body (e.g. MailPoet's
325
+ `"data.items"`); `countPath` is the optional dot-path to the true total count when the header
326
+ is absent (e.g. `"data.meta.count"` — without it, `recordCount` reflects only the sampled
327
+ page, same as a headerless flat array). Sampling and counting otherwise behave exactly as they
328
+ would for a flat array once unwrapped — this only changes *where in the response* the sampler
329
+ looks.
330
+
331
+ **Optional top level:** `distribution` · `credentials[]` (plugin-specific keys) ·
332
+ `dataRoutePatterns[]` (wholly data-bearing namespaces) · `excludeRoutes[]` ·
333
+ `quirks[]`. (`dispositionHint` is retired — a plugin either has a profile or a `no-migration-needed.json` entry, never both.)
334
+
335
+ ## Rules the validator enforces
336
+
337
+ - `plugin` matches the filename; `schemaVersion` is 1; `profileVersion` and `sourceOfTruth`
338
+ are present (drift provenance).
339
+ - Every `candidateTargetRefs` entry resolves in `rp-target-wix/domains/index.json`, and none
340
+ is a `cms/*` ref (CMS goes through `cms-fallback-eligible.json` plus the merchant's approval).
341
+ - `cms-fallback-eligible.json` entries are signed, complete, CMS-only, cover exactly the
342
+ capability's profile entities, belong to single-capability profiles, and are exclusive with
343
+ the other two signed registers.
344
+ - Every `capability` is claimed by a Wix target entity's `capability` field **or** listed in
345
+ `requires-development.json` with a reason.
346
+ - Route-bearing channels declare `route`; `core-embedded` declares `embeddedIn` +
347
+ `propertyPath`.
348
+ - A wildcard route pattern keeps at least **two concrete leading segments**: `/ssp/v1/*` is
349
+ allowed, `/yoast/*` is not. This is what stops a profile from silently reopening an
350
+ excluded route family.
351
+ - No two profiles claim the same route, and no profile shadows a classifier core rule
352
+ without `"overridesCoreRule": true`.
353
+
354
+ ## Route precedence
355
+
356
+ Highest to lowest:
357
+
358
+ 1. operator `--exclude-route`
359
+ 2. profile `excludeRoutes`
360
+ 3. profile entity routes and `dataRoutePatterns`
361
+ 4. the classifier's own category rules
362
+ 5. generic collection-shape acceptance
363
+ 6. unsupported by default
364
+
365
+ Profile data routes outrank exclusion families because an explicitly listed route *is* the
366
+ per-capability opt-in — bounded by the wildcard rule above.
367
+
368
+ ## Maintenance
369
+
370
+ - Keep long analysis separate from the profile; profiles carry compact facts and a `sourceOfTruth` link.
371
+ - Bump `profileVersion` when a plugin's API changes.
372
+ - A capability that keeps resolving as `proposed` across real runs is the signal to
373
+ write a profile for it.
@@ -0,0 +1,101 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "plugin": "advanced-custom-fields",
4
+ "displayName": "Advanced Custom Fields",
5
+ "profileVersion": "2026-08",
6
+ "sourceOfTruth": "https://wordpress.org/plugins/advanced-custom-fields/",
7
+ "distribution": "wordpress-org",
8
+ "capabilities": [
9
+ "content.custom-fields",
10
+ "content.custom-field-schema"
11
+ ],
12
+ "detect": {
13
+ "pluginFileIds": [
14
+ "advanced-custom-fields/acf"
15
+ ],
16
+ "recordProperties": [
17
+ "acf",
18
+ "_acf_changed"
19
+ ],
20
+ "assetPathSlugs": [
21
+ "advanced-custom-fields"
22
+ ]
23
+ },
24
+ "entities": [
25
+ {
26
+ "entity": "field-values",
27
+ "channel": "core-embedded",
28
+ "embeddedIn": [
29
+ "/wp/v2/posts",
30
+ "/wp/v2/media",
31
+ "/wp/v2/categories",
32
+ "/wp/v2/tags",
33
+ "/wp/v2/users"
34
+ ],
35
+ "propertyPath": "acf",
36
+ "candidateTargetRefs": [],
37
+ "pitfalls": [
38
+ {
39
+ "code": "acf-key-rides-every-wp-v2-object-type",
40
+ "severity": "info",
41
+ "summary": "ACF registers a single REST field named `acf` per request, against whichever object sub type the request resolves to - post type, taxonomy or user. [VERIFIED IN PLUGIN SOURCE v6.8.7, includes/rest-api/class-acf-rest-api.php register_field(), 2026-08-16.] [VERIFIED LIVE 2026-08-16] the key is present on every sampled record of /wp/v2/posts, /wp/v2/pages, /wp/v2/media, /wp/v2/product, /wp/v2/podcast, /wp/v2/tribe_events, /wp/v2/categories and /wp/v2/users. embeddedIn lists the core routes; any plugin CPT the classifier accepts through wp.data.registered-type carries it too, so an extraction step must look for `acf` on every wp/v2 record it fetches rather than only on the listed routes. /wp/v2/pages is listed nowhere because pages are excluded from backend-data scope by wp.frontend.pages."
42
+ },
43
+ {
44
+ "code": "absent-from-woocommerce-rest",
45
+ "severity": "warning",
46
+ "summary": "[VERIFIED LIVE 2026-08-16] the `acf` key does NOT appear on any sampled /wc/v3/products or /wc/v3/products/categories record - ACF only extends the wp/v2 controllers. Custom field values on a WooCommerce product are therefore readable only through /wp/v2/product, which returns no commerce fields, so a product import that wants both must join the two by post id."
47
+ },
48
+ {
49
+ "code": "empty-array-means-no-groups-not-no-plugin",
50
+ "severity": "warning",
51
+ "summary": "[VERIFIED LIVE 2026-08-16] a site with no field groups defined returns `acf: []` on every sampled record - an empty ARRAY, not an object. Detection must treat presence of the key as the signal and must not require a truthy value; and a run that finds only empty acf keys should report 'ACF installed, no field data' rather than a failed read. [NEEDS-VERIFICATION on a site with real field groups: the populated shape (a {fieldName: value} object) and the per-field-type value shapes.]"
52
+ },
53
+ {
54
+ "code": "value-shapes-are-field-type-dependent",
55
+ "severity": "warning",
56
+ "summary": "ACF returns typed values, not strings: a relationship or post-object field returns post IDs (or embedded objects when ACF's rest_api_embed_links setting is on), an image/file field returns an attachment ID or an object, a repeater returns an array of row objects, a flexible-content field returns rows tagged with acf_fc_layout, and a taxonomy field returns term IDs. Every ID-bearing value must be remapped through the relevant crosswalk after its target exists, exactly like any other reference. A CMS collection column type cannot be chosen without knowing the field type, which is why field-group-definitions is a prerequisite rather than a nice-to-have. [DOCUMENTED - ACF field-type reference; not exercised live.]"
57
+ },
58
+ {
59
+ "code": "rest-visibility-is-opt-in-per-field-group",
60
+ "severity": "warning",
61
+ "summary": "The `acf` property only carries a group's fields when that field group has Show in REST API enabled, and the whole integration can be switched off site-wide (acf_get_setting('rest_api_enabled')). Accordion, tab and message field types are never exposed (show_in_rest = false on those classes). [VERIFIED IN PLUGIN SOURCE v6.8.7, includes/rest-api/class-acf-rest-api.php and includes/fields/class-acf-field-{accordion,tab,message}.php, 2026-08-16.] So an empty or partial acf object can mean 'not exposed' rather than 'not set', and the run cannot tell the two apart from REST alone - reconcile against the field-group definitions before reporting completeness."
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "entity": "field-group-definitions",
67
+ "channel": "export-file",
68
+ "candidateTargetRefs": [],
69
+ "pitfalls": [
70
+ {
71
+ "code": "acf-field-group-cpt-is-not-rest-visible",
72
+ "severity": "blocker",
73
+ "summary": "Field group definitions are stored as posts of the `acf-field-group` post type, registered with 'show_in_rest' => false. [VERIFIED IN PLUGIN SOURCE v6.8.7, includes/post-types/class-acf-field-group.php:104, 2026-08-16.] [VERIFIED LIVE 2026-08-16: acf-field-group is absent from /wp/v2/types, identical authenticated and unauthenticated, and GET /wp/v2/acf-field-group returns 404, as do acf-field, acf-post-type, acf-taxonomy and acf-ui-options-page.] There is no REST read path, authenticated or otherwise, so this entity is Blocked - recoverable (kind: user-file) until the user supplies an export."
74
+ },
75
+ {
76
+ "code": "the-export-the-user-must-produce",
77
+ "severity": "warning",
78
+ "summary": "ACF ships its own exporter - ACF > Tools > Export Field Groups, which emits a JSON file (or generates PHP) - and many themes keep the same JSON checked in under an acf-json/ directory. Either is the file to ask for. That JSON carries the field key, name, label, type, per-type settings (choices, sub_fields, layouts, return_format) and the location rules that say which post types the group applies to; the WXR export does NOT reliably carry it, because the definitions are posts plus their own acf-field child posts. Ask for the ACF JSON specifically, not for a WXR."
79
+ },
80
+ {
81
+ "code": "definitions-are-the-cms-schema",
82
+ "severity": "warning",
83
+ "summary": "This entity does not migrate as records - it is the input that decides the shape of the Wix CMS collection that field-values lands in: one column per ACF field, with the column type derived from the ACF field type, and one collection per (post type x field group) grouping. cms/collection is setup-config: the collection must exist before any item import, and creating it is not automated. Import ordering is therefore definitions (setup) -> owning records -> field values."
84
+ },
85
+ {
86
+ "code": "group-definitions-are-not-lost-if-unavailable",
87
+ "severity": "info",
88
+ "summary": "If the user cannot supply the export, the field VALUES are still fully readable from the `acf` key and can land in a CMS collection whose columns are inferred from the observed values. That is reduced fidelity - inferred types, no labels, no choice lists, repeaters flattened or stored as JSON - and it must be ledgered as such, but it is never a reason to drop the data."
89
+ }
90
+ ]
91
+ }
92
+ ],
93
+ "quirks": [
94
+ "Plugin file id is `advanced-custom-fields/acf` - the main-file basename is `acf`, not the directory name, and the /wp/v2/plugins id carries no .php suffix [VERIFIED LIVE 2026-08-16: active, version 6.8.7, textdomain acf]. Never construct dir/dir.php. ACF PRO is a separate directory (advanced-custom-fields-pro/acf) and would appear as its own row.",
95
+ "Storage model: two different ones in one plugin, which is why it has two entities. Field VALUES are ordinary post/term/user meta that ACF re-exposes as a computed REST property (`acf`), so they are REST-visible without being registered meta - channel core-embedded. Field GROUP DEFINITIONS are a post type deliberately hidden from REST - channel export-file. Reading the values without the definitions is possible but lossy; reading the definitions without a user-supplied file is impossible.",
96
+ "Registers NO REST namespace of its own [VERIFIED LIVE 2026-08-16: the site's REST index advertises no namespace such as acf/* or acf/v3]. ACF is a textbook route-less plugin: nothing about it appears in the REST index, and the only way to see it is the payload-key pass over sampled records - the 'record payload keys' tier, and the reason detection is split into two passes.",
97
+ "Enqueues no front-end asset [VERIFIED LIVE 2026-08-16: no wp-content/plugins/advanced-custom-fields path in the homepage or a post permalink], so assetPathSlugs will not fire and the fingerprinted tier cannot see ACF from public HTML. It is listed anyway because a theme that enqueues an ACF-provided script would expose it.",
98
+ "ACF also leaves a registered meta key `_acf_changed` on every post [VERIFIED LIVE 2026-08-16: present in the `meta` object of /wp/v2/posts, /wp/v2/pages, /wp/v2/product and /wp/v2/categories records, authenticated AND unauthenticated, value false]. It is an editor bookkeeping flag with no migration value, but it is a reliable secondary detection signal that survives when a site has zero field groups and every `acf` value is empty.",
99
+ "ACF's newer builders - ACF Post Types, ACF Taxonomies and ACF Options Pages - are stored as the acf-post-type / acf-taxonomy / acf-ui-options-page post types, all equally hidden from REST [VERIFIED LIVE 2026-08-16: all 404]. The custom post types they CREATE are normal registered types and are discovered by the classifier's wp.data.registered-type rule as usual, so their records are never missed; only the builder definitions are invisible. Options-page values are wp_options rows and are not readable at all."
100
+ ]
101
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "plugin": "back-in-stock-notifier-for-woocommerce",
4
+ "displayName": "Back In Stock Notifier for WooCommerce | WooCommerce Waitlist Pro",
5
+ "profileVersion": "2026-08",
6
+ "sourceOfTruth": "https://wordpress.org/plugins/back-in-stock-notifier-for-woocommerce/",
7
+ "distribution": "wordpress-org",
8
+ "capabilities": [
9
+ "commerce.back-in-stock-notifications"
10
+ ],
11
+ "detect": {
12
+ "pluginFileIds": [
13
+ "back-in-stock-notifier-for-woocommerce/cwginstocknotifier"
14
+ ],
15
+ "restNamespaces": [
16
+ "back-in-stock/v1",
17
+ "wc-instocknotifier/v3"
18
+ ],
19
+ "assetPathSlugs": [
20
+ "back-in-stock-notifier-for-woocommerce"
21
+ ]
22
+ },
23
+ "entities": [
24
+ {
25
+ "entity": "back-in-stock-subscriber",
26
+ "channel": "plugin-rest",
27
+ "route": "/wc-instocknotifier/v3/list_subscriber",
28
+ "recordKeyField": "id",
29
+ "requestMethod": "POST",
30
+ "requestBody": {
31
+ "p_ids": "$SAMPLED_IDS:/wc/v3/products",
32
+ "status": "cwg_subscribed"
33
+ },
34
+ "responseFragmentGroupSize": 4,
35
+ "candidateTargetRefs": [
36
+ "stores/back-in-stock-request"
37
+ ],
38
+ "pitfalls": [
39
+ {
40
+ "code": "two-namespaces-live-simultaneously",
41
+ "severity": "warning",
42
+ "summary": "[VERIFIED LIVE 2026-08-19] The installed build (v7.3.3, a paid/CodeCanyon-tier release) advertises BOTH `back-in-stock/v1` (new; only a GET namespace-self-description at `/subscriber` and a POST-only `/subscriber/create` with an undocumented body) AND the legacy `wc-instocknotifier/v3` namespace matching the free wordpress.org v5.6.1 codebase. Use the legacy namespace -- it is the one with a working read path."
43
+ },
44
+ {
45
+ "code": "list-endpoint-is-post-not-get",
46
+ "severity": "info",
47
+ "summary": "[VERIFIED LIVE 2026-08-19] The read/list endpoint is `POST /wc-instocknotifier/v3/list_subscriber` with a JSON body, not a GET collection route. This entity declares `requestMethod`/`requestBody` so `wp-discovery.js` samples it automatically like any other candidate -- no `--include-route` override needed, and no plugin-specific sampler code. The `$SAMPLED_IDS:/wc/v3/products` placeholder resolves to the product ids already sampled earlier in the same run; at discovery time this is only the small sample page (schema learning, not bulk extraction) -- `rp-import-codegen` must pass the FULL catalog id list at execution time, not rely on the discovery-time sample."
48
+ },
49
+ {
50
+ "code": "status-any-returns-nothing",
51
+ "severity": "blocker",
52
+ "summary": "[VERIFIED LIVE 2026-08-19] Passing `status: \"any\"` in the request body returns an empty array -- WordPress's `any` magic value excludes custom post statuses registered as excluded-from-search, which this plugin's statuses are. Pass the literal status string instead, e.g. `{\"p_ids\": [<all catalog product ids as strings>], \"status\": \"cwg_subscribed\"}`. `p_ids` uses a meta_query `IN` comparison, so an empty or omitted array also returns nothing -- pass the real product id list."
53
+ },
54
+ {
55
+ "code": "response-shape-is-flattened-and-buggy",
56
+ "severity": "info",
57
+ "summary": "[VERIFIED LIVE 2026-08-19, matches free v5.6.1 source `includes/class-rest-api.php` format_subscriber_data_schema()] The plugin's own multi-record response is malformed: each subscriber is emitted as 4 SEPARATE single-key array entries (`{id}`, `{last_modified_date}`, `{status}`, `{meta_data}`) in sequence, not one merged object. This entity declares `responseFragmentGroupSize: 4` so `wp-discovery.js` reassembles the flat array back into one record per subscriber automatically -- generically across any entity, no plugin-specific sampler code. Record count = flat array length / 4."
58
+ },
59
+ {
60
+ "code": "storage-is-a-custom-post-type",
61
+ "severity": "info",
62
+ "summary": "[DOCUMENTED, free v5.6.1 source `includes/class-api.php`] Each subscriber is a `cwginstocknotifier` custom post (not `show_in_rest`, invisible to `/wp/v2/types`). post_status encodes state: `cwg_subscribed` / `cwg_unsubscribed` / `cwg_doubleoptin` / `cwg_mailsent` / `cwg_mailnotsent` -- only `cwg_subscribed` rows are live/current signups worth importing. Meta keys: `cwginstock_subscriber_email`, `cwginstock_pid` (product-or-variation id used for matching), `cwginstock_product_id`, `cwginstock_variation_id`, `cwginstock_subscriber_name`, `cwginstock_subscriber_phone`, `cwginstock_custom_quantity`, `cwginstock_user_id`, `cwginstock_created_via`."
63
+ },
64
+ {
65
+ "code": "write-endpoint-also-exists-and-was-used-for-seed-data",
66
+ "severity": "info",
67
+ "summary": "[VERIFIED LIVE 2026-08-19] `POST /wc-instocknotifier/v3/create_subscriber` accepts and creates real subscriber records. Required fields: `subscriber_name`, `email`, `product_id`, `status`, `subscriber_phone`, `custom_quantity`; optional `variation_id`. Duplicate (email, pid) pairs are rejected 403 by the plugin's own dedup, not a bug to work around."
68
+ },
69
+ {
70
+ "code": "no-admin-csv-export-on-this-site",
71
+ "severity": "info",
72
+ "summary": "The plugin ships an admin UI at wp-admin -> Instock Notifier -> All Subscribers, but its one-click CSV export is a SEPARATE paid add-on, not part of the base plugin (checked 2026-08-19) -- do not assume the Discount-Rules-style admin-export escape path is available without checking first."
73
+ }
74
+ ]
75
+ }
76
+ ],
77
+ "quirks": [
78
+ "Vendor: CodeWooGeek (`codewoogeek`). Free tier on wordpress.org tops out at v5.6.1 (namespace `wc-instocknotifier/v3`); the CodeCanyon/paid tier (verified here at v7.3.3) additionally registers a `back-in-stock/v1` namespace but keeps the legacy namespace and its REST controller working unchanged -- confirmed by calling both live against the same install.",
79
+ "wp-admin menu: **Instock Notifier -> Settings** / **Instock Notifier -> All Subscribers** (left sidebar top-level menu, not under WooCommerce)."
80
+ ]
81
+ }