@wix/agent-skills 1.35.1 → 1.36.1
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.
- package/package.json +8 -3
- package/skills/wix-app/references/CODE_QUALITY.md +1 -1
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +27 -29
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +1 -1
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +26 -25
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +12 -42
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +9 -20
- package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +5 -4
- package/skills/wix-app/references/editor-react-component/PARTS.md +1 -1
- package/skills/wix-app/references/editor-react-component/PROPS-VS-CSS.md +1 -1
- package/skills/wix-app/references/editor-react-component/VECTOR-ART.md +95 -0
- package/skills/wix-app/references/editor-react-component/VISUAL-QUALITY.md +39 -0
- package/skills/wix-docs/references/CALLING.md +1 -1
- package/skills/wix-headless-kit/guides/api-run.md +1 -1
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-headless-templates/blog/seed/seed-blog.mjs +1 -1
- package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +0 -1
- package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +1 -1
- package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +0 -1
- package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +1 -1
- package/skills/wix-headless-templates/donations/rest/campaigns.ts +0 -1
- package/skills/wix-headless-templates/donations/rest/donate.ts +1 -1
- package/skills/wix-headless-templates/events/seed/seed-events.mjs +1 -1
- package/skills/wix-headless-templates/faq/INSTRUCTIONS.md +1 -1
- package/skills/wix-headless-templates/faq/app/wix/faq/faq.ts +2 -2
- package/skills/wix-headless-templates/faq/project/src/wix/faq/faq.ts +2 -2
- package/skills/wix-headless-templates/faq/rest/faq.ts +2 -2
- package/skills/wix-headless-templates/faq/seed/SEED.md +1 -1
- package/skills/wix-headless-templates/faq/seed/read-site.mjs +1 -1
- package/skills/wix-headless-templates/faq/seed/seed-faq.mjs +5 -5
- package/skills/wix-headless-templates/forms/app/wix/forms/forms.ts +2 -2
- package/skills/wix-headless-templates/forms/app/wix/forms/submissions.ts +2 -2
- package/skills/wix-headless-templates/forms/project/src/wix/forms/forms.ts +2 -2
- package/skills/wix-headless-templates/forms/project/src/wix/forms/submissions.ts +2 -2
- package/skills/wix-headless-templates/members/seed/read-site.mjs +1 -1
- package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-access.ts +1 -1
- package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-access.ts +1 -1
- package/skills/wix-headless-templates/pricing-plans/rest/plan-access.ts +1 -1
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/menu.ts +0 -1
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/menu.ts +0 -1
- package/skills/wix-headless-templates/restaurants/rest/menu.ts +0 -1
- package/skills/wix-headless-templates/shared/rest/client.ts +1 -1
- package/skills/wix-headless-templates/shared/seed/site.mjs +2 -1
- package/skills/wix-manage/SKILL.md +3 -3
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +78 -1
- package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +11 -11
- package/skills/wix-manage/references/google-ads/get-campaign-suggestions.md +0 -1
- package/skills/wix-manage/references/google-ads/install-and-create-account.md +0 -1
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +20 -51
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +4 -4
- package/skills/wix-manage/references/rich-content/ricos-converter-service.md +1 -1
- package/skills/wix-base44-connector/SKILL.md +0 -437
- package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +0 -78
- package/skills/wix-base44-connector/scripts/utils.cjs +0 -466
- package/skills/wix-export/SKILL.md +0 -83
- package/skills/wix-harmony-editor/.publish-manifest.json +0 -8
- package/skills/wix-harmony-editor/COPY-SITE.md +0 -494
- package/skills/wix-harmony-editor/SKILL.md +0 -317
- package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +0 -249
- package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +0 -225
- package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +0 -89
- package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +0 -76
- package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +0 -212
- package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +0 -44
- package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +0 -45
- package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +0 -53
- package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +0 -76
- package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +0 -16
- package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +0 -150
- package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +0 -27
- package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +0 -56
- package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +0 -211
- package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +0 -29
- package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +0 -92
- package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +0 -56
- package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +0 -73
- package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +0 -67
- package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +0 -102
- package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +0 -40
- package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +0 -191
- package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +0 -61
- package/skills/wix-harmony-editor/scripts/launch.sh +0 -359
- package/skills/wix-headless/SKILL.md +0 -151
- package/skills/wix-headless/references/AI_FEATURES.md +0 -178
- package/skills/wix-headless/references/CAPABILITIES.md +0 -117
- package/skills/wix-headless/references/CONTENT.md +0 -36
- package/skills/wix-headless/references/DESIGN.md +0 -55
- package/skills/wix-headless/references/DISCOVERY.md +0 -80
- package/skills/wix-headless/references/DOC_DISCOVERY.md +0 -43
- package/skills/wix-headless/references/FEEDBACK.md +0 -129
- package/skills/wix-headless/references/IMAGE_GENERATION.md +0 -80
- package/skills/wix-headless/references/SDK_HANDOFF.md +0 -108
- package/skills/wix-headless/references/SEED.md +0 -74
- package/skills/wix-headless/references/SETUP.md +0 -60
- package/skills/wix-headless/references/astro.md +0 -98
- package/skills/wix-headless/references/inline-recipes/experience-donations.md +0 -102
- package/skills/wix-headless/references/inline-recipes/experience-store.md +0 -49
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +0 -196
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +0 -590
- package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +0 -279
- package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +0 -163
- package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +0 -146
- package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +0 -203
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +0 -696
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +0 -124
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +0 -160
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +0 -118
- package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +0 -132
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +0 -126
- package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +0 -254
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +0 -191
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +0 -213
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +0 -161
- package/skills/wix-headless/references/inline-recipes/setup-blog.md +0 -175
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +0 -232
- package/skills/wix-headless/references/inline-recipes/setup-cms.md +0 -200
- package/skills/wix-headless/references/inline-recipes/setup-donations.md +0 -15
- package/skills/wix-headless/references/inline-recipes/setup-events.md +0 -196
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +0 -288
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +0 -214
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +0 -155
- package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +0 -229
- package/skills/wix-headless/references/inline-recipes/setup-rentals.md +0 -254
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +0 -73
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +0 -197
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +0 -136
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +0 -152
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +0 -71
- package/skills/wix-headless/references/managed/CONNECT.md +0 -74
- package/skills/wix-headless/references/managed/CREATE.md +0 -149
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +0 -104
- package/skills/wix-headless/references/non-astro.md +0 -59
- package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +0 -22
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +0 -15
- package/skills/wix-headless/references/stripe/AUTHENTICATION.md +0 -55
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +0 -71
- package/skills/wix-headless/scripts/bootstrap.mjs +0 -156
- package/skills/wix-headless-replatform/.publish-manifest.json +0 -8
- package/skills/wix-headless-replatform/SKILL.md +0 -116
- package/skills/wix-headless-replatform/agents/openai.yaml +0 -6
- package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +0 -43
- package/skills/wix-headless-replatform/references/extraction-schema.md +0 -187
- package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +0 -137
- package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +0 -41
- package/skills/wix-headless-replatform/references/output-contract.md +0 -93
- package/skills/wix-headless-replatform/references/post-build-gap-contract.md +0 -125
- package/skills/wix-headless-replatform/references/qa-checklist.md +0 -83
- package/skills/wix-headless-replatform/references/safety.md +0 -19
- package/skills/wix-headless-replatform/references/ui-normalization-contract.md +0 -70
- package/skills/wix-headless-replatform/references/workflow.md +0 -157
- package/skills/wix-headless-replatform/registry/README.md +0 -20
- package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +0 -28
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +0 -54
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +0 -60
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +0 -48
- package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +0 -21
- package/skills/wix-headless-replatform/registry/registry.json +0 -36
- package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +0 -32
- package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +0 -62
- package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +0 -64
- package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +0 -42
- package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +0 -73
- package/skills/wix-headless-replatform/schemas/build-plan.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/candidate.schema.json +0 -19
- package/skills/wix-headless-replatform/schemas/common.schema.json +0 -33
- package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/decision-request.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +0 -28
- package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +0 -34
- package/skills/wix-headless-replatform/schemas/final-report.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/foundation.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/metadata.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +0 -17
- package/skills/wix-headless-replatform/schemas/page-capture.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +0 -33
- package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/unit.schema.json +0 -40
- package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +0 -844
- package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +0 -163
- package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +0 -42
- package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +0 -228
- package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +0 -87
- package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +0 -505
- package/skills/wix-headless-replatform/scripts/discover-urls.mjs +0 -142
- package/skills/wix-headless-replatform/scripts/extract-assets.mjs +0 -140
- package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +0 -637
- package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +0 -1903
- package/skills/wix-headless-replatform/scripts/extract-page.mjs +0 -2461
- package/skills/wix-headless-replatform/scripts/extract-seo.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +0 -63
- package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +0 -126
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +0 -180
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +0 -98
- package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +0 -103
- package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +0 -176
- package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +0 -261
- package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +0 -342
- package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +0 -140
- package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +0 -22
- package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +0 -143
- package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +0 -288
- package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +0 -266
- package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +0 -111
- package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +0 -570
- package/skills/wix-headless-replatform/scripts/lib/common.mjs +0 -329
- package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +0 -121
- package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +0 -282
- package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +0 -61
- package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +0 -374
- package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +0 -243
- package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +0 -1139
- package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +0 -326
- package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +0 -184
- package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +0 -396
- package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +0 -168
- package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +0 -10
- package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +0 -194
- package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +0 -348
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +0 -141
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +0 -43
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +0 -18
- package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +0 -64
- package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +0 -31
- package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +0 -358
- package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +0 -39
- package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +0 -107
- package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +0 -96
- package/skills/wix-headless-replatform/scripts/site-clone.mjs +0 -658
- package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +0 -29
- package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +0 -669
- package/skills/wix-headless-replatform/scripts/visual-qa.mjs +0 -370
- package/skills/wix-import/SKILL.md +0 -90
- package/skills/wix-replatform/.publish-manifest.json +0 -8
- package/skills/wix-replatform/CLI.md +0 -162
- package/skills/wix-replatform/README.md +0 -52
- package/skills/wix-replatform/SKILL.md +0 -238
- package/skills/wix-replatform/console/account.css +0 -1
- package/skills/wix-replatform/console/app.css +0 -1
- package/skills/wix-replatform/console/app.js +0 -117
- package/skills/wix-replatform/console/index.html +0 -4
- package/skills/wix-replatform/console/json.css +0 -11
- package/skills/wix-replatform/lib/agent-adapters/index.js +0 -71
- package/skills/wix-replatform/lib/app-page-routing.js +0 -75
- package/skills/wix-replatform/lib/artifact-freshness.js +0 -225
- package/skills/wix-replatform/lib/blocked-data-requests.js +0 -427
- package/skills/wix-replatform/lib/census-reconciliation.js +0 -426
- package/skills/wix-replatform/lib/completion-report.js +0 -1580
- package/skills/wix-replatform/lib/config-env.js +0 -133
- package/skills/wix-replatform/lib/confirmed-pictures.js +0 -212
- package/skills/wix-replatform/lib/dependency-readiness.js +0 -423
- package/skills/wix-replatform/lib/dependency-recovery.js +0 -21
- package/skills/wix-replatform/lib/destination-choice.js +0 -163
- package/skills/wix-replatform/lib/destination-handoff.js +0 -62
- package/skills/wix-replatform/lib/destination-http.js +0 -81
- package/skills/wix-replatform/lib/destination-route.js +0 -98
- package/skills/wix-replatform/lib/destination.js +0 -919
- package/skills/wix-replatform/lib/discovered-census.js +0 -231
- package/skills/wix-replatform/lib/discovered-set-status.js +0 -255
- package/skills/wix-replatform/lib/document-url-guard.js +0 -203
- package/skills/wix-replatform/lib/entity-qa-attestation.js +0 -339
- package/skills/wix-replatform/lib/entity-verification.js +0 -18
- package/skills/wix-replatform/lib/execution-capability.js +0 -120
- package/skills/wix-replatform/lib/execution-log.js +0 -170
- package/skills/wix-replatform/lib/execution-manifest.js +0 -203
- package/skills/wix-replatform/lib/execution-state.js +0 -195
- package/skills/wix-replatform/lib/expectations-ledger.js +0 -96
- package/skills/wix-replatform/lib/generated-plugin-handoff.js +0 -140
- package/skills/wix-replatform/lib/import-readiness-contract.js +0 -23
- package/skills/wix-replatform/lib/import-recovery.js +0 -1107
- package/skills/wix-replatform/lib/imported-redirect-targets.js +0 -608
- package/skills/wix-replatform/lib/internal-link-reconciliation.js +0 -166
- package/skills/wix-replatform/lib/link-audit.js +0 -173
- package/skills/wix-replatform/lib/link-census.js +0 -194
- package/skills/wix-replatform/lib/link-plan.js +0 -148
- package/skills/wix-replatform/lib/link-verification.js +0 -274
- package/skills/wix-replatform/lib/link-write-journal.js +0 -42
- package/skills/wix-replatform/lib/local-state.js +0 -1481
- package/skills/wix-replatform/lib/member-completion.js +0 -658
- package/skills/wix-replatform/lib/member-crosswalk.js +0 -69
- package/skills/wix-replatform/lib/member-outcome-registry.js +0 -265
- package/skills/wix-replatform/lib/migration-completion.js +0 -311
- package/skills/wix-replatform/lib/operator-identity.js +0 -47
- package/skills/wix-replatform/lib/orchestration-decisions.js +0 -248
- package/skills/wix-replatform/lib/orchestration-preflight.js +0 -525
- package/skills/wix-replatform/lib/orchestration-router.js +0 -698
- package/skills/wix-replatform/lib/orchestration-state.js +0 -631
- package/skills/wix-replatform/lib/order-reference-readiness.js +0 -30
- package/skills/wix-replatform/lib/payments-outcome-registry.js +0 -200
- package/skills/wix-replatform/lib/plugin-cms-fallback.js +0 -618
- package/skills/wix-replatform/lib/preservation-approval-stamp.js +0 -54
- package/skills/wix-replatform/lib/product-media-deferral.js +0 -96
- package/skills/wix-replatform/lib/progress-log.js +0 -240
- package/skills/wix-replatform/lib/progress-log.sh +0 -140
- package/skills/wix-replatform/lib/read-back-approval.js +0 -184
- package/skills/wix-replatform/lib/read-back-comparison.js +0 -136
- package/skills/wix-replatform/lib/read-back-contract.js +0 -243
- package/skills/wix-replatform/lib/read-back-extract.js +0 -118
- package/skills/wix-replatform/lib/read-back-gate.js +0 -734
- package/skills/wix-replatform/lib/read-back-reads.js +0 -94
- package/skills/wix-replatform/lib/read-back-state.js +0 -107
- package/skills/wix-replatform/lib/read-back-summary.js +0 -81
- package/skills/wix-replatform/lib/rerun-conflicts.js +0 -334
- package/skills/wix-replatform/lib/run-controller.js +0 -401
- package/skills/wix-replatform/lib/seo-outcome-registry.js +0 -45
- package/skills/wix-replatform/lib/setup-verification.js +0 -148
- package/skills/wix-replatform/lib/source-access.js +0 -231
- package/skills/wix-replatform/lib/source-coverage.js +0 -1130
- package/skills/wix-replatform/lib/source-secrets.js +0 -277
- package/skills/wix-replatform/lib/structured-link-patch.js +0 -59
- package/skills/wix-replatform/lib/task-state.js +0 -110
- package/skills/wix-replatform/lib/url-preservation-report.js +0 -319
- package/skills/wix-replatform/lib/url-preservation-state.js +0 -739
- package/skills/wix-replatform/lib/url-redirect-plan.js +0 -728
- package/skills/wix-replatform/lib/url-verification.js +0 -315
- package/skills/wix-replatform/lib/user-action-effects.js +0 -42
- package/skills/wix-replatform/lib/user-actions.js +0 -264
- package/skills/wix-replatform/lib/website-handoff.js +0 -1220
- package/skills/wix-replatform/lib/wix-client-callers.js +0 -54
- package/skills/wix-replatform/lib/wix-dashboard-url.js +0 -35
- package/skills/wix-replatform/lib/write-verification-state.js +0 -92
- package/skills/wix-replatform/lib/write-verification.js +0 -274
- package/skills/wix-replatform/resources/rp-destination/SKILL.md +0 -137
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +0 -357
- package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +0 -47
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +0 -1369
- package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +0 -70
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +0 -482
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +0 -442
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +0 -64
- package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +0 -112
- package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +0 -143
- package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +0 -244
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +0 -3158
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +0 -947
- package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +0 -217
- package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +0 -303
- package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +0 -88
- package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +0 -148
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +0 -378
- package/skills/wix-replatform/resources/rp-preflight/SKILL.md +0 -40
- package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +0 -55
- package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +0 -60
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +0 -89
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +0 -36
- package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +0 -123
- package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +0 -124
- package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +0 -522
- package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +0 -56
- package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +0 -91
- package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +0 -255
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +0 -253
- package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +0 -44
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +0 -481
- package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +0 -136
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +0 -310
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +0 -1081
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +0 -618
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +0 -969
- package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +0 -196
- package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +0 -66
- package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +0 -60
- package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +0 -95
- package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +0 -82
- package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +0 -66
- package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +0 -153
- package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +0 -394
- package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +0 -200
- package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +0 -34
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +0 -44
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +0 -1470
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +0 -446
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +0 -474
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +0 -879
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +0 -426
- package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +0 -24
- package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +0 -18
- package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +0 -40
- package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +0 -76
- package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +0 -51
- package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +0 -35
- package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +0 -20
- package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +0 -18
- package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +0 -31
- package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +0 -21
- package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +0 -21
- package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +0 -30
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +0 -150
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +0 -36
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +0 -48
- package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +0 -20
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +0 -6
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +0 -12
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +0 -6
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +0 -73
- package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +0 -693
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +0 -283
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +0 -191
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +0 -115
- package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +0 -201
- package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +0 -146
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +0 -970
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +0 -73
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +0 -115
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +0 -91
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +0 -440
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +0 -125
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +0 -252
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +0 -183
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +0 -333
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +0 -426
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +0 -400
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +0 -633
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +0 -1127
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +0 -194
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +0 -100
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +0 -157
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +0 -234
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +0 -101
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +0 -755
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +0 -1074
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +0 -149
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +0 -25
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +0 -444
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +0 -186
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +0 -1422
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +0 -343
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +0 -680
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +0 -272
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +0 -373
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +0 -101
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +0 -81
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +0 -128
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +0 -18
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +0 -104
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +0 -44
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +0 -49
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +0 -94
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +0 -863
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +0 -52
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +0 -161
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +0 -180
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +0 -286
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +0 -79
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +0 -120
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +0 -128
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +0 -88
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +0 -80
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +0 -46
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +0 -55
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +0 -99
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +0 -55
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +0 -160
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +0 -81
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +0 -60
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +0 -74
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +0 -75
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +0 -60
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +0 -44
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +0 -57
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +0 -141
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +0 -54
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +0 -158
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +0 -97
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +0 -86
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +0 -90
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +0 -51
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +0 -103
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +0 -2409
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +0 -273
- package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +0 -11
- package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +0 -71
- package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +0 -13
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +0 -1046
- package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +0 -36
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +0 -57
- package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +0 -322
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +0 -70
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +0 -29
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +0 -83
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +0 -95
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +0 -66
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +0 -332
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +0 -181
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +0 -130
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +0 -180
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +0 -161
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +0 -25
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +0 -67
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +0 -204
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +0 -27
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +0 -275
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +0 -105
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +0 -77
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +0 -306
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +0 -44
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +0 -171
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +0 -182
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +0 -129
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +0 -192
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +0 -123
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +0 -85
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +0 -112
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +0 -191
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +0 -164
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +0 -462
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +0 -122
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +0 -98
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +0 -86
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +0 -128
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +0 -38
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +0 -107
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +0 -89
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +0 -118
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +0 -93
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +0 -86
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +0 -56
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +0 -121
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +0 -134
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +0 -50
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +0 -87
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +0 -130
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +0 -1418
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +0 -24
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +0 -23
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +0 -82
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +0 -77
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +0 -205
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +0 -46
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +0 -137
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +0 -133
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +0 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +0 -36
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +0 -67
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +0 -72
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +0 -74
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +0 -69
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +0 -61
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +0 -109
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +0 -148
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +0 -91
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +0 -79
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +0 -32
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +0 -49
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +0 -103
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +0 -203
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +0 -42
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +0 -81
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +0 -241
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +0 -118
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +0 -79
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +0 -221
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +0 -84
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +0 -178
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +0 -87
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +0 -106
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +0 -94
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +0 -113
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +0 -65
- package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +0 -165
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +0 -60
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +0 -201
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +0 -306
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +0 -229
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +0 -55
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +0 -715
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +0 -567
- package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +0 -194
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +0 -133
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +0 -150
- package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +0 -491
- package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +0 -104
- package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +0 -673
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +0 -835
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +0 -566
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +0 -249
- package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +0 -260
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +0 -63
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +0 -187
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +0 -1027
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +0 -90
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +0 -420
- package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +0 -177
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +0 -151
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +0 -723
- package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +0 -353
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +0 -1437
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +0 -354
- package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +0 -134
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +0 -221
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +0 -248
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +0 -321
- package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +0 -231
- package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +0 -28
- package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +0 -14
- package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +0 -34
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +0 -388
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +0 -255
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +0 -6041
- package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +0 -3
- package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +0 -150
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +0 -69
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +0 -100
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +0 -112
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +0 -484
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +0 -318
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +0 -2831
- package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +0 -318
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +0 -83
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +0 -243
- package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +0 -94
- package/skills/wix-replatform/scripts/artifact-freshness.js +0 -76
- package/skills/wix-replatform/scripts/census-reconciliation.js +0 -25
- package/skills/wix-replatform/scripts/cms-fallback.js +0 -89
- package/skills/wix-replatform/scripts/discovered-census.js +0 -26
- package/skills/wix-replatform/scripts/discovered-set-status.js +0 -33
- package/skills/wix-replatform/scripts/entity-qa-attestation.js +0 -130
- package/skills/wix-replatform/scripts/execution-health-check.js +0 -415
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +0 -43
- package/skills/wix-replatform/scripts/execution-state-prepare.js +0 -128
- package/skills/wix-replatform/scripts/expectations-ledger.js +0 -44
- package/skills/wix-replatform/scripts/import-contract-verify.js +0 -183
- package/skills/wix-replatform/scripts/internal-link-audit.js +0 -90
- package/skills/wix-replatform/scripts/item-seo-tags-verify.js +0 -205
- package/skills/wix-replatform/scripts/migration-completion.js +0 -76
- package/skills/wix-replatform/scripts/orchestration-preflight.js +0 -67
- package/skills/wix-replatform/scripts/orchestration-route.js +0 -77
- package/skills/wix-replatform/scripts/orchestration-state.js +0 -381
- package/skills/wix-replatform/scripts/read-back-gate.js +0 -175
- package/skills/wix-replatform/scripts/replatform-console.js +0 -146
- package/skills/wix-replatform/scripts/replatform.js +0 -436
- package/skills/wix-replatform/scripts/source-secrets.js +0 -77
- package/skills/wix-replatform/scripts/url-redirects.js +0 -286
- package/skills/wix-replatform/scripts/user-action.js +0 -58
- package/skills/wix-replatform/scripts/website-handoff-generate.js +0 -64
- package/skills/wix-replatform/scripts/wix-dashboard-url.js +0 -54
- package/skills/wix-replatform/scripts/wix-destination.js +0 -143
- package/skills/wix-replatform/scripts/wix-headless-scaffold.js +0 -762
- package/skills/wix-vibe-headless/SKILL.md +0 -183
- package/skills/wix-vibe-headless/install/deploy.cjs +0 -221
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +0 -35
- package/skills/wix-vibe-headless/platforms/README.md +0 -26
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed-with-install.md +0 -127
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +0 -121
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +0 -87
- package/skills/wix-vibe-headless/platforms/base44.md +0 -148
- package/skills/wix-vibe-headless/platforms/generic.md +0 -132
- package/skills/wix-vibe-headless/references/_shared/nav/nav.tanstack.js +0 -30
- package/skills/wix-vibe-headless/references/_shared/routing.md +0 -86
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +0 -270
- package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +0 -43
- package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +0 -25
- package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +0 -35
- package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +0 -38
- package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +0 -40
- package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +0 -54
- package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +0 -65
- package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +0 -50
- package/skills/wix-vibe-headless/references/blog/app/rest/wix-blog.js +0 -217
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +0 -99
- package/skills/wix-vibe-headless/references/blog/seed/seed-blog.cjs +0 -269
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +0 -342
- package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +0 -65
- package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +0 -67
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +0 -47
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +0 -13
- package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +0 -126
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +0 -128
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +0 -110
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +0 -58
- package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +0 -95
- package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +0 -94
- package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +0 -89
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +0 -148
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +0 -250
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +0 -300
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +0 -154
- package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.cjs +0 -333
- package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.cjs +0 -267
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +0 -178
- package/skills/wix-vibe-headless/references/cms/app/collection.config.js +0 -31
- package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +0 -18
- package/skills/wix-vibe-headless/references/cms/app/rest/wix-cms.js +0 -231
- package/skills/wix-vibe-headless/references/cms/seed/SEED.md +0 -145
- package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +0 -88
- package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +0 -112
- package/skills/wix-vibe-headless/references/donations/seed/SEED.md +0 -11
- package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +0 -258
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +0 -267
- package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +0 -23
- package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +0 -43
- package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +0 -13
- package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +0 -29
- package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +0 -57
- package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +0 -78
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +0 -27
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +0 -54
- package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +0 -40
- package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +0 -81
- package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +0 -48
- package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +0 -36
- package/skills/wix-vibe-headless/references/events/app/rest/wix-events-browse.js +0 -136
- package/skills/wix-vibe-headless/references/events/app/rest/wix-events-registration.js +0 -187
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +0 -103
- package/skills/wix-vibe-headless/references/events/seed/seed-events.cjs +0 -251
- package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +0 -487
- package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +0 -425
- package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +0 -187
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +0 -238
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +0 -108
- package/skills/wix-vibe-headless/references/forms/seed/SEED.md +0 -1836
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +0 -328
- package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +0 -101
- package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +0 -33
- package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +0 -21
- package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +0 -29
- package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +0 -54
- package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +0 -77
- package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +0 -36
- package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +0 -32
- package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +0 -35
- package/skills/wix-vibe-headless/references/members/app/rest/wix-members-auth.js +0 -390
- package/skills/wix-vibe-headless/references/members/install/Register.jsx +0 -22
- package/skills/wix-vibe-headless/references/members/seed/SEED.md +0 -21
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +0 -270
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +0 -31
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +0 -39
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +0 -29
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +0 -35
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +0 -27
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +0 -25
- package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +0 -39
- package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +0 -27
- package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +0 -60
- package/skills/wix-vibe-headless/references/portfolio/app/rest/wix-portfolio.js +0 -223
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +0 -90
- package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.cjs +0 -236
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +0 -280
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +0 -35
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +0 -48
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +0 -16
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +0 -35
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +0 -25
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +0 -28
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +0 -30
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +0 -30
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +0 -53
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +0 -28
- package/skills/wix-vibe-headless/references/pricing-plans/app/rest/wix-pricing-plans.js +0 -157
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +0 -82
- package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.cjs +0 -251
- package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +0 -13
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +0 -290
- package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +0 -81
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +0 -71
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +0 -43
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +0 -21
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +0 -72
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +0 -66
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +0 -32
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +0 -73
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +0 -28
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +0 -102
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-menu.js +0 -224
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +0 -218
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-reservations.js +0 -107
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +0 -176
- package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.cjs +0 -452
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +0 -56
- package/skills/wix-vibe-headless/references/shared/app/lib/nav.js +0 -9
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +0 -185
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +0 -8
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +0 -471
- package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +0 -20
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +0 -167
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +0 -83
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductCard.js +0 -104
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +0 -163
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +0 -83
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useVariantOptions.js +0 -76
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +0 -64
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +0 -176
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +0 -218
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +0 -174
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.cjs +0 -546
|
@@ -1,1369 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: rp-execute-import
|
|
3
|
-
description: >-
|
|
4
|
-
Runs the generated extract/import pipeline and records execution results. Use when setup
|
|
5
|
-
and codegen are complete and the user has approved the execution plan.
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# rp-execute-import
|
|
9
|
-
|
|
10
|
-
Execute the generated migration pipeline and capture import results.
|
|
11
|
-
|
|
12
|
-
## Purpose
|
|
13
|
-
|
|
14
|
-
This skill runs the generated extract/import pipeline for the active project once setup and code generation are complete.
|
|
15
|
-
|
|
16
|
-
## Required inputs
|
|
17
|
-
|
|
18
|
-
- generated code under `migrations/<project>/src/`
|
|
19
|
-
- `migrations/<project>/execution/execution-manifest.json`
|
|
20
|
-
- `migrations/<project>/execution/llm-handoff.json`
|
|
21
|
-
- `migrations/<project>/execution/review/import-plan.md`
|
|
22
|
-
- `migrations/<project>/execution/review/code-safety-review.md` when `SAFE_MODE=true` or
|
|
23
|
-
`DRY_RUN=true`
|
|
24
|
-
- `migrations/<project>/setup/setup-verification.json`
|
|
25
|
-
|
|
26
|
-
## Preconditions
|
|
27
|
-
|
|
28
|
-
Do not proceed until:
|
|
29
|
-
|
|
30
|
-
- setup verification shows required items are passed or accepted; an unrecovered blocker
|
|
31
|
-
halts to needs-user
|
|
32
|
-
- reader, transform, and writer code exist for the intended entities
|
|
33
|
-
- execution artifacts define batching, retries, checkpoints, and write order clearly
|
|
34
|
-
- when `SAFE_MODE=true` or `DRY_RUN=true`, the post-codegen code-safety review exists and
|
|
35
|
-
has been accepted before execution approval is sought
|
|
36
|
-
- the **execution plan report has been presented and the user has accepted it** (see
|
|
37
|
-
below). In explicit user-requested `1-click mode` (`automationMode=one_click`,
|
|
38
|
-
`source=user`), the same report is still required, but it is recorded as accepted by the
|
|
39
|
-
agent once all blockers/gaps are surfaced and no unresolved hard stop remains.
|
|
40
|
-
|
|
41
|
-
Prefer the machine-readable execution artifacts above. `execution/review/import-plan.md`
|
|
42
|
-
is a human-facing review artifact, not the primary execution contract.
|
|
43
|
-
|
|
44
|
-
Before live import and again before final reporting, validate
|
|
45
|
-
`execution/review/import-plan.freshness.json` with the deterministic freshness helper:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
node skills/wix-replatform/scripts/artifact-freshness.js check migrations/<project> \
|
|
49
|
-
--domains-dir skills/wix-replatform/resources/rp-target-wix/domains \
|
|
50
|
-
--delta execution/review/import-plan-delta.md
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
If the check is stale, do not silently continue from the old approval text. Regenerate
|
|
54
|
-
`execution/review/import-plan.md` or append and present
|
|
55
|
-
`execution/review/import-plan-delta.md`; completion reports must reference the latest
|
|
56
|
-
accepted plan or delta.
|
|
57
|
-
|
|
58
|
-
## Execution plan & user acceptance (required gate)
|
|
59
|
-
|
|
60
|
-
This gate precedes **all** writes to the user's site — both `rp-execute-setup`
|
|
61
|
-
provisioning and this import. Before writing anything, produce a human-readable
|
|
62
|
-
**execution plan report** and obtain explicit user acceptance. Do not write anything until
|
|
63
|
-
the user accepts. The report must show:
|
|
64
|
-
|
|
65
|
-
- **Setup changes to be made first:** apps to install (Blog / Members / Wix-Data enabler),
|
|
66
|
-
Wix Data enablement, and collections to create — so the user sees the site changes, not
|
|
67
|
-
just the content writes.
|
|
68
|
-
- **What will be imported and where:** each source entity → its Wix target (app or
|
|
69
|
-
collection) with record counts — e.g. posts → Wix Blog (1088); episodes →
|
|
70
|
-
`PodcastEpisodes` (86); categories/tags → Blog taxonomies; media → Media Manager (~1499).
|
|
71
|
-
Make media reporting explicit:
|
|
72
|
-
- referenced media imported through entity-native background ingestion
|
|
73
|
-
- referenced media imported through Media Manager first
|
|
74
|
-
- unattached media skipped by default unless explicitly in scope
|
|
75
|
-
- **What will NOT migrate cleanly / needs manual action:** the lossy and blocked items,
|
|
76
|
-
drawn from the mapping plan's faithfulness ledger and any `setup/setup-verification.json` items
|
|
77
|
-
still manual or blocked — e.g. category hierarchy flattened, comments anonymized,
|
|
78
|
-
drafts absent without auth, storage-plan upgrade required. **This must also include any
|
|
79
|
-
target with no verified Wix primitive** — state whether it falls back to a generic CMS
|
|
80
|
-
collection, to an `unverified`/best-effort runtime-derived call, or is skipped. Nothing
|
|
81
|
-
unverified or lossy may be written without first appearing here for consent.
|
|
82
|
-
Coupons follow the same native-first rule as other native Wix entities: prefer native
|
|
83
|
-
Wix Coupons, and mention CMS fallback only for truly unsupported coupon semantics.
|
|
84
|
-
- **Always state the analytics-data exclusion explicitly.** Historical analytics data —
|
|
85
|
-
traffic / visitor stats accumulated on the source — is **out of scope** and is **not**
|
|
86
|
-
imported (see "Out of scope" below). Call this out in the plan so the user knows before
|
|
87
|
-
accepting that analytics data will not migrate; do not let it pass silently.
|
|
88
|
-
- **Order & idempotency:** the write order and how re-runs dedupe. Be explicit that
|
|
89
|
-
source IDs are the stable migration key, while many native Wix target IDs are
|
|
90
|
-
server-assigned. The plan must state whether each entity re-run resolves via a
|
|
91
|
-
client-controlled source-id field on the target or via the durable local
|
|
92
|
-
`sourceId -> targetId` crosswalk. Local `state/crosswalk/crosswalk.ndjson` is the sole
|
|
93
|
-
runtime authority for resume/idempotency — never CMS. The plan must state the crosswalk
|
|
94
|
-
authority (`local`) and the mapper-selected CMS mirror mode (`none`, `download`, `upload`,
|
|
95
|
-
or `download-and-upload`); CMS `ImportCrosswalk` is OPTIONAL by design, not a default,
|
|
96
|
-
because Wix CMS quotas are plan-based and shared across every custom collection on the
|
|
97
|
-
site — a large migration's full crosswalk can be many times a lower-tier plan's total item
|
|
98
|
-
quota, so treating the mirror as mandatory risks spending site data capacity the migration
|
|
99
|
-
has no business claiming by default. Only enable a mirror mode when the user opted into
|
|
100
|
-
site-local reference data (see `rp-execute-setup` → "Import crosswalk CMS mirror").
|
|
101
|
-
When a mirror mode other than `none` IS selected: provisioning the collection is not the
|
|
102
|
-
same thing as keeping it in sync — a run can provision the
|
|
103
|
-
collection at setup time and then never write to it again during import, leaving every
|
|
104
|
-
entity's crosswalk invisible on the site itself until a one-time backfill catches it up.
|
|
105
|
-
`rp-target-wix/lib/wix-writers.js`'s `syncImportCrosswalk` (batches of up to 1000 through
|
|
106
|
-
`bulkSaveDataItems`, item id the row's own `sourceStableKey`, matching the approved
|
|
107
|
-
download-side dedupe contract exactly — see the KNOWN, UNRESOLVED LIMITATION comment on
|
|
108
|
-
`buildImportCrosswalkItem`: sourceStableKey is only unique within one migration, so two different projects against the same source system that happen to import the
|
|
109
|
-
same entityType+sourceId still collide, and closing that gap needs its own approved
|
|
110
|
-
identity/schema decision, not an ad hoc id prefix) is the primitive that keeps it current, and
|
|
111
|
-
`rp-import-codegen` wires it in: a generated run with a mirror mode of `upload` or
|
|
112
|
-
`download-and-upload` performs **exactly one snapshot pass, after the last entity write**,
|
|
113
|
-
projecting the finished local crosswalk through `local-state.js`'s
|
|
114
|
-
`crosswalkRowsToMirrorItemInputs` and uploading it with `syncImportCrosswalk`. The pass is
|
|
115
|
-
never inline per entity and never a per-batch checkpoint: a mirror write riding alongside
|
|
116
|
-
each record multiplies the calls the site absorbs during the run and makes a slow collection
|
|
117
|
-
a drag on the import it only describes. With `none` or `download` the generated run touches
|
|
118
|
-
the collection zero times — no reads, no writes, no empty pass reported as success — because
|
|
119
|
-
site storage is a shared plan-based allowance and a large ledger can be a meaningful
|
|
120
|
-
fraction of a smaller plan's whole quota.
|
|
121
|
-
Never make native-entity import correctness
|
|
122
|
-
depend on the mirror succeeding: a non-zero `totalFailures`, or a thrown transport error,
|
|
123
|
-
marks the mirror step failed and is reported as a shortfall in the execution artifacts, while
|
|
124
|
-
every imported record stays imported and the run itself is not failed.
|
|
125
|
-
- **Destination and collisions — required whenever `WIX_SITE_STRATEGY=existing`.** Name
|
|
126
|
-
the destination site, and say plainly that it is a site the user already owns and that
|
|
127
|
-
this import will change it. Then quantify the overlap: for each entity type, how many
|
|
128
|
-
source records match something already on the site (by crosswalk, then by the mapping's
|
|
129
|
-
natural key), and what will happen to each — **skipped** or **augmented**, never replaced
|
|
130
|
-
and never deleted. A user accepting "Migrate" on their live store is accepting these
|
|
131
|
-
specific writes; a plan that reports only "120 products" is asking them to consent to
|
|
132
|
-
something they cannot see. If the overlap cannot be computed before writing, say that
|
|
133
|
-
too, and say what the import will do when it meets one.
|
|
134
|
-
- **URL preservation:** for public routed entities, state that source URL artifacts will
|
|
135
|
-
be captured locally under `state/url-preservation/`. List the public entity types whose
|
|
136
|
-
base paths and slugs will be tracked, any entity whose target route is deferred to the
|
|
137
|
-
website-builder phase, and whether redirects will be recorded as plans. The current
|
|
138
|
-
import phase must say that redirects and site routing are **not applied**.
|
|
139
|
-
Backend import stays plan-only: it records source URLs and source-authored redirect
|
|
140
|
-
definitions (`node skills/wix-replatform/scripts/url-redirects.js sources`), then runs the
|
|
141
|
-
offline `url-redirects.js report` and passes its projection
|
|
142
|
-
(`execution/url-preservation-report.json`, status `pending_website_build` until final routes
|
|
143
|
-
exist) as `completion-report.json.urlPreservation`. It never runs `apply` or `verify`, never
|
|
144
|
-
probes the public website and never changes DNS; those are post-build helper operations the
|
|
145
|
-
cutover step schedules.
|
|
146
|
-
- **Notification mute.** State that site notifications will be muted before
|
|
147
|
-
import when required by the resolved site strategy/config, and how the owner can later
|
|
148
|
-
ask for an unmute. State that site notifications will be muted before migration writes
|
|
149
|
-
begin when mute is in effect. For a **new site** this is a one-line
|
|
150
|
-
factual disclosure (the mute is unconditional). For an **existing site that opted in**
|
|
151
|
-
(`WIX_MUTE_NOTIFICATIONS=on`) the disclosure is **mandatory and prominent** and must
|
|
152
|
-
state all three points:
|
|
153
|
-
- all site notifications will be muted before migration writes begin;
|
|
154
|
-
- visitor activity during the migration window (e.g. contact-form submissions,
|
|
155
|
-
Back in Stock alerts) will **not** generate notifications;
|
|
156
|
-
- the flow does **not** unmute automatically — after the migration the owner must
|
|
157
|
-
re-enable notifications themselves, or simply ask the agent to unmute at any point.
|
|
158
|
-
|
|
159
|
-
The owner accepting the plan is the consent for muting their live site. If the owner
|
|
160
|
-
rejects the mute line, revert to the existing-site default (`off`) and regenerate the
|
|
161
|
-
affected artifacts before seeking acceptance again.
|
|
162
|
-
|
|
163
|
-
In explicit user-requested `1-click mode`, do not skip this report. Generate it, make sure it
|
|
164
|
-
reflects the real setup changes / data writes / blockers, record it as accepted by the agent,
|
|
165
|
-
and continue without waiting for a human response. A missing mode or a non-user-authored
|
|
166
|
-
`one_click` value must follow the normal user-approval path.
|
|
167
|
-
|
|
168
|
-
Persist this in `execution/review/import-plan.md` (or a sibling report). This is the defined approval
|
|
169
|
-
checkpoint: the job pauses, surfaces the plan to the user, and resumes **only** on
|
|
170
|
-
accept. Nothing is written before acceptance.
|
|
171
|
-
|
|
172
|
-
If `SAFE_MODE=true` or `DRY_RUN=true`, this execution-plan approval gate comes only after
|
|
173
|
-
the separate post-codegen code-safety review checkpoint has passed. Do not merge the two
|
|
174
|
-
checkpoints into one prompt.
|
|
175
|
-
|
|
176
|
-
## Out of scope — analytics (future enhancement)
|
|
177
|
-
|
|
178
|
-
**Do not attempt to import analytics data.** Historical traffic / visitor statistics —
|
|
179
|
-
the accumulated analytics records on the source (page views, sessions, visitor counts,
|
|
180
|
-
time-series reports) — are **not** part of the migration. Do not generate readers,
|
|
181
|
-
transforms, or writers for them. (This is about the *data*, not analytics
|
|
182
|
-
configuration/setup such as tracking tags — that is a separate concern and not what this
|
|
183
|
-
exclusion covers.)
|
|
184
|
-
|
|
185
|
-
- **Surface it before execute.** This exclusion must appear in the execution-plan report's
|
|
186
|
-
"What will NOT migrate" list (see the gate above) so the user is told **before** they
|
|
187
|
-
accept and we begin writing — not discovered afterward.
|
|
188
|
-
- **Future enhancement.** Analytics migration is a deferred scope item, not a permanent
|
|
189
|
-
limitation. If/when a faithful source→Wix analytics path exists, revisit and lift this
|
|
190
|
-
exclusion. Until then, treat analytics as explicitly skipped.
|
|
191
|
-
|
|
192
|
-
## Execute the generated scripts — never an agentic MCP flow (required)
|
|
193
|
-
|
|
194
|
-
The **import** is performed by **running the generated artifact** (`node` the project's
|
|
195
|
-
entrypoint under `migrations/<project>/src/`), which writes to Wix via its own transport
|
|
196
|
-
(`fetch` + injected credentials to `www.wixapis.com`, or the Wix client SDK). The agent
|
|
197
|
-
**must not** perform the import writes itself by issuing per-record Wix MCP calls
|
|
198
|
-
(`CallWixSiteAPI`) and hand-translating shapes.
|
|
199
|
-
|
|
200
|
-
(Scope: this rule is **import-specific**. Setup execution (`rp-execute-setup`) may
|
|
201
|
-
currently use the agent+MCP for provisioning writes — an interim decision, with other
|
|
202
|
-
options still under discussion.)
|
|
203
|
-
|
|
204
|
-
Why the import must run the artifact:
|
|
205
|
-
|
|
206
|
-
- **Reproducibility & idempotency.** Re-runs, resume-from-checkpoint, write ordering, and
|
|
207
|
-
dedup keyed by source ID live in the artifact. For native Wix entities whose target IDs
|
|
208
|
-
are server-assigned, that means the artifact must maintain and consult the local
|
|
209
|
-
`state/crosswalk/crosswalk.ndjson` authority. An agent reconstructing writes ad hoc
|
|
210
|
-
bypasses all of it — a bulk, restartable data pipeline can't be driven by hand per
|
|
211
|
-
record.
|
|
212
|
-
- **Verified shapes.** The artifact calls `rp-target-wix`'s verified primitives. An agent
|
|
213
|
-
rebuilding request bodies live re-opens the exact shape-bug class we eliminated
|
|
214
|
-
(Ricos plugin enum case, oversized-HTML tag body, `heroImage.id`).
|
|
215
|
-
- **MCP may be absent at runtime.** Interactively-authenticated MCP servers can be missing
|
|
216
|
-
in headless/cron runs, so MCP can't be depended on as the write transport regardless of
|
|
217
|
-
whether the runtime is a pure script-runner or an agent. Either way the writes should
|
|
218
|
-
flow through the tested artifact, not be reconstructed by the model.
|
|
219
|
-
- **Validation honesty.** Writing by hand via MCP leaves the artifact's own auth, request
|
|
220
|
-
execution, async-media polling, retry, and checkpoint code unexercised — a green test
|
|
221
|
-
then says nothing about the path real users get. The Wix MCP's role here is
|
|
222
|
-
grounding/verification at codegen time and the one-time live contract test in
|
|
223
|
-
`rp-target-wix`, **not** the import transport.
|
|
224
|
-
|
|
225
|
-
Consequence for credentials: the artifact needs real Wix write credentials to run. If they
|
|
226
|
-
are absent, **halt to needs-user** — do **not** substitute the agent's MCP account auth to
|
|
227
|
-
"get the writes done." Missing credentials is a blocker to surface, not a path to route
|
|
228
|
-
around.
|
|
229
|
-
|
|
230
|
-
This skill should execute the machine import artifacts and generated entrypoints. It
|
|
231
|
-
should not re-decide write strategy live when `execution/execution-manifest.json`
|
|
232
|
-
already defines the ordered task graph and write contract.
|
|
233
|
-
|
|
234
|
-
## Config files
|
|
235
|
-
|
|
236
|
-
Before running the generated entrypoint, verify the project-local config files exist and
|
|
237
|
-
contain required values:
|
|
238
|
-
|
|
239
|
-
- `migrations/<project>/config/wix.env`
|
|
240
|
-
- `WIX_SITE_STRATEGY`
|
|
241
|
-
- `WIX_SITE_ID`
|
|
242
|
-
- `WIX_AUTH_TOKEN` or another generated-code-supported Wix auth key
|
|
243
|
-
- `DRY_RUN`
|
|
244
|
-
- `SAFE_MODE`
|
|
245
|
-
- `SAFE_MODE_PHONE_NUMBER` when `SAFE_MODE` is enabled
|
|
246
|
-
- `migrations/<project>/config/source.<platform>.env`
|
|
247
|
-
- platform-specific source values, for example WordPress:
|
|
248
|
-
`WP_BASE_URL`; `WP_USERNAME` and `WP_APPLICATION_PASSWORD` for authenticated REST
|
|
249
|
-
reads; and `WMH2_MIGRATION_KEY` when the generated bridge reader selected signed auth
|
|
250
|
-
|
|
251
|
-
The generated script should load these files and then allow process env to override them.
|
|
252
|
-
`WIX_SITE_STRATEGY` is always required. `WIX_SITE_ID` is required before execution writes
|
|
253
|
-
begin; if the strategy is `new` and the site has not been created yet, halt to needs-user
|
|
254
|
-
and return to the site-creation step rather than assuming an existing-site flow. Never
|
|
255
|
-
print secret values.
|
|
256
|
-
|
|
257
|
-
`WIX_AUTH_TOKEN` is the canonical Wix auth key in project-local config. It may have been
|
|
258
|
-
used earlier for account-level site creation and may also power site-level writes when
|
|
259
|
-
the generated runtime supports that same key. If the generated import path needs a
|
|
260
|
-
different Wix credential, name that key explicitly in the generated artifacts.
|
|
261
|
-
|
|
262
|
-
If execution is blocked because a RePlatform `new site` + `headless` target was never
|
|
263
|
-
created, route back to `resources/rp-destination/`, which scaffolds via
|
|
264
|
-
`npm create @wix/new@latest headless`. The account-level Projects API is deprecated for
|
|
265
|
-
this workflow (it produced non-headless sites).
|
|
266
|
-
|
|
267
|
-
When the accepted next run is dry-run, missing or blank `WIX_AUTH_TOKEN` and
|
|
268
|
-
`WIX_SITE_ID` are not blockers unless a local artifact requires the site ID as a stable
|
|
269
|
-
namespace. Report them as `would_block_live`, do not mint a Wix CLI token for dry-run, and
|
|
270
|
-
make the execution plan state that a later live run needs separate acceptance and valid
|
|
271
|
-
credentials.
|
|
272
|
-
|
|
273
|
-
If `DRY_RUN=true`, do not override it with `--no-dry-run` for setup probes, setup
|
|
274
|
-
provisioning, demo-catalog cleanup, extraction-side verification against Wix, or import
|
|
275
|
-
writes unless the user has explicitly approved leaving dry-run for that step or phase.
|
|
276
|
-
Prefer to avoid that override when a dry-run artifact or report can be produced instead.
|
|
277
|
-
The upstream new-site creation exception does not authorize this skill to make any other
|
|
278
|
-
live Wix API call.
|
|
279
|
-
|
|
280
|
-
Treat `migrations/<project>/config/*.env` as secret-bearing once they may contain real
|
|
281
|
-
values. Do not inspect them with whole-file reads that print contents into tool output;
|
|
282
|
-
check only existence and required-key status (`present`, `blank`, `missing`).
|
|
283
|
-
|
|
284
|
-
For CLI-scaffolded headless sites, acquire the site write token from the scaffolded
|
|
285
|
-
frontend folder with:
|
|
286
|
-
|
|
287
|
-
```bash
|
|
288
|
-
npx @wix/cli@latest token --site "$WIX_SITE_ID"
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
Persist the returned token as `WIX_AUTH_TOKEN` and send it as a Bearer token. The same Wix
|
|
292
|
-
CLI account should create the site and mint this token.
|
|
293
|
-
|
|
294
|
-
## Workflow
|
|
295
|
-
|
|
296
|
-
1. Resolve the active project.
|
|
297
|
-
2. Review the machine execution artifacts and generated code; present the execution plan
|
|
298
|
-
report and obtain acceptance (see above) before any write.
|
|
299
|
-
2b. **Precondition, not a step you can skip by not reading this line.** The import path checks
|
|
300
|
-
that execution state was prepared and refuses to write without it. Prepare deterministic
|
|
301
|
-
local execution state before any setup/import write:
|
|
302
|
-
|
|
303
|
-
```bash
|
|
304
|
-
node skills/wix-replatform/scripts/execution-state-prepare.js migrations/<project>
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
This validates `execution/execution-manifest.json`, initializes or validates
|
|
308
|
-
`state/crosswalk/crosswalk.ndjson`, rebuilds crosswalk indexes, initializes
|
|
309
|
-
`state/attempts/write-attempts.ndjson`, initializes `state/url-preservation/`
|
|
310
|
-
artifacts when URL preservation is enabled, and blocks CMS mirror download flows unless
|
|
311
|
-
local state is absent and explicit CMS mirror rows have been provided to seed it.
|
|
312
|
-
2d. Verify the generated import entrypoints satisfy the entry contract, before any entity
|
|
313
|
-
write:
|
|
314
|
-
|
|
315
|
-
```bash
|
|
316
|
-
node skills/wix-replatform/scripts/import-contract-verify.js migrations/<project>
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
For a filtered run, pass its identical selection after `--` (for example
|
|
320
|
-
`-- --entity <entity> --failed-only`). For selected bridge-backed entities/dependants,
|
|
321
|
-
the verifier first checks actual generated wiring and helper versions against the
|
|
322
|
-
committed emitter, before running any generated entrypoint. An unrelated native-only
|
|
323
|
-
selection does not check another plugin's artifact readiness. Source preparation/full
|
|
324
|
-
manifests are checked by the shared runtime at selected dispatch; missing preparation
|
|
325
|
-
holds only affected scopes with existing Import Operator tasks. Follow
|
|
326
|
-
`rp-source-wordpress/PLUGIN-READ-PLANS.md`; do not bypass those wrappers.
|
|
327
|
-
|
|
328
|
-
This then spawns each generated import entrypoint with `--describe`, parses the single JSON
|
|
329
|
-
object it prints, and checks it against the generated-importer contract. It writes no state
|
|
330
|
-
and touches no target. A non-zero exit **aborts the import** and routes back to codegen —
|
|
331
|
-
no degraded mode, no skip flag — naming every missing selection mode and every misplaced
|
|
332
|
-
ledger path at once.
|
|
333
|
-
|
|
334
|
-
The selective modes (`--entity`, `--source-type`, `--missing-only`, `--failed-only`,
|
|
335
|
-
`--deferred-only`, `--unresolved-only`) are a **requirement on the generated importer**, not
|
|
336
|
-
an operator option: an importer that cannot offer targeted recovery is one whose only
|
|
337
|
-
recovery is an unfiltered full re-pass, which is how a journal ends up with several rows per
|
|
338
|
-
record. The importer also checks itself, as the first statement of its `main()`; this step
|
|
339
|
-
is what catches an importer that never emitted that check at all.
|
|
340
|
-
|
|
341
|
-
2c. Resolve every request under `state/blocked-data-requests/` with the shared
|
|
342
|
-
`lib/blocked-data-requests.js` helper before normal extraction. Reuse a current immutable
|
|
343
|
-
snapshot within `fulfillment.freshnessWindowHours` without probing the source. After the
|
|
344
|
-
window, attempt exactly one refresh: write the next version on success; on failure keep the
|
|
345
|
-
prior snapshot and mark it `stale: true`. With no snapshot, `csv-upload` checks and parses
|
|
346
|
-
`expectedInputPath`, while `bridge-plugin` probes the live `/wp-json` namespace list and then
|
|
347
|
-
calls `extractionRoute`; never check a local path for a bridge request. Reconciled data is
|
|
348
|
-
merged into that capability's extraction input. Present-but-invalid or partial data is
|
|
349
|
-
discarded and marked `invalid`; missing data uses the target entity's existing default.
|
|
350
|
-
Never create `declined` unless a human explicitly declined during an interactive review.
|
|
351
|
-
Stamp every write attempt using real blocked data with the snapshot version, extraction
|
|
352
|
-
timestamp, and checksum it actually consumed.
|
|
353
|
-
3. Run a safe validation path first when possible, such as dry-run, sample batch, or read-only validation.
|
|
354
|
-
For dry-run, invoke the same generated setup/import entrypoints with `DRY_RUN=true` or
|
|
355
|
-
`--dry-run`. Do not use an agent/MCP hand-built substitute. The shared Wix runtime must
|
|
356
|
-
skip Wix calls at `wix.send`, write `state/attempts/wix-request-captures.ndjson`, and
|
|
357
|
-
keep placeholder target IDs out of `state/crosswalk/crosswalk.ndjson`.
|
|
358
|
-
Do not switch to `--no-dry-run` unless the user explicitly approves leaving dry-run for
|
|
359
|
-
that phase.
|
|
360
|
-
If media import is in scope and source media URLs are local/private (`localhost`,
|
|
361
|
-
`127.0.0.1`, Docker-only hosts, etc.), do not treat a successful dry-run as proof that
|
|
362
|
-
live media import can work. Wix Media import fetches URLs from Wix servers, so the user
|
|
363
|
-
must either expose the source through a public HTTPS tunnel or skip/defer media. This
|
|
364
|
-
is optional and, as far as we know today, only affects media import.
|
|
365
|
-
For Stores products carrying `subscriptionDetails`, the generated dry-run must execute
|
|
366
|
-
the same transform path as live import and call the vendored
|
|
367
|
-
`validateStoresProductSubscriptionDetails` helper before writes. Known contract
|
|
368
|
-
failures such as missing cadence or an invalid required nested field are record-level
|
|
369
|
-
preflight failures/deferred outcomes; they must be counted and reported without sending
|
|
370
|
-
that record to Wix.
|
|
371
|
-
If the run needs live Stores evidence during setup or recovery, use the shared
|
|
372
|
-
verification CLI and persist its JSON artifact:
|
|
373
|
-
`node skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js stores product-count --artifact migrations/<project>/execution/stores-product-count-verification.json`
|
|
374
|
-
or `stores product-by-source-marker --marker-path <path> --marker-value <value>`.
|
|
375
|
-
Do not write migration-local verification snippets for Stores product counts,
|
|
376
|
-
source-marker lookups, subscription probes, or probe cleanup.
|
|
377
|
-
3b. **Clear the default demo catalog first — only when all three conditions hold.** A
|
|
378
|
-
freshly provisioned Wix Stores catalog (and `wix-headless`'s seed) ships ~12 placeholder
|
|
379
|
-
demo products + demo categories. Wiping them before importing is correct ONLY on a site
|
|
380
|
-
you created on this turn from a live source — never as a general cleanup step. All three
|
|
381
|
-
must hold; check them before deleting anything:
|
|
382
|
-
|
|
383
|
-
1. `WIX_SITE_STRATEGY=new`, **and**
|
|
384
|
-
2. the source is a **live site**, not supplied files (`sourceMode=files_only`), **and**
|
|
385
|
-
3. **you created the destination site on this turn.**
|
|
386
|
-
|
|
387
|
-
Each one guards against a different way of destroying data that is not template seed:
|
|
388
|
-
|
|
389
|
-
- **Existing site ⇒ never.** The catalog belongs to the owner; a bulk delete here is
|
|
390
|
-
data loss this pipeline cannot undo.
|
|
391
|
-
- **File-provided run ⇒ never, whatever the strategy.** File drops are recurring by
|
|
392
|
-
design — they can accumulate onto one site over multiple runs, so wiping on drop 2..N
|
|
393
|
-
would delete what an earlier drop imported, and the wipe cannot tell template seed
|
|
394
|
-
from migrated data.
|
|
395
|
-
- **A later turn ⇒ never.** This is the condition most likely to be missed: on turn two
|
|
396
|
-
of a new-site run, `WIX_SITE_STRATEGY` still reads `new` and the source is still a
|
|
397
|
-
live site, so only "did I create the destination on this turn" separates clearing the
|
|
398
|
-
template's placeholders from deleting the previous turn's import.
|
|
399
|
-
|
|
400
|
-
When in doubt, skip it — leaving a few template products behind is a cosmetic defect the
|
|
401
|
-
owner can fix later; deleting their catalog is not recoverable. When all three hold,
|
|
402
|
-
delete the default demo products and categories (keep the system `All Products`
|
|
403
|
-
category) so the final store holds only the migrated data — otherwise a clean
|
|
404
|
-
100-product import reads as 112. Applies in both delivery modes.
|
|
405
|
-
4. **Run source extraction first** using the generated extraction entrypoint (for example
|
|
406
|
-
`node src/extract/run-extract.js`). This step writes durable source files under the
|
|
407
|
-
project and must complete before the write phase unless the extraction artifacts are
|
|
408
|
-
already present and accepted for resume.
|
|
409
|
-
5. **Execute the import by running the generated import entrypoint** (for example
|
|
410
|
-
`node src/import/run-import.js`) with credentials injected via config/env. The import
|
|
411
|
-
must read from the extracted files on disk — not by re-reading the source into memory,
|
|
412
|
-
and not by issuing writes through the agent/MCP.
|
|
413
|
-
For targeted recovery, run the generated main import entrypoint with its selective
|
|
414
|
-
resume flags rather than writing a migration-local one-off script:
|
|
415
|
-
- `--entity <entity>`
|
|
416
|
-
- `--source-type <subtype>`
|
|
417
|
-
- `--missing-only`
|
|
418
|
-
- `--failed-only`
|
|
419
|
-
- `--deferred-only`
|
|
420
|
-
|
|
421
|
-
`--missing-only`, `--failed-only`, and `--deferred-only` are mutually exclusive. The
|
|
422
|
-
runner must print or persist the selected record set summary before writes begin. For
|
|
423
|
-
native Wix entities, a local crosswalk hit must skip the create idempotently even if the
|
|
424
|
-
record was selected earlier.
|
|
425
|
-
If the execution manifest enables CMS mirror download, fetch CMS rows before this step
|
|
426
|
-
and pass them to the deterministic state-preparation layer; the generated import may use
|
|
427
|
-
only local crosswalk state after preparation succeeds.
|
|
428
|
-
5b. **App routes and internal links.** After relevant apps are
|
|
429
|
-
installed, inspect/configure only the schema-backed per-family routes supported by
|
|
430
|
-
`rp-target-wix` capability knowledge; store saved-state read-back under
|
|
431
|
-
`state/url-preservation/app-page-routes.json`. After backend import, run the generated
|
|
432
|
-
`internal-link-audit.js plan` input over the complete captured inventory. It performs
|
|
433
|
-
local counting with no destination request or model call and writes
|
|
434
|
-
`state/url-preservation/link-audit.json`. A backend-only run leaves destinations pending
|
|
435
|
-
and unresolved occurrences without invented paths. Do not call the post-frontend
|
|
436
|
-
`verify` entrypoint until the frontend exists. That step first makes at most 20 read-only
|
|
437
|
-
calibration checks inside a two-minute sub-cap, records the estimate against the
|
|
438
|
-
approved 30-minute live-work and 100,000 exception-review-token ceilings, then checks
|
|
439
|
-
samples and destinations and invokes only compatible non-blog writers. Unknown or
|
|
440
|
-
incompatible writer ownership blocks affected writes before mutation, while disjoint
|
|
441
|
-
safe fields may proceed. Blog-post link writes remain pending until a dedicated writer
|
|
442
|
-
can consume verified destinations through its checkpointed post-frontend lifecycle.
|
|
443
|
-
Supply planned destination content revisions with containing record identities. The
|
|
444
|
-
shared verifier applies structured patches once per logical record and field through
|
|
445
|
-
its durable write journal; adapter callbacks supply revisioned read/write and rendered
|
|
446
|
-
checks, not direct per-link repair. A budget hold survives re-planning and resumes only
|
|
447
|
-
after the plan records the owner's decision reference and approved ceilings.
|
|
448
|
-
Refresh the audit, completion report and website handoff after the post-frontend step
|
|
449
|
-
and after affected source catch-up. Keep incomplete writer integration and unverified
|
|
450
|
-
link coverage pending in those artifacts.
|
|
451
|
-
6. Use `lib/dependency-readiness.js` immediately before each dependent batch, including
|
|
452
|
-
selective recovery. The generated importer binds its task, evaluates current readiness,
|
|
453
|
-
and calls `gateBatch`; only its `send` payloads may reach a task-capability Wix client,
|
|
454
|
-
carrying `sourceStableKey` and the current `readinessGrant`. A task-level unknown or
|
|
455
|
-
unapproved exclusion stops before its first batch. A permitted partial per-record
|
|
456
|
-
dependency defers only records whose required references are unresolved. Setup is
|
|
457
|
-
all-or-nothing: every bound step must pass on the current destination before any
|
|
458
|
-
setup-derived reference can resolve. An empty dependency passes only with a current
|
|
459
|
-
complete zero-row extract and full task-pass evidence. Never infer readiness from task
|
|
460
|
-
order, a success count, a crosswalk row alone, dry-run state, or prose best-effort consent.
|
|
461
|
-
Capture compact reports, audit-log references, errors, retries, skipped records, and
|
|
462
|
-
checkpoint information from the shared runtime outputs.
|
|
463
|
-
Safe-mode outputs must be summarized by counts and paths only: include skipped
|
|
464
|
-
safe-mode blocked record counts, the project-relative
|
|
465
|
-
`state/safe-mode/blocked-records.ndjson` path when present, and the
|
|
466
|
-
`state/safe-mode/email-replacements.ndjson` row count/path when replacement rows were
|
|
467
|
-
written. Do not print original email addresses or phone numbers from the recovery
|
|
468
|
-
ledger.
|
|
469
|
-
6b. **Reconcile bearer-voucher drift against a fresh source read — required, before cutover.**
|
|
470
|
-
Run this after every write pass has finished and before anything declares the run
|
|
471
|
-
complete. It is required whenever the accepted scope included coupons **and** the source
|
|
472
|
-
carried at least one coupon with a usage limit. When neither holds, record
|
|
473
|
-
`voucherReconciliation: "not-applicable"` in the completion report and do nothing else — a
|
|
474
|
-
source with no usage-limited coupons still answers out loud, because silence and success look
|
|
475
|
-
identical in a report.
|
|
476
|
-
|
|
477
|
-
**Deadline: before cutover, while the source is still the system of record.** Two reasons,
|
|
478
|
-
and together they are why running it late is the same as never running it:
|
|
479
|
-
|
|
480
|
-
1. the step compares a **fresh read of the source** against the target, and once the source
|
|
481
|
-
stops being the system of record that fresh source read stops existing; and
|
|
482
|
-
2. the **target exposes no redemption count** for a coupon on any surface, so the question
|
|
483
|
-
cannot be answered from the target alone afterwards.
|
|
484
|
-
|
|
485
|
-
Miss the deadline and which codes were already spent becomes permanently unknowable, on an
|
|
486
|
-
instrument made of money.
|
|
487
|
-
|
|
488
|
-
**Use the shipped module, `rp-target-wix/lib/coupon-redemption-drift.js`.** A
|
|
489
|
-
migration-local reimplementation of the classification, the plan, the request builder or the
|
|
490
|
-
verification is forbidden: each one carries a trap that stays invisible until it costs money.
|
|
491
|
-
|
|
492
|
-
1. Re-read the source coupon rows **now** — never the discovery snapshot, which is precisely
|
|
493
|
-
what went stale — and read each imported coupon back from the target.
|
|
494
|
-
2. Per import receipt: `classifyPostImportDrift({ receipt, freshCoupon, targetCoupon })`. It
|
|
495
|
-
returns exactly five post-import outcomes: `voucher-drift-reconciled`,
|
|
496
|
-
`voucher-drift-remedy-pending`, `voucher-source-row-missing`, `voucher-target-row-missing`
|
|
497
|
-
and `voucher-target-state-unreadable`. An unsupported face-value precision is the boolean
|
|
498
|
-
`verdict.facePrecisionUnsupported` riding alongside whichever of those five applies —
|
|
499
|
-
wire on that flag; it is never `verdict.outcome`, so a branch for it in a
|
|
500
|
-
`switch (verdict.outcome)` is a branch nothing can ever reach.
|
|
501
|
-
3. `buildVoucherDriftPlan({ verdicts, ordersByCouponCode, currency })` turns the verdicts into
|
|
502
|
-
the owner-approval plan: `counts`, one `rows` entry per code carrying its face value, the
|
|
503
|
-
orders that reference it and the proposed remedy, and `liability` — the money still live.
|
|
504
|
-
The plan is `readOnly: true` and has no apply path, by construction. Run twice on the same
|
|
505
|
-
inputs it produces the same plan.
|
|
506
|
-
4. **The owner rules per code, including in one-click mode.** One-click is a promise about how
|
|
507
|
-
little the operator has to decide, never a licence to decide on the merchant's behalf about
|
|
508
|
-
their money: deactivating a code a customer legitimately holds destroys value too, and the
|
|
509
|
-
merchant might already have honoured a voucher off-system. Nothing in this step writes
|
|
510
|
-
without an explicit per-code decision.
|
|
511
|
-
5. Build an approved remedy **only** with `buildRemedyRequest({ couponId, remedy, setTags })`.
|
|
512
|
-
It emits the one request shape that actually writes — a specification carrying only the
|
|
513
|
-
changed fields plus the matching field mask. **Never build the body from the coupon you
|
|
514
|
-
just read:** the full specification alongside a narrow field mask is accepted with `200`,
|
|
515
|
-
an empty body, and no write at all. Record the response status; do not interpret it.
|
|
516
|
-
6. Wait a settle, read the coupon back, and let
|
|
517
|
-
`verifyRemedyApplied({ remedy, responseStatus, readBackAfterSettle, settleMs })` decide. A
|
|
518
|
-
2xx is not evidence. No read-back, a read-back that still shows the coupon live, and a
|
|
519
|
-
read-back with no readable `active` flag are each `remedy-unverified` — reported unknown,
|
|
520
|
-
never applied. For a deactivation, a coupon that does not read back at all is unknown too,
|
|
521
|
-
never success.
|
|
522
|
-
|
|
523
|
-
⚠️ **This is not the coupon pass and must not be folded into it.** The coupon pass writes
|
|
524
|
-
coupons; this step re-reads the source *afterwards*, which is the entire point. Run inside the
|
|
525
|
-
import, it returns the answer the import already had.
|
|
526
|
-
|
|
527
|
-
⚠️ **It is not the rerun pass either** (see "Rerunning an import for new and modified
|
|
528
|
-
records"). A rerun covers new and changed records; a voucher spent since the write is neither
|
|
529
|
-
— nothing the rerun compares changed. They are separate obligations at an agreed cutover.
|
|
530
|
-
|
|
531
|
-
⚠️ **Expect to run this step more than once.** It is idempotent and safe at the end of every
|
|
532
|
-
execution, but its deadline is cutover, so re-invoke it close to actual cutover. The
|
|
533
|
-
completion record from the **last invocation before cutover** is the authoritative answer; an
|
|
534
|
-
earlier `not-run` or `plan-pending-owner` is a warning that the obligation is still open, not
|
|
535
|
-
a verdict that it was skipped.
|
|
536
|
-
|
|
537
|
-
Record the result in `execution/completion-report.json` as `voucherReconciliation`, one of
|
|
538
|
-
`not-applicable | reconciled | plan-pending-owner | remedied | not-run` (see "Completion
|
|
539
|
-
report contract").
|
|
540
|
-
|
|
541
|
-
7. Save durable execution artifacts, including the authoritative completion artifact and
|
|
542
|
-
deterministic user-facing completion summary.
|
|
543
|
-
|
|
544
|
-
## Contacts/Members disposition (safe-mode vs. real, live at the destination)
|
|
545
|
-
|
|
546
|
-
LIVE-VERIFIED: when `SAFE_MODE=true` covers `crm/contact`, every created Contact carries a
|
|
547
|
-
mock `replatform+contact_<id>@wix.com` email (see `mockEmailForEntity` in
|
|
548
|
-
`rp-target-wix/lib/wix-writers.js`). What that means for login identity depends on whether
|
|
549
|
-
`members/member` is itself a generated import target for this run, per `rp-import-codegen`'s
|
|
550
|
-
member pass:
|
|
551
|
-
|
|
552
|
-
- **`members/member` NOT in the generated scope:** the contact-import pass alone builds no
|
|
553
|
-
Wix Members (`memberCrosswalk` is stubbed to always return `null` so order/blog author
|
|
554
|
-
resolution has something safe to call), so no customer gets a real, usable login identity
|
|
555
|
-
from this run at all — safe-mode or not. Promoting a contact to real-email-plus-Member is
|
|
556
|
-
then a distinct, separate, later write (see `rp-target-wix/lib/wix-writers.js`'s
|
|
557
|
-
`ensureMember` composite: read the contact's current revision, update its email/phone from
|
|
558
|
-
the real source values only when the current email still matches the safe-mode mock
|
|
559
|
-
pattern, then call `ensureMember` with the same real loginEmail so the created Member lands
|
|
560
|
-
on that same contact rather than a duplicate).
|
|
561
|
-
- **`members/member` IS in the generated scope:** the generated member pass runs `ensureMember`
|
|
562
|
-
directly against each registered customer's REAL email in its own loop before order history,
|
|
563
|
-
regardless of the `crm/contact` SAFE_MODE setting — that pass does not read or wait on the
|
|
564
|
-
safe-mode mock email at all, it goes straight to `ensureMember({loginEmail: customer.email, ...})`.
|
|
565
|
-
In this case customers DO get a real Member from the entity-import pass itself; a contact
|
|
566
|
-
left on a safe-mode mock email from a separate `crm/contact` pass is not the same customer
|
|
567
|
-
state as "no Member exists" and must not be reported as if it were.
|
|
568
|
-
|
|
569
|
-
Do not state either version as the migration's blanket behavior without checking which one
|
|
570
|
-
this run's actual generated scope produces.
|
|
571
|
-
|
|
572
|
-
Two requirements follow, both non-negotiable when `crm/contact` is in scope:
|
|
573
|
-
|
|
574
|
-
1. **Ask before the contact import runs, in plain language — but only offer a choice the
|
|
575
|
-
generated scope can actually honor, not by assuming a SAFE_MODE default:**
|
|
576
|
-
- If `members/member` is NOT a generated target for this run: this pass never creates a
|
|
577
|
-
Member either way (see above), so do not offer "create a Wix Member directly" as an
|
|
578
|
-
option — that path does not exist without a member pass. Ask instead: "Import contacts
|
|
579
|
-
with their real email now, or with temporary safe-mode emails for review first? Either
|
|
580
|
-
way, no customer gets a Member or a login identity from this run alone — that is always
|
|
581
|
-
a distinct, later step (add `members/member` to the scope, or run the separate
|
|
582
|
-
promotion write afterward)." Record the answer in the execution plan/consent artifact
|
|
583
|
-
next to the SAFE_MODE decision; do not let an unset `SAFE_MODE` env var (which defaults
|
|
584
|
-
to `true`) decide this silently.
|
|
585
|
-
- If `members/member` IS a generated target: do **not** offer the safe-mode-contacts
|
|
586
|
-
choice at all. The member pass creates each registered customer's Member
|
|
587
|
-
directly against their REAL email regardless of `crm/contact`'s own SAFE_MODE setting,
|
|
588
|
-
and reconciles by that real loginEmail — a contact the SAFE_MODE pass created earlier
|
|
589
|
-
under the mock email will not match it, so the member pass creates a SECOND, separate
|
|
590
|
-
contact on the real email instead of landing on the existing one. This is a real
|
|
591
|
-
duplicate-contact gap, not a hypothetical: the ordering rule needed to prevent it (never
|
|
592
|
-
pre-create a safe-mode contact for someone who will become a member) is tracked as an
|
|
593
|
-
open, unresolved decision, not something already implemented. Until that ordering is
|
|
594
|
-
implemented, `crm/contact` must run in real-email mode whenever `members/member` is
|
|
595
|
-
also in scope, and the plan must say so plainly rather than presenting a safe-mode
|
|
596
|
-
choice it cannot deliver.
|
|
597
|
-
2. **Every completion/status summary that touches contacts must report the disposition
|
|
598
|
-
explicitly and by count**, whichever path was chosen: how many contacts still carry a
|
|
599
|
-
safe-mode temp email with no Member (and therefore need a follow-up promotion run before
|
|
600
|
-
they have a real email on file or can log in), vs. how many were promoted to a real email
|
|
601
|
-
+ Member. A status report that only says "N contacts imported" without this breakdown is
|
|
602
|
-
incomplete — the operator cannot tell from that alone whether any customer can currently be
|
|
603
|
-
reached or log in.
|
|
604
|
-
|
|
605
|
-
## Email marketing consent
|
|
606
|
-
|
|
607
|
-
When the source records a real per-record consent signal for marketing email (e.g. a
|
|
608
|
-
WooCommerce order's checkout consent-checkbox meta, not mere presence as a customer), do not
|
|
609
|
-
write it to Wix Email Subscriptions yet. `crm/email-subscription`'s `bulkUpsertEmailSubscriptions`
|
|
610
|
-
writer (`rp-target-wix/lib/wix-writers.js`) is mechanically live-verified — keyed by email
|
|
611
|
-
address, covers guest-checkout consent with no Contact behind it, sets a status only with no
|
|
612
|
-
confirmation/marketing email triggered — but the entity's `preferredWrite.importSafe` stays
|
|
613
|
-
`false` because two product decisions are still unresolved: how several orders for one email
|
|
614
|
-
fold to a single subscription state (`order-scoped-consent-has-no-decided-fold-rule`), and
|
|
615
|
-
whether Email Subscriptions or the separate Marketing Consent API is the authoritative write
|
|
616
|
-
target (`email-subscriptions-vs-marketing-consent-api-unresolved`). Surface the gap and these
|
|
617
|
-
two open questions to the user rather than deciding either one inside an import run; only
|
|
618
|
-
proceed once both are resolved and `importSafe` reflects that.
|
|
619
|
-
|
|
620
|
-
## Rerunning an import for new and modified records
|
|
621
|
-
|
|
622
|
-
The source keeps trading after an import finishes: newer records arrive, earlier
|
|
623
|
-
records change, earlier failures are still missing. A rerun reuses the same project,
|
|
624
|
-
destination, mapping, generated importer and crosswalk — it is not a fresh migration, and any
|
|
625
|
-
mapping or scope change goes back through the existing gates.
|
|
626
|
-
|
|
627
|
-
Catch-up may extend the end of the range to the new capture time. It does **not** pull older
|
|
628
|
-
history the accepted scope excluded, and it does **not** propagate deletions.
|
|
629
|
-
|
|
630
|
-
⚠️ A rerun does **not** cover bearer-voucher drift, and must never be reported as having done
|
|
631
|
-
so. A voucher spent at source since the import is neither a new record nor a changed one in
|
|
632
|
-
anything `selectRerunRecords` compares. That obligation is workflow step 6b, it is separate,
|
|
633
|
-
and it is deadlined at cutover.
|
|
634
|
-
|
|
635
|
-
**Selection.** Refresh the agreed scope and bucket it against the crosswalk with
|
|
636
|
-
`lib/import-recovery.js`'s `selectRerunRecords` — create missing, skip unchanged, update
|
|
637
|
-
changed, and report `unknown` where there is no usable comparison evidence. The pre-existing
|
|
638
|
-
`--missing-only` and `--failed-only` filters are **not** a delta between them: missing-only
|
|
639
|
-
excludes every crosswalk hit, so a changed record is never seen, and failed-only only revisits
|
|
640
|
-
what was already attempted. Read refreshed files covering the whole agreed scope; a
|
|
641
|
-
modified-since optimization is allowed only when it still includes boundary records, older
|
|
642
|
-
retries and unresolved decisions.
|
|
643
|
-
|
|
644
|
-
**The version pair.** Every confirmed write records the source's version (`sourceVersionField`
|
|
645
|
-
+ `sourceVersion`, or a declared `sourceHash` fallback) and the Wix `targetRevision` returned by
|
|
646
|
-
that write, via `nextCrosswalkBaseline`. A confirmed write that returns **no** revision does not
|
|
647
|
-
advance the pair at all — **including a first create**. Half a pair is not a baseline: a source
|
|
648
|
-
version saying "applied" with no revision leaves the next update with no concurrency guard, and
|
|
649
|
-
on a re-write it would pair a new source version with a pre-write revision and self-conflict.
|
|
650
|
-
Both reconcile instead. A linked record with no saved revision is likewise reported `unknown`
|
|
651
|
-
rather than updated, which also covers legacy rows written before the pair existed. Treat both as opaque; never increment a revision
|
|
652
|
-
locally. A failed, conflicted, dry-run or skipped write **must not** advance the pair — that is
|
|
653
|
-
what keeps the record eligible for recovery instead of recorded as applied. Missing metadata on
|
|
654
|
-
an old row is `unknown`, never "unchanged".
|
|
655
|
-
|
|
656
|
-
**Conflicts are a user decision, including in one-click mode.** When Wix rejects an update
|
|
657
|
-
because its revision moved, stop updating that record and show the user the error, the record,
|
|
658
|
-
and the source changes proposed for it — `lib/rerun-conflicts.js` builds that review and
|
|
659
|
-
classifies the error. Ask once per record, not per field. **Never silently fetch a newer
|
|
660
|
-
revision and retry**; there is deliberately no such helper. Unrelated records continue; work
|
|
661
|
-
depending on the unresolved update stays blocked.
|
|
662
|
-
|
|
663
|
-
⚠️ **The conflict-code list is incomplete by design.** Only `INVALID_REVISION` has been
|
|
664
|
-
observed live (on a delivery profile). Products v3 and Contacts v5 conflict codes
|
|
665
|
-
are **not** known, so they are absent rather than guessed. Two things keep that safe: the
|
|
666
|
-
accepted mapping can declare an entity's real codes (`entityConflictCodes`), and an
|
|
667
|
-
unrecognized 409 on a revision-carrying update classifies as `possible_revision_conflict` —
|
|
668
|
-
which goes to a human, never to an auto-retry and never silently into an ordinary failure. When
|
|
669
|
-
a real conflict code is observed, record it in the entity's declared codes and in
|
|
670
|
-
`OBSERVED_REVISION_CONFLICT_CODES` with its evidence.
|
|
671
|
-
|
|
672
|
-
On **override**, read the latest Wix record, show which values would be replaced, and write
|
|
673
|
-
against the revision the user actually reviewed. A further conflict is another decision. On
|
|
674
|
-
**keep**, leave Wix alone and record the choice against that exact source version and reviewed
|
|
675
|
-
revision in the recovery log — never as a crosswalk baseline, because the source version was
|
|
676
|
-
never applied — persist it through the recovery entry's `conflictDecisions[]` and read it back
|
|
677
|
-
with `latestConflictDecisionFor`, so a later rerun does not re-ask a question the user already
|
|
678
|
-
answered or silently overwrite what they chose to keep. `loadRecoveryLog` returns an **array**;
|
|
679
|
-
pass it straight in. Do not report a kept change as imported,
|
|
680
|
-
and do not retry it silently later.
|
|
681
|
-
|
|
682
|
-
**Dependencies and safety.** Resolve contacts, products and other dependencies before their
|
|
683
|
-
dependants. A record with an uncertain prior attempt (`deferred`, `needs_verification`,
|
|
684
|
-
`succeeded_unverified`, `started`) is reconciled before it is written — `selectRerunRecords`
|
|
685
|
-
routes it to `needsReconciliation` whether it is linked or not. Unlinked, an unconfirmed earlier
|
|
686
|
-
write may already exist and creating again would duplicate it. **Linked, the danger is subtler:**
|
|
687
|
-
if the previous write landed and the process died before saving its baseline, the saved revision
|
|
688
|
-
is already stale, so re-sending it makes the importer collide with its own write and report that
|
|
689
|
-
to the user as a merchant edit.
|
|
690
|
-
|
|
691
|
-
Updates touch only the fields the accepted mapping covers and preserve unrelated Wix values.
|
|
692
|
-
Each entity needs a verified update operation **and** conflict protection; without both,
|
|
693
|
-
`updateSupportFor` returns `report_for_review` and the record is reported rather than pushed
|
|
694
|
-
through a create/import operation. This is **enforced in code**, not only documented: the
|
|
695
|
-
accepted mapping declares `{ writerId, revisionParam }` per entity, and an entity missing
|
|
696
|
-
either is refused. It **fails closed** — a rerun that does not declare `targetEntityRef` at all
|
|
697
|
-
gets `report_for_review` for every changed record, because an absent declaration is not evidence
|
|
698
|
-
that an update is safe. The order family (`ecom/order` and its child entities) is denied outright
|
|
699
|
-
with `neverFallBackToCreate` — Update Order exposes a restricted field set and no general
|
|
700
|
-
revision parameter, and a same-id Import Order is an unguarded whole-body replacement that
|
|
701
|
-
clears omitted fields.
|
|
702
|
-
|
|
703
|
-
**Scope and deletions.** Pass the accepted scope as `inScope`; excluded records are reported
|
|
704
|
-
`outOfScope` and never actioned. Deletions need no rule beyond the refreshed set: a record
|
|
705
|
-
absent from the source is never iterated, so absence can never become a delete instruction.
|
|
706
|
-
|
|
707
|
-
**Reporting.** Before writes, show the selected scope with counts of new, changed, unchanged
|
|
708
|
-
and unresolved. Afterwards report created, updated, unchanged, kept-in-Wix-by-user-choice,
|
|
709
|
-
conflicted, failed, blocked and out-of-scope, with errors and affected records. Unknown counts
|
|
710
|
-
are not zero. Name the source capture time: a trading source may need another rerun or an
|
|
711
|
-
agreed cutover.
|
|
712
|
-
|
|
713
|
-
## Required final report contents
|
|
714
|
-
|
|
715
|
-
When execution finishes, the deterministic completion outputs must explicitly include:
|
|
716
|
-
|
|
717
|
-
- the destination site's **dashboard URL**
|
|
718
|
-
- the destination site's **editor URL** only when editor work was actually performed or
|
|
719
|
-
the next required step is explicitly in the editor
|
|
720
|
-
- the current **preview URL** only when public route/site verification is relevant to the
|
|
721
|
-
completed work
|
|
722
|
-
- whether store routes such as product/cart/checkout were verified or still unverified
|
|
723
|
-
- URL preservation counts: base paths captured, URL ledger rows written, redirect plans
|
|
724
|
-
recorded, unresolved public URLs, and manual-review URL rows
|
|
725
|
-
- safe-mode counts: email fields replaced, phone fields replaced, records skipped with
|
|
726
|
-
`SAFE_MODE_SUSPICIOUS_EMAIL`, and the project-relative safe-mode ledger paths. Do not
|
|
727
|
-
include original email addresses or phone numbers.
|
|
728
|
-
- dry-run counts when `dryRun: true`: requests built, Wix calls skipped, would create,
|
|
729
|
-
would update, would delete, would require live lookup, and local validation failures.
|
|
730
|
-
Do not report dry-run rows as created, updated, imported, installed, published, or
|
|
731
|
-
verified in Wix.
|
|
732
|
-
- blocked-data request outcomes from `completion-report.json`, including every dependent
|
|
733
|
-
entity/field outcome, the worst-severity aggregate, whether a used snapshot is stale, and the
|
|
734
|
-
exact snapshot version/extraction timestamp/checksum. A 1-click `missing` request must say the
|
|
735
|
-
run did not pause to ask; an invalid input that fell back successfully is a warning, not a
|
|
736
|
-
write failure.
|
|
737
|
-
- an explicit statement that URL redirects/site routing were not applied in the current
|
|
738
|
-
import phase when `urlPreservation.applyRedirects` is `false`, the old-link status from
|
|
739
|
-
`completion-report.json.urlPreservation`, and that old emails and bookmarks may fail until
|
|
740
|
-
redirects are applied and verified on the public domain
|
|
741
|
-
- a plain-language distinction between:
|
|
742
|
-
- **catalog/data imported successfully**
|
|
743
|
-
- **website/homepage built successfully**
|
|
744
|
-
- **the voucher-reconciliation answer — in every terminal report of a run whose accepted
|
|
745
|
-
scope included coupons** (workflow step 6b). State in plain language which of
|
|
746
|
-
`not-applicable`, `reconciled`, `plan-pending-owner`, `remedied` or `not-run` the run
|
|
747
|
-
recorded, and say what it means: `plan-pending-owner` means money is still redeemable a
|
|
748
|
-
second time on the merchant's live store and the owner has decisions outstanding per code;
|
|
749
|
-
`not-run` means the step was due and did not happen, and that the answer expires at cutover
|
|
750
|
-
because the fresh source read stops existing and the target exposes no redemption count.
|
|
751
|
-
Never infer this from the coupon write counts — report the recorded field, and report a
|
|
752
|
-
missing field as `not-run`.
|
|
753
|
-
- **notification-mute state — in every terminal report** (completed, halted
|
|
754
|
-
to needs-user, or aborted; an aborted run is exactly the case where the owner is least
|
|
755
|
-
likely to remember the mute happened). Derive "was muted" **only from recorded state**
|
|
756
|
-
— the `mute-site-notifications` item in `setup/setup-verification.json` and the import
|
|
757
|
-
run's preflight log entries — never from strategy/config inference. When a successful
|
|
758
|
-
mute is recorded, state in plain language that **all site notifications are currently
|
|
759
|
-
muted** and stay muted until re-enabled; that the owner can **simply ask the agent to
|
|
760
|
-
unmute them** (on request the agent calls `unmuteSiteNotifications` and confirms
|
|
761
|
-
`muted: false` via `getSiteMuteState`); and how to re-enable manually. For existing
|
|
762
|
-
sites this line is mandatory and prominent. If no successful mute is recorded, do not
|
|
763
|
-
claim the site is muted — for a run where mute was in effect, that is a blocker that
|
|
764
|
-
should already have stopped the import at the preflight.
|
|
765
|
-
|
|
766
|
-
Do not report a successful catalog import as if it automatically means a finished
|
|
767
|
-
website. If the homepage/root preview is still blank or no site shell has been built,
|
|
768
|
-
say that explicitly in the final report.
|
|
769
|
-
|
|
770
|
-
State the **delivery mode** explicitly (see `wix-replatform` → "Delivery mode"):
|
|
771
|
-
|
|
772
|
-
- **`management` mode (default):** report that the deliverable is a **Wix-managed headless
|
|
773
|
-
backend** — data migrated and manageable from the dashboard, with **no customer-facing
|
|
774
|
-
website built (by design)**. Do not frame the missing storefront as an incomplete result.
|
|
775
|
-
You may note that a storefront can be generated on request (website mode, via
|
|
776
|
-
`wix-headless`), but do not build one unless the user asks.
|
|
777
|
-
- **`website` mode:** report the **storefront URL** produced by `wix-headless` and confirm
|
|
778
|
-
the released site serves the migrated catalog (not demo data).
|
|
779
|
-
|
|
780
|
-
## Inventory completion and resume
|
|
781
|
-
|
|
782
|
-
Run the generated inventory reconciliation for new AND previously crosswalked products.
|
|
783
|
-
Require the current inventory setup/canary receipt before stock writes, retaining the run's
|
|
784
|
-
notification guard. After each batch persist stock outcomes separately from product success.
|
|
785
|
-
If stock failed, resume only stock using existing product/variant IDs; never recreate a
|
|
786
|
-
product or increment a quantity to recover it.
|
|
787
|
-
|
|
788
|
-
Include `state/inventory-report.json` in the completion inputs: intended variant denominator,
|
|
789
|
-
reconciled/created/updated, failed/unverified, and source decision-needed counts. Unknown stock
|
|
790
|
-
and missing variants remain visible. Any unresolved inventory makes catalog completion partial;
|
|
791
|
-
a product count or HTTP 200 cannot clear it. Compare source versus verified target availability
|
|
792
|
-
per variant and summarize out-of-stock counts. A source with available variants cannot pass
|
|
793
|
-
with an entirely unavailable target. Dry-run inventory outcomes are simulated, never live proof.
|
|
794
|
-
|
|
795
|
-
## Completion artifact authority
|
|
796
|
-
|
|
797
|
-
At the end of the run, artifact authority should be explicit:
|
|
798
|
-
|
|
799
|
-
1. `execution-log.md` is authoritative for chronology and operator/debug context only
|
|
800
|
-
2. `execution/completion-report.json` is authoritative for final outcome
|
|
801
|
-
3. `execution/review/completion-summary.md` is the deterministic user-facing rendering of
|
|
802
|
-
`execution/completion-report.json`
|
|
803
|
-
|
|
804
|
-
This skill should not treat `execution-log.md` as the canonical source for final
|
|
805
|
-
imported/skipped/failed counts when `completion-report.json` exists.
|
|
806
|
-
|
|
807
|
-
That ordering is unchanged. What changed is that all four artifacts now actually get written,
|
|
808
|
-
by shipped code, rather than being required by this document and produced by nothing:
|
|
809
|
-
|
|
810
|
-
- `execution-log.md` — `appendExecutionLog(projectDir, entry)` in `lib/execution-log.js`.
|
|
811
|
-
Append-only: a resumed or recovery pass adds entries and never truncates or regenerates the
|
|
812
|
-
file, and every entry carries its own `runId` so a later pass's entries are distinguishable
|
|
813
|
-
from the first pass's without reading timestamps. Append one entry per lifecycle event: each
|
|
814
|
-
import step started and finished, every batch flush, every recovery pass, the completion
|
|
815
|
-
write, and the handoff generation.
|
|
816
|
-
- `execution/completion-report.json` and `execution/review/completion-summary.md` —
|
|
817
|
-
`writeCompletionReport(projectDir, report)` in `lib/completion-report.js`. The summary is
|
|
818
|
-
**rendered from the report object**, never composed independently and never derived from
|
|
819
|
-
`execution-log.md`. The writer itself joins source coverage (below); pass it the report from
|
|
820
|
-
`createCompletionReport` unchanged and never add `sourceCoverage` yourself — it refuses that.
|
|
821
|
-
- `execution/live-import-summary.json` — `writeLiveImportSummary` in `lib/import-recovery.js`,
|
|
822
|
-
called after **every batch**, not once at the end. See "Per-batch accounting" below.
|
|
823
|
-
|
|
824
|
-
For order history, use the generated accounting block from `rp-import-codegen`: collect the
|
|
825
|
-
final per-order stage outcomes with `collectOrderStageResiduals` and pass its rows to
|
|
826
|
-
`createCompletionReport` before calling `writeCompletionReport`. Omitted stage accounting is
|
|
827
|
-
refused for order reports. Persist these compact outcomes with batch accounting and restore
|
|
828
|
-
them on resume; a retry is not a second imported order, and a recovered stage must replace
|
|
829
|
-
its earlier failure. Check the saved report and summary for both the incomplete status and
|
|
830
|
-
the affected source keys when any payment, refund, or invoice stage failed.
|
|
831
|
-
|
|
832
|
-
`appendExecutionLog` is not a heartbeat. Liveness and progress output for watching a running
|
|
833
|
-
script is `lib/progress-log.js`, writes to a caller-supplied path, and is a separate contract.
|
|
834
|
-
|
|
835
|
-
### Poll the health-check script, and redispatch on a stalled verdict
|
|
836
|
-
|
|
837
|
-
Do not drive a long-running generated `run-import.js`/`run-extract.js` by raw `tail -n 1`
|
|
838
|
-
alone once it has been launched. After dispatching the script, poll
|
|
839
|
-
`skills/wix-replatform/scripts/execution-health-check.js <projectDir> [--script <name>]
|
|
840
|
-
[--stale-after <duration>]` on an interval — default every 3 minutes; a shorter interval is
|
|
841
|
-
fine for a small run — instead of, or in addition to, the raw last-line tail. The
|
|
842
|
-
script reads `execution/progress.ndjson` and `execution/completion-report.json` and
|
|
843
|
-
answers exactly one question: `healthy`, `stalled`, or `complete`.
|
|
844
|
-
|
|
845
|
-
On a `stalled` verdict, treat it **exactly like a crashed process already found in
|
|
846
|
-
`execution/progress.ndjson`** — the same recovery as any other abnormal exit: redispatch a
|
|
847
|
-
fresh run from the last durable checkpoint. Never wait indefinitely on a subagent's own
|
|
848
|
-
promised resume ("it will pick back up on its own") once the health check reports
|
|
849
|
-
`stalled`; a subagent's own claim about its future behavior is not evidence, and what
|
|
850
|
-
this check exists to catch is a healthy run mistaken for one that would
|
|
851
|
-
never call back. A `healthy` verdict is not itself proof of eventual completion — keep
|
|
852
|
-
polling on the same interval until the verdict is `complete` or `stalled`.
|
|
853
|
-
|
|
854
|
-
Before redispatching on a `stalled` verdict, confirm the project's `run-import.js` (or
|
|
855
|
-
`run-extract.js`) was actually generated with the heartbeat wrapping — a project
|
|
856
|
-
codegen'd before this instruction existed may have entity-pass functions that never call
|
|
857
|
-
`withHeartbeat`/`startHeartbeat` at all, in which case `stalled` reflects an instrumentation
|
|
858
|
-
gap in that generated file, not the process. Grep the generated script for `withHeartbeat` /
|
|
859
|
-
`startHeartbeat`; if a write loop is missing it, retrofit that loop the same way
|
|
860
|
-
`rp-import-codegen/SKILL.md` describes for newly generated code before trusting the verdict
|
|
861
|
-
enough to kill and redispatch.
|
|
862
|
-
|
|
863
|
-
### Entity-by-entity QA is mandatory before treating an import phase as done
|
|
864
|
-
|
|
865
|
-
`wix-replatform`'s router requires a phase-level QA subagent at the end of the import phase
|
|
866
|
-
(its "Route before acting" step 5). For import, that review must be entity-by-entity against
|
|
867
|
-
the accepted mapping plan (`mapping/entity-decisions/*.json`), not a read of the top-level
|
|
868
|
-
`status` field in `execution/completion-report.json` or a paragraph of prose asserting the run
|
|
869
|
-
went well. A dedicated QA subagent — never the Developer subagent that produced the report,
|
|
870
|
-
and never the routing agent's own read of the summary — must, for every mapped entity/subtype:
|
|
871
|
-
|
|
872
|
-
- confirm its `completion-report.json` row reconciles (`imported + alreadyPresentByCrosswalk +
|
|
873
|
-
deferred + failed == inScope`) and is backed by real rows in `state/attempts/write-attempts.ndjson`
|
|
874
|
-
or `state/crosswalk/crosswalk.ndjson` — a bare counter with no corresponding ledger rows is a
|
|
875
|
-
swallowed error, not a clean pass;
|
|
876
|
-
- for any entity reported blocked, deferred, or skipped, independently re-verify the stated
|
|
877
|
-
reason is still true right now (spot-check the live source data or the live destination API,
|
|
878
|
-
not the report's own prose) — a blocked reason written on an earlier pass can go stale the
|
|
879
|
-
moment its underlying cause is fixed elsewhere, and nothing re-checks it automatically;
|
|
880
|
-
- treat "the user already decided to defer this" as a real answer only when a decision file
|
|
881
|
-
actually records that choice; an assumption that a gap must be a deferred product decision,
|
|
882
|
-
invented to explain why nothing ran, is not a substitute for checking.
|
|
883
|
-
|
|
884
|
-
If QA finds a stale reason, an unverified blocked status, or a swallowed failure, it must
|
|
885
|
-
demand a fresh Developer dispatch for that entity before the phase is reviewed — a plausible
|
|
886
|
-
top-level status string never closes this out on its own. Repeat this full entity-by-entity
|
|
887
|
-
pass after every resumed or recovery run, not only the first: a dispatch that fixes one
|
|
888
|
-
entity's crash or slowness does not certify any other entity's completeness, and a phase
|
|
889
|
-
already marked reviewed goes back to "needs review" the moment a later pass changes its
|
|
890
|
-
completion report.
|
|
891
|
-
|
|
892
|
-
**Finish the pass by writing the attestation, not by saying so in prose**. Once
|
|
893
|
-
every mapped entity/subtype above has been checked, compile the per-entity results (the ten
|
|
894
|
-
`completion-report.js` fields for a full-mode row, or `imported`/`skipped` for a quick-mode
|
|
895
|
-
row, plus `blockedReasonsReverified` for any row with a blocked, deferred, failed, unresolved
|
|
896
|
-
or skipped count) into a JSON array and run:
|
|
897
|
-
|
|
898
|
-
```
|
|
899
|
-
node skills/wix-replatform/scripts/entity-qa-attestation.js <projectDir> \
|
|
900
|
-
--entities-file <path to the compiled per-entity results> \
|
|
901
|
-
--verified-by <QA subagent label>
|
|
902
|
-
```
|
|
903
|
-
|
|
904
|
-
This computes the completion report's own digest, resolves the independent mapped-entity
|
|
905
|
-
coverage source (`mapping/mapping-plan.json`, or `quick-mode/plan.json` for quick mode), and
|
|
906
|
-
writes `execution/qa/entity-qa-attestation.json` only if it validates. Finalization
|
|
907
|
-
(`orchestration-router.js` / `scripts/migration-completion.js`) now refuses without a fresh,
|
|
908
|
-
complete attestation matching the report that is shipping — a missing, stale or failed
|
|
909
|
-
attestation routes the run back to this pass, never to a silent "completed". A count the
|
|
910
|
-
writer reports as mismatched is the same defect this section already requires: send that
|
|
911
|
-
entity back to a fresh Developer dispatch, then re-run the full pass and the writer.
|
|
912
|
-
|
|
913
|
-
## Per-batch accounting
|
|
914
|
-
|
|
915
|
-
Flush the run's accounting into the project after every batch, through the same shared writer
|
|
916
|
-
that produces the final record. An importer that holds its counters until the end loses them to
|
|
917
|
-
any interruption, and a long import redirected to a temporary file loses them to the shell; a
|
|
918
|
-
run that dies halfway must still leave a truthful partial account.
|
|
919
|
-
|
|
920
|
-
**Counts are held, never re-derived.** The figures come from the importer's own counters for the
|
|
921
|
-
current run. A count recovered by re-reading the append-only attempt ledger afterwards sweeps in
|
|
922
|
-
dry-run passes, retried batches and earlier recovery passes — that is how a run's counts inflate well past the number of records.
|
|
923
|
-
|
|
924
|
-
### Coverage check against the attempt journal
|
|
925
|
-
|
|
926
|
-
Every `writeLiveImportSummary` flush that names a run id checks its held counters against that
|
|
927
|
-
run's own rows in `state/attempts/write-attempts.ndjson`, and adds the result as `coverageCheck`
|
|
928
|
-
on the written summary. The held counters are never replaced; a disagreement is reported, not
|
|
929
|
-
hidden, and the write still completes.
|
|
930
|
-
|
|
931
|
-
At the end of the run, pass the run's own `coverageCheck` to `createCompletionReport` — read it
|
|
932
|
-
back from `execution/live-import-summary.json` and use it only when its `runId` equals the run
|
|
933
|
-
being completed (`input.runId`); `live-import-summary.json` is one file shared by every run,
|
|
934
|
-
so "the last `coverageCheck` in the file" is never a safe substitute for checking the run id. Also
|
|
935
|
-
pass `coverageCheckExpected: true` whenever this run called `writeLiveImportSummary` with a run id
|
|
936
|
-
at least once, so an omitted or rejected-run-id check is recognized as this run's own unresolved
|
|
937
|
-
gap rather than silently ignored. This is opt-in: an existing importer that
|
|
938
|
-
has not adopted this contract never sets `coverageCheckExpected`, and a missing check there changes
|
|
939
|
-
nothing — do not set it for a project that never calls `writeLiveImportSummary` with a run id.
|
|
940
|
-
|
|
941
|
-
Do not present a held count as confirmed before this check runs: `coverageCheck.status` is
|
|
942
|
-
`"agrees"`, `"mismatch"`, or `"unchecked"`, and only `"agrees"` means the journal
|
|
943
|
-
corroborates it.
|
|
944
|
-
|
|
945
|
-
## Reporting records that did not arrive
|
|
946
|
-
|
|
947
|
-
Records that did not arrive go into four separate sections of the completion report, never
|
|
948
|
-
merged into one list of issues, because they need four different responses:
|
|
949
|
-
|
|
950
|
-
| Field | Meaning |
|
|
951
|
-
| --- | --- |
|
|
952
|
-
| `losses[]` | Permanent losses — the destination cannot represent the record and no retry changes that |
|
|
953
|
-
| `exclusions[]` | Deliberate exclusions — we chose not to import these, with a count, a rationale, and whether an operator gate was recorded |
|
|
954
|
-
| `unresolved[]` | Written to the destination but not mapped, or mapped but unaccounted |
|
|
955
|
-
| `droppedFields[]` | The record arrived in a degraded form — the one that vanishes most easily, because the record count reconciles perfectly |
|
|
956
|
-
|
|
957
|
-
Each section renders even when empty, with an explicit "None." An omitted section is
|
|
958
|
-
indistinguishable from one nobody checked.
|
|
959
|
-
|
|
960
|
-
Anything the operator must do by hand goes in `operatorActions[]`, which renders **above** the
|
|
961
|
-
counts, each entry carrying a severity and a deadline reason.
|
|
962
|
-
|
|
963
|
-
`writeCompletionReport` also appends source access that outlives the migration
|
|
964
|
-
(`lib/source-access.js`). For a Shopify private-data run that connected, that is
|
|
965
|
-
`shopify-staff-account-removal` (`high`, entity the store domain): the store owner removes the
|
|
966
|
-
migration staff account after cutover and after the last Shopify read. It is listed on every
|
|
967
|
-
report, including an otherwise complete one, until the Import Operator records the owner's
|
|
968
|
-
confirmation with `rp-source-shopify` `scripts/shopify-session-check.js --confirm-staff-removal
|
|
969
|
-
owner-removed-account`; when the record is unreadable or missing the action says so and
|
|
970
|
-
`--repair-staff-access` rebuilds it as pending. It never changes the report's status.
|
|
971
|
-
|
|
972
|
-
For a Shopify run with any `shopify:customer-<kind>`, `shopify:order-<kind>` or
|
|
973
|
-
`shopify:customers-withheld-identity` coverage row, the writer also appends
|
|
974
|
-
`shopify-withheld-details-export` (`high`). A loss disposition does not close it: Shopify still
|
|
975
|
-
holds the only copy. After the final catch-up, the merchant exports customers and orders from
|
|
976
|
-
Shopify Admin; **Requires Import Operator** to run `rp-source-shopify`'s
|
|
977
|
-
`shopify-discovery.js --project <project> --confirm-withheld-export owner-exported`, regenerate
|
|
978
|
-
the report and verify the action is gone. A later extract `readAt` or a new withheld row reopens
|
|
979
|
-
it. The catch-up/checklist integration is not wired yet; the completion report is the
|
|
980
|
-
current durable handoff.
|
|
981
|
-
|
|
982
|
-
Shopify extract stop codes (`rp-source-shopify`), each a stop, never a retry loop. A source
|
|
983
|
-
catch-up (rerun for new and modified records) runs `shopify-extract.js --catch-up`, which reads
|
|
984
|
-
the whole store again in full; its **final re-read after Shopify activity stops** is a cutover
|
|
985
|
-
task for the Import Operator (check that `data/source-extract/extract-manifest.json` is
|
|
986
|
-
`complete` and every `readAt` is after the time activity stopped):
|
|
987
|
-
|
|
988
|
-
| Code | Meaning / next step |
|
|
989
|
-
| --- | --- |
|
|
990
|
-
| `source_auth_expired` | The CLI session lapsed. The stopping script creates a `manual_action` (`stage: execution`); run the session check (with `--connect` if asked), answer it, and the extract resumes from its manifest. **Requires Import Operator** |
|
|
991
|
-
| `shopify_throttled` | Shopify throttled one read on all 6 calls (31 s of backoff); re-run the extract later |
|
|
992
|
-
| `shopify_bulk_overdue` | A Shopify bulk export is still preparing after 4 hours. The extract holds at `awaiting_user_action` (exit 3) with one `question` action: answer `wait` (4 more hours) or `abort`, then run `shopify-extract.js` again. No duplicate question is created on restart |
|
|
993
|
-
| `shopify_bulk_overdue_aborted` | The operator answered `abort`: that dataset is `failed` with its `capture-failed` row `shopify:<entity>`; Shopify's operation is not cancelled. **Requires Import Operator**: `shopify-extract.js --retry-failed` reads it again |
|
|
994
|
-
| `shopify_bulk_failed` | A bulk dataset failed twice, was refused with `ACCESS_DENIED` and an unattributed cause, or is still `failed` from an earlier start. The extract stops on every start until the operator runs `shopify-extract.js --retry-failed` after fixing the cause in the message; then record the coverage decision `provided` for `shopify:<entity>`, or show the merchant the row at mapping. **Requires Import Operator** |
|
|
995
|
-
| `shopify_protected_fields_withheld` | A customer/order denial was re-probed with four ordinary 3-record reads and one or more error paths named a newly withheld kind, or a customer had no readable identity after projection. The new row is already upserted and promoted. Return through mapping for that exact coverageId; after mapping, the denied query resets with the narrower projection and finished queries do not rerun. A pathless or unrelated diagnostic uses `shopify_bulk_failed` instead and never narrows the projection |
|
|
996
|
-
| `shopify_bulk_download_failed` | The bulk file could not be downloaded whole (wrong status, size, final newline or a line that does not parse; or expired links) after the bounded retries. Same recovery as `shopify_bulk_failed` |
|
|
997
|
-
| `shopify_bulk_orphan_child` | A bulk file had a child row with no parent, or of a type the adapter does not fold. Same recovery; report it, because the bulk format may have changed |
|
|
998
|
-
| `shopify_extract_count_short` | The extract received fewer customers or orders than Shopify's exact count. The row `shopify:customers` / `shopify:orders` goes back through mapping for the merchant's decision; `--retry-failed` reads the dataset again |
|
|
999
|
-
| `shopify_extract_count_inexact` | Shopify gave only an "at least" count (or the count read failed). Never a pass: same row and recovery |
|
|
1000
|
-
| `shopify_gift_card_codes_unreadable` | Gift cards first appeared during extract. `shopify:gift-card-codes` was added and promoted; return to mapping for its disposition before continuing |
|
|
1001
|
-
| `shopify_gift_card_count_short` | The gift-card bulk read contains fewer cards created by its start than Shopify's exact count. The entry is `failed`; fix the cause and run `shopify-extract.js --retry-failed` for a new gated read. **Requires Import Operator** |
|
|
1002
|
-
| `shopify_gift_card_count_inexact` | Shopify returned a non-`EXACT` count, rejected the read-bound filter, or the count still failed after its bounded retries. Same failed-entry recovery; never treat it as zero or nothing owed |
|
|
1003
|
-
| `shopify_gift_card_amount_invalid` | A gift-card balance or initial value was not a plain decimal. The gated read failed before `done`; fix/report the source shape and use `--retry-failed` |
|
|
1004
|
-
| `shopify_extract_store_mismatch` / `shopify_extract_files_missing` | The extract manifest belongs to another store, or says `complete` but its final files are gone (run `shopify-extract.js --catch-up`). Nothing was read or changed |
|
|
1005
|
-
| `shopify_cli_node_unsupported` | Node.js older than 22.12: switch this terminal to Node.js 22.12 or later (for example the current LTS), check `node --version`, run the session check again. Nothing was installed or read. **Requires Import Operator** |
|
|
1006
|
-
| `shopify_cli_version_changed` | The adapter's CLI is not 4.8.3; reinstall through the session check with `--install` (operator consent) |
|
|
1007
|
-
| `shopify_cli_incompatible` | The adapter's CLI install is damaged; reinstall with `--install` |
|
|
1008
|
-
| `shopify_api_version_unsupported` | Shopify no longer accepts the pinned API version; stop and report — moving the pin is a tested code change |
|
|
1009
|
-
|
|
1010
|
-
### CMS fallback for recognized plugin capabilities
|
|
1011
|
-
|
|
1012
|
-
A recognized plugin capability reaches CMS only with a signed eligibility entry **and** this
|
|
1013
|
-
migration's merchant approval (`pluginCmsFallback:<capability>`, recorded at the mapping
|
|
1014
|
-
review). Apply only the CMS fallbacks the merchant approved; write nothing for pending or
|
|
1015
|
-
declined ones; never delete or overwrite CMS data an earlier run wrote.
|
|
1016
|
-
|
|
1017
|
-
**Write-time guard (before any CMS write of a recognized capability).** Run it with the
|
|
1018
|
-
capability the plan is about to write, and write zero records for it unless it is allowed:
|
|
1019
|
-
|
|
1020
|
-
```bash
|
|
1021
|
-
node skills/wix-replatform/scripts/cms-fallback.js guard --project-dir <project> --capability <capability>
|
|
1022
|
-
```
|
|
1023
|
-
|
|
1024
|
-
Exit `2` means refused: the coverage row is not an approved CMS fallback, the approval fails
|
|
1025
|
-
the shape check or no longer matches the register, or the current resolution digest differs
|
|
1026
|
-
from the one in `plugin-coverage.json`, the mapping plan or the setup plan. Generated import
|
|
1027
|
-
code may call `cmsFallbackWriteGuard(projectDir, { attempted })` from
|
|
1028
|
-
`skills/wix-replatform/lib/plugin-cms-fallback.js` directly. The router is the primary gate;
|
|
1029
|
-
this is defence in depth.
|
|
1030
|
-
|
|
1031
|
-
**Completion.** Pass `cmsFallback: { coverage, refusals, writes, previousReport }` to
|
|
1032
|
-
`createCompletionReport` — `coverage` is `discovery/plugin-coverage.json`, `refusals` the
|
|
1033
|
-
guard's refusals, `writes` this run's CMS writes per approved capability
|
|
1034
|
-
(`{ capability, collections[], count }`), `previousReport` the prior
|
|
1035
|
-
`execution/completion-report.json` when one exists. It derives one operator action per case
|
|
1036
|
-
and persists `cmsFallbackWrites` for the next run:
|
|
1037
|
-
|
|
1038
|
-
| `code` | Severity | When |
|
|
1039
|
-
| --- | --- | --- |
|
|
1040
|
-
| `plugin-cms-fallback-feature-absent` | medium | an approved fallback: records archived in CMS; the plugin's feature is not restored — rebuild or replace it in Wix |
|
|
1041
|
-
| `plugin-cms-fallback-undecided` | high when records exist | eligible but pending (awaiting, stale, quarantined, or target knowledge unavailable): records were not migrated |
|
|
1042
|
-
| `plugin-cms-fallback-declined` | high when records exist | the merchant declined: records were not migrated |
|
|
1043
|
-
| `plugin-cms-fallback-withdrawn` | high | CMS records written by an earlier run under an answer that no longer applies (declined, stale, superseded by a native target, no longer eligible): names the collection(s) and count; the Cutover Operator keeps or removes them by hand |
|
|
1044
|
-
| `plugin-cms-fallback-write-refused` | high | the write-time guard refused a write. **Requires Import Operator:** rerun from the router so coverage and both plans are regenerated, then import again |
|
|
1045
|
-
|
|
1046
|
-
Resolution stays split: a reconciled CMS collection resolves *storage* only; the
|
|
1047
|
-
`feature-absent` item is resolved only by a manual check that the replacement feature works on
|
|
1048
|
-
the Wix site.
|
|
1049
|
-
|
|
1050
|
-
## Cause attribution
|
|
1051
|
-
|
|
1052
|
-
A failure carried into the completion report or the handoff takes one of exactly three shapes.
|
|
1053
|
-
There is no fourth, and no bare free-text cause:
|
|
1054
|
-
|
|
1055
|
-
| `causeConfidence` | Requires | Renders as |
|
|
1056
|
-
| --- | --- | --- |
|
|
1057
|
-
| `verified-source` | a named destination-side check that ruled the destination out, recorded with its result | the cause, followed by the check |
|
|
1058
|
-
| `verified-target` | a named destination-side check that confirmed a destination or same-run cause | the cause, followed by the check |
|
|
1059
|
-
| `unverified` | nothing | `cause unverified`, and **no cause text at all** |
|
|
1060
|
-
|
|
1061
|
-
The check is recorded as `{ kind, target, result }`. An `unverified` row must not carry a
|
|
1062
|
-
`cause` string — `writeCompletionReport` refuses one that does. A hypothesis printed next to the
|
|
1063
|
-
word "unverified" is read as a finding by everyone skimming. A migration must not copy a source
|
|
1064
|
-
defect forward, and it must equally not invent one: an unchecked "the source data is bad" costs
|
|
1065
|
-
the merchant a trip into their old platform to fix data that was never broken, and it closes the
|
|
1066
|
-
only investigation that would have found the real cause.
|
|
1067
|
-
|
|
1068
|
-
## Localhost media before live import
|
|
1069
|
-
|
|
1070
|
-
When source media URLs are local/private, ask the user to choose one path before live
|
|
1071
|
-
media writes:
|
|
1072
|
-
|
|
1073
|
-
- Expose the source with a public HTTPS tunnel such as ngrok:
|
|
1074
|
-
|
|
1075
|
-
```bash
|
|
1076
|
-
brew install ngrok
|
|
1077
|
-
ngrok config add-authtoken "<YOUR_AUTHTOKEN>"
|
|
1078
|
-
ngrok http 8090
|
|
1079
|
-
export WP_BASE_URL=https://<id>.ngrok-free.app
|
|
1080
|
-
```
|
|
1081
|
-
|
|
1082
|
-
- Or skip/defer media import and record the effect on hero images, galleries, downloadable
|
|
1083
|
-
files, and other media-dependent references.
|
|
1084
|
-
|
|
1085
|
-
Non-media entities may continue if the execution plan clearly excludes or defers media.
|
|
1086
|
-
|
|
1087
|
-
## Artifact to create or update
|
|
1088
|
-
|
|
1089
|
-
- `migrations/<project>/execution-log.md`
|
|
1090
|
-
- `migrations/<project>/execution/live-import-summary.json`
|
|
1091
|
-
- `migrations/<project>/execution/completion-report.json`
|
|
1092
|
-
- `migrations/<project>/execution/review/completion-summary.md`
|
|
1093
|
-
- `migrations/<project>/execution/review/migration-handoff.md` and its
|
|
1094
|
-
`migration-handoff.json` sidecar — the run's account of the migration, generated **after the
|
|
1095
|
-
last write** from the final outcome record. `generatePostExecutionHandoff` refuses and returns
|
|
1096
|
-
a typed reason when there is no `execution/completion-report.json`; it never writes a clean
|
|
1097
|
-
document from the plan
|
|
1098
|
-
- `migrations/<project>/execution/recovery-log.json` for every resumed, partial,
|
|
1099
|
-
missing-only, failed-only, deferred-only, or unresolved-only run
|
|
1100
|
-
- `migrations/<project>/execution/unresolved-writes.ndjson` — the re-read queue: one row per
|
|
1101
|
-
record whose latest journal status is unresolved (`succeeded_unverified`, or a `started` row
|
|
1102
|
-
with no terminal follow-on). A projection rebuilt from the attempt journal, never a source of
|
|
1103
|
-
truth; deleting it loses nothing
|
|
1104
|
-
- `migrations/<project>/state/attempts/write-attempts.ndjson` — the append-only per-record
|
|
1105
|
-
ledger. Never rewritten, trimmed or rotated; a validation pass writes to
|
|
1106
|
-
`state/sample/attempts/write-attempts.ndjson` instead and never opens this file
|
|
1107
|
-
- audit/report artifacts emitted by the shared import runtime
|
|
1108
|
-
|
|
1109
|
-
## Dependency recovery and cutover handoff
|
|
1110
|
-
|
|
1111
|
-
Read `execution/dependency-readiness.json` for task blockers, affected source keys and the
|
|
1112
|
-
named recovery. The gate derives it from current site-bound task passes, latest attempt
|
|
1113
|
-
outcomes, verified local mappings, setup receipt and approved census/field rules; editing
|
|
1114
|
-
the projection cannot unlock writes. Preserve `state/readiness/task-passes.ndjson` across
|
|
1115
|
-
resumes. Legacy or foreign-site evidence requires the named reconciliation/read-back.
|
|
1116
|
-
Never adopt an unverified candidate ID or resend an order to repair dependency evidence.
|
|
1117
|
-
|
|
1118
|
-
Retain record deferrals in the existing attempt journal and reference-fidelity/cardinality
|
|
1119
|
-
gaps in `mapping/review/mapping-gaps.json`. Generate the shared completion report so its
|
|
1120
|
-
`operatorActions` carry the affected work, prerequisites, next action, resolution evidence
|
|
1121
|
-
and **Requires Import Operator** / **Copy prompt for Import Operator** instructions.
|
|
1122
|
-
The Cutover Operator works on another machine: recovery requiring the original project
|
|
1123
|
-
must name that role and prompt. Resolve the underlying producer/approval/reference,
|
|
1124
|
-
reevaluate, then resume only eligible deferred records. These artifacts preserve the handoff;
|
|
1125
|
-
future cutover UI ingestion is not yet wired.
|
|
1126
|
-
|
|
1127
|
-
## Recovery artifact contract
|
|
1128
|
-
|
|
1129
|
-
Targeted recovery is a first-class import mode, not a side script. Every selective,
|
|
1130
|
-
resumed, partial, missing-only, failed-only, deferred-only, or unresolved-only run must append one entry to
|
|
1131
|
-
`execution/recovery-log.json` and update `execution/live-import-summary.json` through the
|
|
1132
|
-
same shared summary writer used by the main import path.
|
|
1133
|
-
|
|
1134
|
-
Each recovery entry must include:
|
|
1135
|
-
|
|
1136
|
-
- recovery id
|
|
1137
|
-
- run id — the id the importer minted at process start, so the entry is attributable to a pass
|
|
1138
|
-
- timestamp
|
|
1139
|
-
- selection filters
|
|
1140
|
-
- reason
|
|
1141
|
-
- records selected
|
|
1142
|
-
- records attempted
|
|
1143
|
-
- imported
|
|
1144
|
-
- already present
|
|
1145
|
-
- failed
|
|
1146
|
-
- deferred
|
|
1147
|
-
- unresolved — its own count, **never** summed into `failed`. A write whose outcome we do not
|
|
1148
|
-
know is read back, not re-sent, and a recovery record that folds it into the failure count
|
|
1149
|
-
reconciles arithmetically and is wrong
|
|
1150
|
-
- crosswalk changes
|
|
1151
|
-
- summary changes
|
|
1152
|
-
- operator-visible outcome
|
|
1153
|
-
- links to detailed logs
|
|
1154
|
-
|
|
1155
|
-
Do not overwrite earlier recovery entries. Failed or deferred records from an earlier
|
|
1156
|
-
attempt must remain visible after a later successful recovery; the newer recovery entry and
|
|
1157
|
-
summary delta explain what changed.
|
|
1158
|
-
|
|
1159
|
-
## Shipping delivery estimates on a finished project
|
|
1160
|
-
|
|
1161
|
-
Before the delivery-estimate fix, generated importers sent the delivery estimate under a name Wix drops, so
|
|
1162
|
-
their shipping options show no delivery time. Earlier migrations are reported, **never edited**.
|
|
1163
|
-
For a finished project whose importer predates that fix, run:
|
|
1164
|
-
|
|
1165
|
-
```bash
|
|
1166
|
-
node skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js --project-dir <projectDir>
|
|
1167
|
-
```
|
|
1168
|
-
|
|
1169
|
-
- It only reads Wix (GET); it never POSTs or PATCHes. It reads the crosswalk, the attempt
|
|
1170
|
-
journal, `orchestration/decisions.json`, the extract if present, and Site Properties once.
|
|
1171
|
-
- It writes `execution/shipping-estimates.json`, replaces the shipping `operatorActions` in
|
|
1172
|
-
`execution/completion-report.json`, and regenerates the post-execution handoff.
|
|
1173
|
-
- The only other local write is one crosswalk upsert when a recorded
|
|
1174
|
-
`shipping-option-target-missing:<optionKey>` decision of `recreated:<id>` adopts a new id.
|
|
1175
|
-
- Rerun it after a decision is recorded or a delivery time is entered in Business Manager. That is
|
|
1176
|
-
how a finished project closes its shipping items.
|
|
1177
|
-
- `--list <code>` prints every option recorded under that code, with no Wix call. Use it to relay
|
|
1178
|
-
a list of more than 15 options to the Cutover Operator.
|
|
1179
|
-
|
|
1180
|
-
## Completion report contract
|
|
1181
|
-
|
|
1182
|
-
This skill should expect the shared import runtime to emit a machine-readable completion
|
|
1183
|
-
artifact and should preserve it as the primary post-run result.
|
|
1184
|
-
|
|
1185
|
-
`execution/completion-report.json` should be the authoritative source for:
|
|
1186
|
-
|
|
1187
|
-
- final run status:
|
|
1188
|
-
`complete | complete_with_warnings | complete_with_recovered_records |
|
|
1189
|
-
complete_with_deferred_records | incomplete_with_failures |
|
|
1190
|
-
incomplete_with_mismatches | aborted`
|
|
1191
|
-
- final completeness counts by entity and subtype: extracted, in-scope, attempted,
|
|
1192
|
-
imported, already present by crosswalk, deferred, failed, skipped out of scope, and
|
|
1193
|
-
unexpected skipped
|
|
1194
|
-
- grouped skipped/deferred outcomes
|
|
1195
|
-
- grouped failure outcomes
|
|
1196
|
-
- mismatch rows where source, import, and crosswalk counts do not reconcile
|
|
1197
|
-
- URL preservation summary counts and artifact paths when URL preservation is enabled
|
|
1198
|
-
- `voucherReconciliation` — the answer to workflow step 6b, exactly one of:
|
|
1199
|
-
|
|
1200
|
-
| Value | Meaning |
|
|
1201
|
-
| --- | --- |
|
|
1202
|
-
| `not-applicable` | the accepted scope excluded coupons, or the source carried no usage-limited coupon |
|
|
1203
|
-
| `reconciled` | the step ran and every voucher reconciled |
|
|
1204
|
-
| `plan-pending-owner` | a plan was produced and is awaiting the owner's decisions per code |
|
|
1205
|
-
| `remedied` | approved remedies were applied and each was confirmed by a post-settle read-back |
|
|
1206
|
-
| `not-run` | the step was due and did not run |
|
|
1207
|
-
|
|
1208
|
-
There is no default. For a run whose scope included coupons, a **missing field reads as
|
|
1209
|
-
`not-run`, never as `not-applicable`** — an absent answer is exactly the state this field
|
|
1210
|
-
exists to make visible, and defaulting it to the benign value rebuilds the defect. `not-run`
|
|
1211
|
-
and `plan-pending-owner` are named in the completion headline and raise the final status to
|
|
1212
|
-
at least `complete_with_warnings` under the highest-severity rule below.
|
|
1213
|
-
- dashboard/editor/preview destinations
|
|
1214
|
-
- `sourceCoverage[]` and `sourceCoverageRecorded` (report schema v2) — what the source held
|
|
1215
|
-
that was never captured. `writeCompletionReport` joins `discovery/source-coverage.json`,
|
|
1216
|
-
`mapping/review/mapping-gaps.json` and `orchestration/decisions.json` by `coverageId` and folds
|
|
1217
|
-
the result into the one status. An open row is a gated exclusion (no floor; one grouped
|
|
1218
|
-
headline line), an ungated exclusion (`complete_with_warnings`), an accepted loss
|
|
1219
|
-
(`incomplete_with_failures`), or unresolved data — auth-gated, unsupported, skipped by rule,
|
|
1220
|
-
failed or declared-not-observed with a gap or a `declined` decision —
|
|
1221
|
-
(`incomplete_with_mismatches`, one headline line per capability). In-scope auth-gated,
|
|
1222
|
-
capture-failed and declared-not-observed rows also add a `high` `operatorActions[]` row: the
|
|
1223
|
-
source is still the only copy. The writer refuses when a stamped project's coverage file is
|
|
1224
|
-
missing or does not reconcile. A project whose `source-schema.json` has no
|
|
1225
|
-
`sourceCoverageContract` stamp (discovery from before this contract) records
|
|
1226
|
-
`sourceCoverageRecorded: false` and at least `complete_with_warnings`. Recovering a source
|
|
1227
|
-
route or credential is Import Operator work before execution; the handoff's *Not migrated
|
|
1228
|
-
from the source* section only tells the Cutover Operator what to recreate or confirm in Wix.
|
|
1229
|
-
- artifact references for logs and diagnostics
|
|
1230
|
-
|
|
1231
|
-
`execution/live-import-summary.json` should carry the same `entityCompleteness` accounting
|
|
1232
|
-
contract during/after the live import so short imports are visible before any manual count
|
|
1233
|
-
comparison. For every mapped entity/subtype row, the runtime must reconcile:
|
|
1234
|
-
|
|
1235
|
-
```text
|
|
1236
|
-
imported + alreadyPresentByCrosswalk + deferred + failed == inScope
|
|
1237
|
-
```
|
|
1238
|
-
|
|
1239
|
-
Any non-zero deferred, failed, or unexpected skipped count for an in-scope mapped entity
|
|
1240
|
-
class must appear in the completion headline. Any mismatch must set the final status to
|
|
1241
|
-
`incomplete_with_mismatches` unless the run was already `aborted`.
|
|
1242
|
-
|
|
1243
|
-
When more than one status applies, choose the highest-severity status in this order:
|
|
1244
|
-
|
|
1245
|
-
1. `aborted`
|
|
1246
|
-
2. `incomplete_with_mismatches`
|
|
1247
|
-
3. `incomplete_with_failures`
|
|
1248
|
-
4. `complete_with_deferred_records`
|
|
1249
|
-
5. `complete_with_recovered_records`
|
|
1250
|
-
6. `complete_with_warnings`
|
|
1251
|
-
7. `complete`
|
|
1252
|
-
|
|
1253
|
-
The user-facing completion summary should be rendered deterministically from that artifact.
|
|
1254
|
-
The completion report should be produced from the runtime's in-memory counters for the
|
|
1255
|
-
current `runId`, with audit-log aggregation used only as a verification/fallback path.
|
|
1256
|
-
When audit events are read, filter by `runId`; never infer final counts by counting every
|
|
1257
|
-
line in an append-only `import-audit.ndjson` that may include dry-runs, retries, and
|
|
1258
|
-
previous recovery passes.
|
|
1259
|
-
|
|
1260
|
-
## Minimum execution log contents
|
|
1261
|
-
|
|
1262
|
-
- run timestamp
|
|
1263
|
-
- command or entrypoint used
|
|
1264
|
-
- extracted source location / manifest used
|
|
1265
|
-
- entities processed
|
|
1266
|
-
- records read, transformed, written, skipped, failed
|
|
1267
|
-
- retry behavior
|
|
1268
|
-
- blocking errors
|
|
1269
|
-
- follow-up remediation
|
|
1270
|
-
- member activation status, when members are in scope (activation automation created and
|
|
1271
|
-
enabled post-window? label waves applied — which label, how many contacts per wave?) —
|
|
1272
|
-
see rp-target-wix members guidance; never mass-send set-password emails
|
|
1273
|
-
- dashboard URL
|
|
1274
|
-
- editor URL when relevant
|
|
1275
|
-
- preview URL when relevant
|
|
1276
|
-
- post-import route verification status (for example product/cart/checkout reachable or
|
|
1277
|
-
not yet installed)
|
|
1278
|
-
- URL preservation artifact paths and counts, including redirect plans and unresolved
|
|
1279
|
-
public URLs
|
|
1280
|
-
- explicit state classification: `catalog imported`, `site shell built`, or both
|
|
1281
|
-
- references to machine-readable report and audit artifacts
|
|
1282
|
-
|
|
1283
|
-
The execution log may mention outcome summaries, but it is not the authoritative source
|
|
1284
|
-
for final imported/skipped/failed counts.
|
|
1285
|
-
|
|
1286
|
-
## Guardrails
|
|
1287
|
-
|
|
1288
|
-
- **Import writes go through the executed artifact, not the agent.** Never perform import
|
|
1289
|
-
writes via `CallWixSiteAPI`/MCP as a substitute for running the script. MCP is
|
|
1290
|
-
verification-only here (see the section above). (Setup execution is out of scope for this
|
|
1291
|
-
rule — see `rp-execute-setup`.)
|
|
1292
|
-
- Prefer `execution/execution-manifest.json` over markdown when
|
|
1293
|
-
deciding what to run.
|
|
1294
|
-
- Prefer `execution/completion-report.json` over `execution-log.md` when reporting final
|
|
1295
|
-
outcome to the user.
|
|
1296
|
-
- Prefer `execution/recovery-log.json` over migration-local recovery scripts when
|
|
1297
|
-
explaining targeted recovery outcomes.
|
|
1298
|
-
- Prefer dry-runs or sample batches before full import.
|
|
1299
|
-
- Stop on systemic mapping or write failures rather than amplifying bad writes.
|
|
1300
|
-
- Preserve enough logging to support replay and debugging.
|
|
1301
|
-
|
|
1302
|
-
### On a destination the run did not create, the import is ADDITIVE — always
|
|
1303
|
-
|
|
1304
|
-
Every rule below is unconditional when `WIX_SITE_STRATEGY=existing`. The site holds the
|
|
1305
|
-
owner's live business data, and nothing in this pipeline can undo a bulk write.
|
|
1306
|
-
|
|
1307
|
-
- **Never delete a pre-existing entity.** No products, categories, collections, posts,
|
|
1308
|
-
media or coupons — not to clear a failed partial import, not to "start clean" before a
|
|
1309
|
-
retry, not to resolve a collision. There is no reason good enough; a failed import is
|
|
1310
|
-
recovered by re-running an idempotent one, not by clearing the target.
|
|
1311
|
-
- **Never wipe the demo catalog.** That cleanup exists for a template's placeholder
|
|
1312
|
-
products on a site this run just scaffolded (see `resources/rp-destination/`). On an
|
|
1313
|
-
existing site those products are the owner's.
|
|
1314
|
-
- **Skip, do not overwrite.** A record already present — by crosswalk, then by the
|
|
1315
|
-
mapping's natural key — is skipped and counted as `skipped`, not rewritten. Only augment
|
|
1316
|
-
a pre-existing entity when the plan the user accepted says so for that entity type.
|
|
1317
|
-
**One narrow exception: a rerun's accepted update path.** A linked record whose
|
|
1318
|
-
source version changed may be updated through its entity's verified update writer, carrying
|
|
1319
|
-
the crosswalk's saved `targetRevision`. The crosswalk check still runs before every create;
|
|
1320
|
-
what the exception replaces is only the blanket skip of linked records, and only for the
|
|
1321
|
-
accepted update path. Matching a *pre-existing* Wix record by natural key never authorizes
|
|
1322
|
-
updating it — that stays the collision policy above.
|
|
1323
|
-
- **Never blank a field the source does not carry.** A source without a field means "no
|
|
1324
|
-
information", not "empty" — writing the empty value deletes data the owner entered by
|
|
1325
|
-
hand. Send partial updates; never a full replace built from source-only fields.
|
|
1326
|
-
- **Report what was left alone.** The completion report must count `skipped` alongside
|
|
1327
|
-
`imported` and `failed`, so the user can reconcile the plan's collision inventory against
|
|
1328
|
-
what actually happened. "Nothing was touched here" is a result, not an omission.
|
|
1329
|
-
|
|
1330
|
-
Default-location inventory completion requires both the Inventory item and the same Catalog variant to agree on availability. The reconciler checks this on fresh writes and no-write reruns. A Catalog disagreement or failed read stays unverified; retain it for recovery without blindly rewriting stock.
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
## Contact/product verification before completion
|
|
1334
|
-
|
|
1335
|
-
Execute generated contact/product callers through the shared verified import wrappers.
|
|
1336
|
-
Use the verification-state loader to read `state/write-verification.json` plus atomic
|
|
1337
|
-
batch checkpoints in `state/write-verification-journal/`. It replays committed checkpoints
|
|
1338
|
-
after interruption; the final snapshot compacts them. Published crosswalks carry receipt
|
|
1339
|
-
references, while expected/actual entities remain in protected verification state. Candidate IDs are recovery information, not usable mappings. A crosswalk hit
|
|
1340
|
-
or a `--missing-only` selection still requires target identity/value verification.
|
|
1341
|
-
Preserve uncertain write outcomes and reconcile before retrying; do not create again
|
|
1342
|
-
because the response was lost. Never repair historical contamination by blanket clearing.
|
|
1343
|
-
|
|
1344
|
-
Shared completion inputs must include `siteId`, each contact/product row's intended
|
|
1345
|
-
`sourceKeys`, `verificationKind: "contact"` or `"product"` from the accepted mapping,
|
|
1346
|
-
and `verification[entity]` from the wrapper. Declare `verificationKind: "none"` explicitly
|
|
1347
|
-
for entities outside these comparators; an unknown name without a policy stays incomplete. Count-only completion cannot
|
|
1348
|
-
satisfy these entities. Missing or conflicting evidence yields incomplete status and a
|
|
1349
|
-
reconciliation action. Explicitly empty source sets have no data; empty reports cannot
|
|
1350
|
-
cover a nonempty set. Quick Shopify separately records its product read-back results and
|
|
1351
|
-
keeps stock permission failures partial and resumable; setup still does not write stock.
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
The mere presence of `state/.lock/` does not mean an importer is running. Each importer
|
|
1355
|
-
owns a uniquely named PID/host claim there, and a resume automatically removes claims
|
|
1356
|
-
whose local process is dead (including after SIGKILL). A live process continues to block
|
|
1357
|
-
concurrent imports. For a claim from another host, an unrecognized legacy file, or a reused
|
|
1358
|
-
PID, first confirm that its importer is stopped on the owning host, then remove only that
|
|
1359
|
-
claim file and rerun the same command. Do not remove a live owner's claim or the whole state
|
|
1360
|
-
folder. An empty legacy `.lock` directory needs no manual cleanup.
|
|
1361
|
-
|
|
1362
|
-
A failed target read keeps the previous verified crosswalk mapping and receipt reference.
|
|
1363
|
-
The current verification report remains partial, so that retained mapping does not turn a
|
|
1364
|
-
failed read into a new completion claim. Revoke mappings when identity is contradicted;
|
|
1365
|
-
value-only differences require the existing update/review flow.
|
|
1366
|
-
|
|
1367
|
-
## Discovered-set outcome handoff
|
|
1368
|
-
|
|
1369
|
-
After writing the final completion report and before generating the post-execution handoff, run `node scripts/discovered-set-status.js build <projectDir>` in standard mode. It joins the approved discovered scope to actual outcomes, with unknown counts retained as unknown. Its Import Operator prompts stay in the handoff under Urgent Operator Actions; send those prompts to the Import Operator for recovery in the original migration environment. Do not resolve partial, failed, deferred or pending scope by ticking a manual acknowledgement. Only a merchant or Cutover Operator may record completed `manual-open` work through `scripts/discovered-set-status.js resolve`, with short evidence containing no record values. Quick mode keeps its existing path.
|