rp-execute-import
Chạy pipeline trích xuất/nhập khẩu đã được tạo và ghi lại kết quả thực thi. Sử dụng khi thiết lập và tạo mã hoàn tất và người dùng đã phê duyệt kế hoạch thực thi.
npx skills add https://github.com/wix/skills --skill rp-execute-importrp-execute-import
Execute the generated migration pipeline and capture import results.
Purpose
This skill runs the generated extract/import pipeline for the active project once setup and code generation are complete.
Required inputs
- generated code under
migrations/<project>/src/ migrations/<project>/import-plan.mdmigrations/<project>/setup-verification.md
Preconditions
Do not proceed until:
- setup verification shows required items are passed or accepted; an unrecovered blocker halts to needs-user
- reader, transform, and writer code exist for the intended entities
- execution strategy for batching, retries, and checkpoints is clear
- the execution plan report has been presented and the user has accepted it (see below)
Execution plan & user acceptance (required gate)
This gate precedes all writes to the user's site — both rp-execute-setup
provisioning and this import. Before writing anything, produce a human-readable
execution plan report and obtain explicit user acceptance. Do not write anything until
the user accepts. The report must show:
- Setup changes to be made first: apps to install (Blog / Members / Wix-Data enabler), Wix Data enablement, and collections to create — so the user sees the site changes, not just the content writes.
- What will be imported and where: each source entity → its Wix target (app or
collection) with record counts — e.g. posts → Wix Blog (1088); episodes →
PodcastEpisodes(86); categories/tags → Blog taxonomies; media → Media Manager (~1499). - What will NOT migrate cleanly / needs manual action: the lossy and blocked items,
drawn from the mapping plan's faithfulness ledger and any
setup-verification.mditems still manual or blocked — e.g. category hierarchy flattened, comments anonymized, drafts absent without auth, storage-plan upgrade required. This must also include any target with no verified Wix primitive — state whether it falls back to a generic CMS collection, to anunverified/best-effort runtime-derived call, or is skipped. Nothing unverified or lossy may be written without first appearing here for consent. Coupons follow the same native-first rule as other native Wix entities: prefer native Wix Coupons, and mention CMS fallback only for truly unsupported coupon semantics.- Always state the analytics-data exclusion explicitly. Historical analytics data — traffic / visitor stats accumulated on the source — is out of scope and is not imported (see "Out of scope" below). Call this out in the plan so the user knows before accepting that analytics data will not migrate; do not let it pass silently.
- Order & idempotency: the write order and how re-runs dedupe. Be explicit that
source IDs are the stable migration key, while many native Wix target IDs are
server-assigned. The plan must state whether each entity re-run resolves via a
client-controlled source-id field on the target or via a durable
sourceId -> targetIdcrosswalk.
Persist this in import-plan.md (or a sibling report). This is the defined approval
checkpoint: the job pauses, surfaces the plan to the user, and resumes only on
accept. Nothing is written before acceptance.
Out of scope — analytics (future enhancement)
Do not attempt to import analytics data. Historical traffic / visitor statistics — the accumulated analytics records on the source (page views, sessions, visitor counts, time-series reports) — are not part of the migration. Do not generate readers, transforms, or writers for them. (This is about the data, not analytics configuration/setup such as tracking tags — that is a separate concern and not what this exclusion covers.)
- Surface it before execute. This exclusion must appear in the execution-plan report's "What will NOT migrate" list (see the gate above) so the user is told before they accept and we begin writing — not discovered afterward.
- Future enhancement. Analytics migration is a deferred scope item, not a permanent limitation. If/when a faithful source→Wix analytics path exists, revisit and lift this exclusion. Until then, treat analytics as explicitly skipped.
Execute the generated scripts — never an agentic MCP flow (required)
The import is performed by running the generated artifact (node the project's
entrypoint under migrations/<project>/src/), which writes to Wix via its own transport
(fetch + injected credentials to www.wixapis.com, or the Wix client SDK). The agent
must not perform the import writes itself by issuing per-record Wix MCP calls
(CallWixSiteAPI) and hand-translating shapes.
(Scope: this rule is import-specific. Setup execution (rp-execute-setup) may
currently use the agent+MCP for provisioning writes — an interim decision, with other
options still under discussion.)
Why the import must run the artifact:
- Reproducibility & idempotency. Re-runs, resume-from-checkpoint, write ordering, and
dedup keyed by source ID live in the artifact. For native Wix entities whose target IDs
are server-assigned, that means the artifact must maintain and consult a durable
sourceId -> targetIdcrosswalk. An agent reconstructing writes ad hoc bypasses all of it — a bulk, restartable data pipeline can't be driven by hand per record. - Verified shapes. The artifact calls
rp-target-wix's verified primitives. An agent rebuilding request bodies live re-opens the exact shape-bug class we eliminated (FR-007 Ricos enums, FR-009 tag body, FR-010heroImage.id). - MCP may be absent at runtime. Interactively-authenticated MCP servers can be missing in headless/cron runs, so MCP can't be depended on as the write transport regardless of whether the runtime is a pure script-runner or an agent. Either way the writes should flow through the tested artifact, not be reconstructed by the model.
- Validation honesty. Writing by hand via MCP leaves the artifact's own auth, request
execution, async-media polling, retry, and checkpoint code unexercised — a green test
then says nothing about the path real users get. The Wix MCP's role here is
grounding/verification at codegen time and the one-time live contract test in
rp-target-wix, not the import transport.
Consequence for credentials: the artifact needs real Wix write credentials to run. If they
are absent, halt to needs-user — do not substitute the agent's MCP account auth to
"get the writes done." Missing credentials is a blocker to surface, not a path to route
around. (Note: the wporg-news Run 2/3 live writes went through the agent+MCP as a no-token
test stand-in. That validated request shapes only; it is explicitly not how import
runs — the artifact's own fetch/auth/polling path still needs a live end-to-end validation.)
Config files
Before running the generated entrypoint, verify the project-local config files exist and contain required values:
migrations/<project>/config/wix.envWIX_SITE_IDWIX_AUTH_TOKENor another generated-code-supported Wix auth key
migrations/<project>/config/source.<platform>.env- platform-specific source values, for example WordPress:
WP_BASE_URL,WP_USERNAME,WP_APPLICATION_PASSWORD
- platform-specific source values, for example WordPress:
The generated script should load these files and then allow process env to override them. If a required key is missing or blank, halt to needs-user with the exact key name. Never print secret values.
Treat migrations/<project>/config/*.env as secret-bearing once they may contain real
values. Do not inspect them with whole-file reads that print contents into tool output;
check only existence and required-key status (present, blank, missing).
Workflow
- Resolve the active project.
- Review the import plan and generated code; present the execution plan report and obtain acceptance (see above) before any write.
- Run a safe validation path first when possible, such as dry-run, sample batch, or read-only validation.
If media import is in scope and source media URLs are local/private (
localhost,127.0.0.1, Docker-only hosts, etc.), do not treat a successful dry-run as proof that live media import can work. Wix Media import fetches URLs from Wix servers, so the user must either expose the source through a public HTTPS tunnel or skip/defer media. This is optional and, as far as we know today, only affects media import. - Run source extraction first using the generated reader entrypoint (for example
node src/extract-source.js, or an equivalentrun-import.js --extract-onlymode). This step writes durable source files under the project and must complete before the write phase. - Execute the import by running the generated import entrypoint (for example
node src/run-import.jsornode src/run-import.js --import-only) with credentials injected via config/env. The import must read from the extracted files on disk — not by re-reading the source into memory, and not by issuing writes through the agent/MCP. - Capture counts, errors, retries, skipped records, and checkpoint information.
- Save a durable execution log.
Localhost media before live import
When source media URLs are local/private, ask the user to choose one path before live media writes:
-
Expose the source with a public HTTPS tunnel such as ngrok:
brew install ngrok ngrok config add-authtoken "<YOUR_AUTHTOKEN>" ngrok http 8090 export WP_BASE_URL=https://<id>.ngrok-free.app -
Or skip/defer media import and record the effect on hero images, galleries, downloadable files, and other media-dependent references.
Non-media entities may continue if the execution plan clearly excludes or defers media.
Artifact to create or update
migrations/<project>/execution-log.md
Minimum execution log contents
- run timestamp
- command or entrypoint used
- extracted source location / manifest used
- entities processed
- records read, transformed, written, skipped, failed
- retry behavior
- blocking errors
- follow-up remediation
Guardrails
- Import writes go through the executed artifact, not the agent. Never perform import
writes via
CallWixSiteAPI/MCP as a substitute for running the script. MCP is verification-only here (see the section above). (Setup execution is out of scope for this rule — seerp-execute-setup.) - Prefer dry-runs or sample batches before full import.
- Stop on systemic mapping or write failures rather than amplifying bad writes.
- Preserve enough logging to support replay and debugging.