[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-wix-rp-discovery":3,"mdc-qxpsm-key":33,"related-org-wix-rp-discovery":817,"related-repo-wix-rp-discovery":972},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":28,"sourceUrl":31,"mdContent":32},"rp-discovery","discover source platform schema for migration","Discovers and documents the source platform schema (entities, fields, relationships) for a migration project. Use when capturing source structure before mapping to Wix.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"wix","Wix","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fwix.jpg",[12,16,19],{"name":13,"slug":14,"type":15},"Documentation","documentation","tag",{"name":17,"slug":18,"type":15},"Migration","migration",{"name":20,"slug":21,"type":15},"Data Modeling","data-modeling",23,"https:\u002F\u002Fgithub.com\u002Fwix\u002Fskills","2026-07-01T08:08:08.302261",null,28,[],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":30},[],"Wix Skills","https:\u002F\u002Fgithub.com\u002Fwix\u002Fskills\u002Ftree\u002FHEAD\u002Freplatform\u002Frp-discovery","---\nname: rp-discovery\ndescription: >-\n  Discovers and documents the source platform schema (entities, fields, relationships) for\n  a migration project. Use when capturing source structure before mapping to Wix.\n---\n\n# rp-discovery\n\nDiscover and document the source-platform schema for the active migration project.\n\n## Purpose\n\nUse this skill to inspect the source system, identify entities, relationships, fields, identifiers, media, rich content, and platform-specific constraints. Examples include Shopify, WordPress, WooCommerce, and custom CMS platforms.\n\nThis skill owns the **platform-agnostic discovery process and its output contract**\n(`source-profile.md` + `source-schema.json`). Platform-specific details — how to capture a\ngiven source, its auth model, REST quirks — live in a dedicated **source adapter** skill,\nnot here. For WordPress \u002F WooCommerce, that adapter is `rp-source-wordpress`. To support a\nnew platform, add a sibling adapter (e.g. `rp-source-shopify`) and leave this skill\nunchanged.\n\n## Inputs\n\nExpected inputs may include:\n\n- source platform name\n- source API docs or exports\n- credentials, tokens, or local dump files when available\n- current project under `migrations\u002F\u003Cproject>\u002F`\n- project-local config under `migrations\u002F\u003Cproject>\u002Fconfig\u002F`\n\n## Config gate before capture\n\nBefore running source capture, verify the project-local config files created by\n`rp-orchestration`:\n\n- `config\u002Fwix.env` should always exist with `WIX_SITE_ID` and `WIX_AUTH_TOKEN` keys,\n  even though discovery itself may not use Wix credentials yet.\n- `config\u002Fsource.\u003Cplatform>.env` should exist once the source platform is known. For\n  WordPress this is `config\u002Fsource.wordpress.env`.\n\nIf a required key is missing or blank, ask the user for that value and fill the config\nfile for them before continuing. Ask one value at a time. Never print secret values back\nto the user; report only present\u002Fmissing.\n\nTreat `migrations\u002F\u003Cproject>\u002Fconfig\u002F*.env` as secret-bearing once they may contain real\nvalues. Do not inspect them with whole-file reads that echo contents into tool output.\nUse secret-safe checks only: existence, required key names, and `present` \u002F `blank` \u002F\n`missing` status.\n\n## Workflow\n\n1. Confirm the active project under `migrations\u002F\u003Cproject>\u002F`.\n2. Identify the source platform and acquisition method, then select the matching source\n   adapter skill (e.g. `rp-source-wordpress` for WordPress \u002F WooCommerce). If no adapter\n   exists for the platform, capture entities manually following the same output contract.\n3. Run the adapter's capture step to produce a raw, machine-captured dump under\n   `\u003Cmigrations-root>\u002F\u003Cproject>\u002Fdata\u002F\u003Csource>-discovery\u002F`. For WordPress, the capture\n   script lives in `rp-source-wordpress\u002Fscripts\u002F` — run it from that skill directory\n   (see `rp-source-wordpress` Capture section and `CONVENTIONS.md`). The adapter owns the\n   capture mechanics, auth model, and platform quirks; this skill consumes its output.\n   - Distinguish **supported** entities (advertised by the source) from **used** entities\n     (those with `recordCount > 0`). Entities advertised but empty should be flagged, not\n     mapped as if they hold data.\n   - A capture made without credentials is usually incomplete (gated entities, private\n     fields, PII return 401\u002F403). Do not treat an unauthenticated capture as\n     authoritative — the adapter documents what auth a complete run requires.\n4. Capture field-level schema details, including type, cardinality, requiredness, and example values.\n5. Note operational constraints such as pagination, rate limits, auth model, and incremental sync options.\n   If the source base URL or discovered media\u002Ffile URLs use `localhost`, `127.0.0.1`, or\n   another private-only host, record a **media reachability note** in `source-profile.md`.\n   Localhost is fine for discovery and local source reads, but Wix Media import is\n   URL-based and Wix servers cannot fetch the user's localhost. This is an optional\n   preparation step and, as far as we know today, only affects media import. State the two\n   acceptable choices:\n   - expose the source with a public HTTPS tunnel such as ngrok before live media import\n   - skip\u002Fdefer media import while continuing non-media entities\n\n   Include concise ngrok setup instructions when relevant:\n\n   ```bash\n   brew install ngrok\n   ngrok config add-authtoken \"\u003CYOUR_AUTHTOKEN>\"\n   ngrok http 8090\n   export WP_BASE_URL=https:\u002F\u002F\u003Cid>.ngrok-free.app\n   ```\n6. Synthesize the raw capture into the normalized artifacts below.\n\n## Artifacts to create or update\n\n- `migrations\u002F\u003Cproject>\u002Fdata\u002F\u003Csource>-discovery\u002F`: raw machine-captured output from the source adapter. Treated as evidence, not a hand-off artifact — downstream skills reference it for traceability but do not read it wholesale.\n- `migrations\u002F\u003Cproject>\u002Fsource-profile.md`: source platform, access method, limits, auth, and operational notes. Synthesized from the raw capture. Capture the operational facts the adapter documents (auth model, pagination, rate limits) so `rp-import-codegen` has them without re-deriving.\n- `migrations\u002F\u003Cproject>\u002Fsource-schema.json`: machine-readable schema for entities and fields. **Synthesized from the raw capture** — this and `source-profile.md` are the canonical hand-off to `rp-mapper`. Include traceability pointers so the mapper can drill into a specific entity's raw file when needed:\n  - top-level `rawDiscovery`: relative path to the raw capture dir, e.g. `data\u002Fwp-discovery\u002F`.\n  - per-entity `rawFile`: file name within that dir, e.g. `wp-v2--posts.md`.\n  - per-entity `recordCount` and `inUse` so consumers can distinguish supported vs. actually-used entities.\n  - per-entity `relations` derived from the source-declared relationships in the raw capture, so relationships are evidence-backed rather than guessed. Each relation should carry an `evidence` pointer back to the source signal it came from.\n  - Follow the adapter's `source-schema.example.json` for the shape (e.g. `rp-source-wordpress\u002Fsource-schema.example.json`). It is a template to follow, not a strict schema to validate against — keep the platform-agnostic core stable and push platform quirks into each entity's open `sourceMeta` blob.\n- Optional supporting notes under `migrations\u002F\u003Cproject>\u002Fresearch\u002F` if needed.\n\n## Output quality rules\n\n- Separate confirmed facts from assumptions.\n- Record per-entity volume (record counts) so downstream skills know what the site actually uses, not just what it supports.\n- Preserve source-specific identifiers exactly.\n- Include enough detail for downstream mapping and code generation.\n- Flag unknowns explicitly instead of inventing structure.\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,45,51,58,63,116,122,127,169,175,188,237,242,279,285,581,587,777,783,811],{"type":39,"tag":40,"props":41,"children":42},"element","h1",{"id":4},[43],{"type":44,"value":4},"text",{"type":39,"tag":46,"props":47,"children":48},"p",{},[49],{"type":44,"value":50},"Discover and document the source-platform schema for the active migration project.",{"type":39,"tag":52,"props":53,"children":55},"h2",{"id":54},"purpose",[56],{"type":44,"value":57},"Purpose",{"type":39,"tag":46,"props":59,"children":60},{},[61],{"type":44,"value":62},"Use this skill to inspect the source system, identify entities, relationships, fields, identifiers, media, rich content, and platform-specific constraints. Examples include Shopify, WordPress, WooCommerce, and custom CMS platforms.",{"type":39,"tag":46,"props":64,"children":65},{},[66,68,74,76,83,85,91,93,98,100,106,108,114],{"type":44,"value":67},"This skill owns the ",{"type":39,"tag":69,"props":70,"children":71},"strong",{},[72],{"type":44,"value":73},"platform-agnostic discovery process and its output contract",{"type":44,"value":75},"\n(",{"type":39,"tag":77,"props":78,"children":80},"code",{"className":79},[],[81],{"type":44,"value":82},"source-profile.md",{"type":44,"value":84}," + ",{"type":39,"tag":77,"props":86,"children":88},{"className":87},[],[89],{"type":44,"value":90},"source-schema.json",{"type":44,"value":92},"). Platform-specific details — how to capture a\ngiven source, its auth model, REST quirks — live in a dedicated ",{"type":39,"tag":69,"props":94,"children":95},{},[96],{"type":44,"value":97},"source adapter",{"type":44,"value":99}," skill,\nnot here. For WordPress \u002F WooCommerce, that adapter is ",{"type":39,"tag":77,"props":101,"children":103},{"className":102},[],[104],{"type":44,"value":105},"rp-source-wordpress",{"type":44,"value":107},". To support a\nnew platform, add a sibling adapter (e.g. ",{"type":39,"tag":77,"props":109,"children":111},{"className":110},[],[112],{"type":44,"value":113},"rp-source-shopify",{"type":44,"value":115},") and leave this skill\nunchanged.",{"type":39,"tag":52,"props":117,"children":119},{"id":118},"inputs",[120],{"type":44,"value":121},"Inputs",{"type":39,"tag":46,"props":123,"children":124},{},[125],{"type":44,"value":126},"Expected inputs may include:",{"type":39,"tag":128,"props":129,"children":130},"ul",{},[131,137,142,147,158],{"type":39,"tag":132,"props":133,"children":134},"li",{},[135],{"type":44,"value":136},"source platform name",{"type":39,"tag":132,"props":138,"children":139},{},[140],{"type":44,"value":141},"source API docs or exports",{"type":39,"tag":132,"props":143,"children":144},{},[145],{"type":44,"value":146},"credentials, tokens, or local dump files when available",{"type":39,"tag":132,"props":148,"children":149},{},[150,152],{"type":44,"value":151},"current project under ",{"type":39,"tag":77,"props":153,"children":155},{"className":154},[],[156],{"type":44,"value":157},"migrations\u002F\u003Cproject>\u002F",{"type":39,"tag":132,"props":159,"children":160},{},[161,163],{"type":44,"value":162},"project-local config under ",{"type":39,"tag":77,"props":164,"children":166},{"className":165},[],[167],{"type":44,"value":168},"migrations\u002F\u003Cproject>\u002Fconfig\u002F",{"type":39,"tag":52,"props":170,"children":172},{"id":171},"config-gate-before-capture",[173],{"type":44,"value":174},"Config gate before capture",{"type":39,"tag":46,"props":176,"children":177},{},[178,180,186],{"type":44,"value":179},"Before running source capture, verify the project-local config files created by\n",{"type":39,"tag":77,"props":181,"children":183},{"className":182},[],[184],{"type":44,"value":185},"rp-orchestration",{"type":44,"value":187},":",{"type":39,"tag":128,"props":189,"children":190},{},[191,218],{"type":39,"tag":132,"props":192,"children":193},{},[194,200,202,208,210,216],{"type":39,"tag":77,"props":195,"children":197},{"className":196},[],[198],{"type":44,"value":199},"config\u002Fwix.env",{"type":44,"value":201}," should always exist with ",{"type":39,"tag":77,"props":203,"children":205},{"className":204},[],[206],{"type":44,"value":207},"WIX_SITE_ID",{"type":44,"value":209}," and ",{"type":39,"tag":77,"props":211,"children":213},{"className":212},[],[214],{"type":44,"value":215},"WIX_AUTH_TOKEN",{"type":44,"value":217}," keys,\neven though discovery itself may not use Wix credentials yet.",{"type":39,"tag":132,"props":219,"children":220},{},[221,227,229,235],{"type":39,"tag":77,"props":222,"children":224},{"className":223},[],[225],{"type":44,"value":226},"config\u002Fsource.\u003Cplatform>.env",{"type":44,"value":228}," should exist once the source platform is known. For\nWordPress this is ",{"type":39,"tag":77,"props":230,"children":232},{"className":231},[],[233],{"type":44,"value":234},"config\u002Fsource.wordpress.env",{"type":44,"value":236},".",{"type":39,"tag":46,"props":238,"children":239},{},[240],{"type":44,"value":241},"If a required key is missing or blank, ask the user for that value and fill the config\nfile for them before continuing. Ask one value at a time. Never print secret values back\nto the user; report only present\u002Fmissing.",{"type":39,"tag":46,"props":243,"children":244},{},[245,247,253,255,261,263,269,271,277],{"type":44,"value":246},"Treat ",{"type":39,"tag":77,"props":248,"children":250},{"className":249},[],[251],{"type":44,"value":252},"migrations\u002F\u003Cproject>\u002Fconfig\u002F*.env",{"type":44,"value":254}," as secret-bearing once they may contain real\nvalues. Do not inspect them with whole-file reads that echo contents into tool output.\nUse secret-safe checks only: existence, required key names, and ",{"type":39,"tag":77,"props":256,"children":258},{"className":257},[],[259],{"type":44,"value":260},"present",{"type":44,"value":262}," \u002F ",{"type":39,"tag":77,"props":264,"children":266},{"className":265},[],[267],{"type":44,"value":268},"blank",{"type":44,"value":270}," \u002F\n",{"type":39,"tag":77,"props":272,"children":274},{"className":273},[],[275],{"type":44,"value":276},"missing",{"type":44,"value":278}," status.",{"type":39,"tag":52,"props":280,"children":282},{"id":281},"workflow",[283],{"type":44,"value":284},"Workflow",{"type":39,"tag":286,"props":287,"children":288},"ol",{},[289,300,312,383,388,576],{"type":39,"tag":132,"props":290,"children":291},{},[292,294,299],{"type":44,"value":293},"Confirm the active project under ",{"type":39,"tag":77,"props":295,"children":297},{"className":296},[],[298],{"type":44,"value":157},{"type":44,"value":236},{"type":39,"tag":132,"props":301,"children":302},{},[303,305,310],{"type":44,"value":304},"Identify the source platform and acquisition method, then select the matching source\nadapter skill (e.g. ",{"type":39,"tag":77,"props":306,"children":308},{"className":307},[],[309],{"type":44,"value":105},{"type":44,"value":311}," for WordPress \u002F WooCommerce). If no adapter\nexists for the platform, capture entities manually following the same output contract.",{"type":39,"tag":132,"props":313,"children":314},{},[315,317,323,325,331,333,338,340,346,348],{"type":44,"value":316},"Run the adapter's capture step to produce a raw, machine-captured dump under\n",{"type":39,"tag":77,"props":318,"children":320},{"className":319},[],[321],{"type":44,"value":322},"\u003Cmigrations-root>\u002F\u003Cproject>\u002Fdata\u002F\u003Csource>-discovery\u002F",{"type":44,"value":324},". For WordPress, the capture\nscript lives in ",{"type":39,"tag":77,"props":326,"children":328},{"className":327},[],[329],{"type":44,"value":330},"rp-source-wordpress\u002Fscripts\u002F",{"type":44,"value":332}," — run it from that skill directory\n(see ",{"type":39,"tag":77,"props":334,"children":336},{"className":335},[],[337],{"type":44,"value":105},{"type":44,"value":339}," Capture section and ",{"type":39,"tag":77,"props":341,"children":343},{"className":342},[],[344],{"type":44,"value":345},"CONVENTIONS.md",{"type":44,"value":347},"). The adapter owns the\ncapture mechanics, auth model, and platform quirks; this skill consumes its output.",{"type":39,"tag":128,"props":349,"children":350},{},[351,378],{"type":39,"tag":132,"props":352,"children":353},{},[354,356,361,363,368,370,376],{"type":44,"value":355},"Distinguish ",{"type":39,"tag":69,"props":357,"children":358},{},[359],{"type":44,"value":360},"supported",{"type":44,"value":362}," entities (advertised by the source) from ",{"type":39,"tag":69,"props":364,"children":365},{},[366],{"type":44,"value":367},"used",{"type":44,"value":369}," entities\n(those with ",{"type":39,"tag":77,"props":371,"children":373},{"className":372},[],[374],{"type":44,"value":375},"recordCount > 0",{"type":44,"value":377},"). Entities advertised but empty should be flagged, not\nmapped as if they hold data.",{"type":39,"tag":132,"props":379,"children":380},{},[381],{"type":44,"value":382},"A capture made without credentials is usually incomplete (gated entities, private\nfields, PII return 401\u002F403). Do not treat an unauthenticated capture as\nauthoritative — the adapter documents what auth a complete run requires.",{"type":39,"tag":132,"props":384,"children":385},{},[386],{"type":44,"value":387},"Capture field-level schema details, including type, cardinality, requiredness, and example values.",{"type":39,"tag":132,"props":389,"children":390},{},[391,393,399,401,407,409,414,416,421,423,436,440,442],{"type":44,"value":392},"Note operational constraints such as pagination, rate limits, auth model, and incremental sync options.\nIf the source base URL or discovered media\u002Ffile URLs use ",{"type":39,"tag":77,"props":394,"children":396},{"className":395},[],[397],{"type":44,"value":398},"localhost",{"type":44,"value":400},", ",{"type":39,"tag":77,"props":402,"children":404},{"className":403},[],[405],{"type":44,"value":406},"127.0.0.1",{"type":44,"value":408},", or\nanother private-only host, record a ",{"type":39,"tag":69,"props":410,"children":411},{},[412],{"type":44,"value":413},"media reachability note",{"type":44,"value":415}," in ",{"type":39,"tag":77,"props":417,"children":419},{"className":418},[],[420],{"type":44,"value":82},{"type":44,"value":422},".\nLocalhost is fine for discovery and local source reads, but Wix Media import is\nURL-based and Wix servers cannot fetch the user's localhost. This is an optional\npreparation step and, as far as we know today, only affects media import. State the two\nacceptable choices:",{"type":39,"tag":128,"props":424,"children":425},{},[426,431],{"type":39,"tag":132,"props":427,"children":428},{},[429],{"type":44,"value":430},"expose the source with a public HTTPS tunnel such as ngrok before live media import",{"type":39,"tag":132,"props":432,"children":433},{},[434],{"type":44,"value":435},"skip\u002Fdefer media import while continuing non-media entities",{"type":39,"tag":437,"props":438,"children":439},"br",{},[],{"type":44,"value":441},"Include concise ngrok setup instructions when relevant:",{"type":39,"tag":443,"props":444,"children":449},"pre",{"className":445,"code":446,"language":447,"meta":448,"style":448},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","brew install ngrok\nngrok config add-authtoken \"\u003CYOUR_AUTHTOKEN>\"\nngrok http 8090\nexport WP_BASE_URL=https:\u002F\u002F\u003Cid>.ngrok-free.app\n","bash","",[450],{"type":39,"tag":77,"props":451,"children":452},{"__ignoreMap":448},[453,476,511,530],{"type":39,"tag":454,"props":455,"children":458},"span",{"class":456,"line":457},"line",1,[459,465,471],{"type":39,"tag":454,"props":460,"children":462},{"style":461},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[463],{"type":44,"value":464},"brew",{"type":39,"tag":454,"props":466,"children":468},{"style":467},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[469],{"type":44,"value":470}," install",{"type":39,"tag":454,"props":472,"children":473},{"style":467},[474],{"type":44,"value":475}," ngrok\n",{"type":39,"tag":454,"props":477,"children":479},{"class":456,"line":478},2,[480,485,490,495,501,506],{"type":39,"tag":454,"props":481,"children":482},{"style":461},[483],{"type":44,"value":484},"ngrok",{"type":39,"tag":454,"props":486,"children":487},{"style":467},[488],{"type":44,"value":489}," config",{"type":39,"tag":454,"props":491,"children":492},{"style":467},[493],{"type":44,"value":494}," add-authtoken",{"type":39,"tag":454,"props":496,"children":498},{"style":497},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[499],{"type":44,"value":500}," \"",{"type":39,"tag":454,"props":502,"children":503},{"style":467},[504],{"type":44,"value":505},"\u003CYOUR_AUTHTOKEN>",{"type":39,"tag":454,"props":507,"children":508},{"style":497},[509],{"type":44,"value":510},"\"\n",{"type":39,"tag":454,"props":512,"children":514},{"class":456,"line":513},3,[515,519,524],{"type":39,"tag":454,"props":516,"children":517},{"style":461},[518],{"type":44,"value":484},{"type":39,"tag":454,"props":520,"children":521},{"style":467},[522],{"type":44,"value":523}," http",{"type":39,"tag":454,"props":525,"children":527},{"style":526},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[528],{"type":44,"value":529}," 8090\n",{"type":39,"tag":454,"props":531,"children":533},{"class":456,"line":532},4,[534,540,546,551,556,561,566,571],{"type":39,"tag":454,"props":535,"children":537},{"style":536},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[538],{"type":44,"value":539},"export",{"type":39,"tag":454,"props":541,"children":543},{"style":542},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[544],{"type":44,"value":545}," WP_BASE_URL",{"type":39,"tag":454,"props":547,"children":548},{"style":497},[549],{"type":44,"value":550},"=",{"type":39,"tag":454,"props":552,"children":553},{"style":542},[554],{"type":44,"value":555},"https:\u002F\u002F",{"type":39,"tag":454,"props":557,"children":558},{"style":497},[559],{"type":44,"value":560},"\u003C",{"type":39,"tag":454,"props":562,"children":563},{"style":542},[564],{"type":44,"value":565},"id",{"type":39,"tag":454,"props":567,"children":568},{"style":497},[569],{"type":44,"value":570},">",{"type":39,"tag":454,"props":572,"children":573},{"style":542},[574],{"type":44,"value":575},".ngrok-free.app\n",{"type":39,"tag":132,"props":577,"children":578},{},[579],{"type":44,"value":580},"Synthesize the raw capture into the normalized artifacts below.",{"type":39,"tag":52,"props":582,"children":584},{"id":583},"artifacts-to-create-or-update",[585],{"type":44,"value":586},"Artifacts to create or update",{"type":39,"tag":128,"props":588,"children":589},{},[590,601,620,764],{"type":39,"tag":132,"props":591,"children":592},{},[593,599],{"type":39,"tag":77,"props":594,"children":596},{"className":595},[],[597],{"type":44,"value":598},"migrations\u002F\u003Cproject>\u002Fdata\u002F\u003Csource>-discovery\u002F",{"type":44,"value":600},": raw machine-captured output from the source adapter. Treated as evidence, not a hand-off artifact — downstream skills reference it for traceability but do not read it wholesale.",{"type":39,"tag":132,"props":602,"children":603},{},[604,610,612,618],{"type":39,"tag":77,"props":605,"children":607},{"className":606},[],[608],{"type":44,"value":609},"migrations\u002F\u003Cproject>\u002Fsource-profile.md",{"type":44,"value":611},": source platform, access method, limits, auth, and operational notes. Synthesized from the raw capture. Capture the operational facts the adapter documents (auth model, pagination, rate limits) so ",{"type":39,"tag":77,"props":613,"children":615},{"className":614},[],[616],{"type":44,"value":617},"rp-import-codegen",{"type":44,"value":619}," has them without re-deriving.",{"type":39,"tag":132,"props":621,"children":622},{},[623,629,631,636,638,643,645,651,653],{"type":39,"tag":77,"props":624,"children":626},{"className":625},[],[627],{"type":44,"value":628},"migrations\u002F\u003Cproject>\u002Fsource-schema.json",{"type":44,"value":630},": machine-readable schema for entities and fields. ",{"type":39,"tag":69,"props":632,"children":633},{},[634],{"type":44,"value":635},"Synthesized from the raw capture",{"type":44,"value":637}," — this and ",{"type":39,"tag":77,"props":639,"children":641},{"className":640},[],[642],{"type":44,"value":82},{"type":44,"value":644}," are the canonical hand-off to ",{"type":39,"tag":77,"props":646,"children":648},{"className":647},[],[649],{"type":44,"value":650},"rp-mapper",{"type":44,"value":652},". Include traceability pointers so the mapper can drill into a specific entity's raw file when needed:\n",{"type":39,"tag":128,"props":654,"children":655},{},[656,676,696,715,735],{"type":39,"tag":132,"props":657,"children":658},{},[659,661,667,669,675],{"type":44,"value":660},"top-level ",{"type":39,"tag":77,"props":662,"children":664},{"className":663},[],[665],{"type":44,"value":666},"rawDiscovery",{"type":44,"value":668},": relative path to the raw capture dir, e.g. ",{"type":39,"tag":77,"props":670,"children":672},{"className":671},[],[673],{"type":44,"value":674},"data\u002Fwp-discovery\u002F",{"type":44,"value":236},{"type":39,"tag":132,"props":677,"children":678},{},[679,681,687,689,695],{"type":44,"value":680},"per-entity ",{"type":39,"tag":77,"props":682,"children":684},{"className":683},[],[685],{"type":44,"value":686},"rawFile",{"type":44,"value":688},": file name within that dir, e.g. ",{"type":39,"tag":77,"props":690,"children":692},{"className":691},[],[693],{"type":44,"value":694},"wp-v2--posts.md",{"type":44,"value":236},{"type":39,"tag":132,"props":697,"children":698},{},[699,700,706,707,713],{"type":44,"value":680},{"type":39,"tag":77,"props":701,"children":703},{"className":702},[],[704],{"type":44,"value":705},"recordCount",{"type":44,"value":209},{"type":39,"tag":77,"props":708,"children":710},{"className":709},[],[711],{"type":44,"value":712},"inUse",{"type":44,"value":714}," so consumers can distinguish supported vs. actually-used entities.",{"type":39,"tag":132,"props":716,"children":717},{},[718,719,725,727,733],{"type":44,"value":680},{"type":39,"tag":77,"props":720,"children":722},{"className":721},[],[723],{"type":44,"value":724},"relations",{"type":44,"value":726}," derived from the source-declared relationships in the raw capture, so relationships are evidence-backed rather than guessed. Each relation should carry an ",{"type":39,"tag":77,"props":728,"children":730},{"className":729},[],[731],{"type":44,"value":732},"evidence",{"type":44,"value":734}," pointer back to the source signal it came from.",{"type":39,"tag":132,"props":736,"children":737},{},[738,740,746,748,754,756,762],{"type":44,"value":739},"Follow the adapter's ",{"type":39,"tag":77,"props":741,"children":743},{"className":742},[],[744],{"type":44,"value":745},"source-schema.example.json",{"type":44,"value":747}," for the shape (e.g. ",{"type":39,"tag":77,"props":749,"children":751},{"className":750},[],[752],{"type":44,"value":753},"rp-source-wordpress\u002Fsource-schema.example.json",{"type":44,"value":755},"). It is a template to follow, not a strict schema to validate against — keep the platform-agnostic core stable and push platform quirks into each entity's open ",{"type":39,"tag":77,"props":757,"children":759},{"className":758},[],[760],{"type":44,"value":761},"sourceMeta",{"type":44,"value":763}," blob.",{"type":39,"tag":132,"props":765,"children":766},{},[767,769,775],{"type":44,"value":768},"Optional supporting notes under ",{"type":39,"tag":77,"props":770,"children":772},{"className":771},[],[773],{"type":44,"value":774},"migrations\u002F\u003Cproject>\u002Fresearch\u002F",{"type":44,"value":776}," if needed.",{"type":39,"tag":52,"props":778,"children":780},{"id":779},"output-quality-rules",[781],{"type":44,"value":782},"Output quality rules",{"type":39,"tag":128,"props":784,"children":785},{},[786,791,796,801,806],{"type":39,"tag":132,"props":787,"children":788},{},[789],{"type":44,"value":790},"Separate confirmed facts from assumptions.",{"type":39,"tag":132,"props":792,"children":793},{},[794],{"type":44,"value":795},"Record per-entity volume (record counts) so downstream skills know what the site actually uses, not just what it supports.",{"type":39,"tag":132,"props":797,"children":798},{},[799],{"type":44,"value":800},"Preserve source-specific identifiers exactly.",{"type":39,"tag":132,"props":802,"children":803},{},[804],{"type":44,"value":805},"Include enough detail for downstream mapping and code generation.",{"type":39,"tag":132,"props":807,"children":808},{},[809],{"type":44,"value":810},"Flag unknowns explicitly instead of inventing structure.",{"type":39,"tag":812,"props":813,"children":814},"style",{},[815],{"type":44,"value":816},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":818,"total":971},[819,825,837,849,863,872,882,894,910,924,941,953],{"slug":4,"name":4,"fn":5,"description":6,"org":820,"tags":821,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[822,823,824],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"slug":826,"name":826,"fn":827,"description":828,"org":829,"tags":830,"stars":22,"repoUrl":23,"updatedAt":836},"rp-execute-import","execute migration pipelines to Wix","Runs the generated extract\u002Fimport pipeline and records execution results. Use when setup and codegen are complete and the user has approved the execution plan.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[831,834,835],{"name":832,"slug":833,"type":15},"Data Pipeline","data-pipeline",{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-01T08:08:07.038962",{"slug":838,"name":838,"fn":839,"description":840,"org":841,"tags":842,"stars":22,"repoUrl":23,"updatedAt":848},"rp-execute-setup","provision Wix site setup for migration","Verifies and provisions Wix-side setup required before import. Use after codegen when setup-requirements.md must be validated or executed against the target site.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[843,846,847],{"name":844,"slug":845,"type":15},"Deployment","deployment",{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-01T08:08:04.475894",{"slug":617,"name":617,"fn":850,"description":851,"org":852,"tags":853,"stars":22,"repoUrl":23,"updatedAt":862},"generate migration code for Wix","Generates migration readers, transforms, and Wix writers from schema and mapping artifacts. Use when producing runnable extract\u002Fimport code under the migration project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[854,857,860,861],{"name":855,"slug":856,"type":15},"Automation","automation",{"name":858,"slug":859,"type":15},"Data Engineering","data-engineering",{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-01T08:08:05.755188",{"slug":650,"name":650,"fn":864,"description":865,"org":866,"tags":867,"stars":22,"repoUrl":23,"updatedAt":871},"map source entities to Wix targets","Maps discovered source entities and fields to Wix targets and documents lossiness. Use when creating mapping-plan.md and mapping-summary.md after discovery.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[868,869,870],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-01T08:08:01.958081",{"slug":185,"name":185,"fn":873,"description":874,"org":875,"tags":876,"stars":22,"repoUrl":23,"updatedAt":881},"orchestrate Wix site migrations","Routes RePlatform source-to-Wix migrations to the next workflow step by inspecting migration project artifacts. Use when starting, continuing, or recovering a migration run.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[877,878,879,880],{"name":855,"slug":856,"type":15},{"name":844,"slug":845,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-01T08:08:09.570887",{"slug":883,"name":883,"fn":884,"description":885,"org":886,"tags":887,"stars":22,"repoUrl":23,"updatedAt":893},"rp-setup-discovery","set up Wix environment prerequisites","Derives Wix environment prerequisites (apps, collections, schemas) from an approved mapping plan. Use after mapping review and before import code generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[888,891,892],{"name":889,"slug":890,"type":15},"Configuration","configuration",{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},"2026-07-01T08:07:59.413698",{"slug":105,"name":105,"fn":895,"description":896,"org":897,"tags":898,"stars":22,"repoUrl":23,"updatedAt":909},"capture data from WordPress and WooCommerce","WordPress and WooCommerce source adapter: REST capture, auth, pagination, and read contract for codegen. Use when the source platform is WordPress or WooCommerce.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[899,900,903,906],{"name":858,"slug":859,"type":15},{"name":901,"slug":902,"type":15},"REST API","rest-api",{"name":904,"slug":905,"type":15},"WooCommerce","woocommerce",{"name":907,"slug":908,"type":15},"WordPress","wordpress","2026-07-01T08:08:00.69949",{"slug":911,"name":911,"fn":912,"description":913,"org":914,"tags":915,"stars":22,"repoUrl":23,"updatedAt":923},"rp-target-wix","validate Wix API write operations","Wix target adapter with verified write primitives (wix-writers.js) and contract tests. Use when vendoring Wix writers, validating API shapes, or Wix provisioning mechanics.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[916,919,922],{"name":917,"slug":918,"type":15},"API Development","api-development",{"name":920,"slug":921,"type":15},"Testing","testing",{"name":9,"slug":8,"type":15},"2026-07-01T08:08:03.226054",{"slug":925,"name":925,"fn":926,"description":927,"org":928,"tags":929,"stars":22,"repoUrl":23,"updatedAt":940},"wix-app","build Wix CLI app extensions","Build and review Wix CLI app extensions — dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, backend events, service plugins, data collections, and App Market readiness. Use when building ANY feature or extension for a Wix CLI app or preparing a Wix app for App Market review. Triggers on: add, build, create, implement, help me, dashboard, widget, plugin, backend, API, event, collection, embedded script, service plugin, Editor React component, checkout, shipping, tax, discount, SPI, CMS, schema, tracking, popup, admin panel, menu item, modal, validate, test, verify, register extension, App Market, app review, submission readiness.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[930,933,936,939],{"name":931,"slug":932,"type":15},"Backend","backend",{"name":934,"slug":935,"type":15},"CLI","cli",{"name":937,"slug":938,"type":15},"Frontend","frontend",{"name":9,"slug":8,"type":15},"2026-04-16T04:58:00.157961",{"slug":942,"name":942,"fn":943,"description":944,"org":945,"tags":946,"stars":22,"repoUrl":23,"updatedAt":952},"wix-auth","authenticate with Wix APIs","Authenticate with Wix to obtain an access token for calling Wix APIs. Use when an agent needs a valid Wix access token and has none, or when the stored token is expired.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[947,948,951],{"name":917,"slug":918,"type":15},{"name":949,"slug":950,"type":15},"Auth","auth",{"name":9,"slug":8,"type":15},"2026-07-07T06:47:46.95263",{"slug":954,"name":954,"fn":955,"description":956,"org":957,"tags":958,"stars":22,"repoUrl":23,"updatedAt":970},"wix-design-system","build UIs with Wix Design System","Wix Design System component reference. Use when building UI with @wix\u002Fdesign-system, choosing components, checking props and examples, or writing tests with component testkits. Triggers on \"what component\", \"how do I make\", \"WDS\", \"show me props\", \"testkit\", \"driver\", or component names like Button, Card, Modal, Box, Text.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[959,962,965,966,969],{"name":960,"slug":961,"type":15},"Design","design",{"name":963,"slug":964,"type":15},"Design System","design-system",{"name":937,"slug":938,"type":15},{"name":967,"slug":968,"type":15},"UI Components","ui-components",{"name":9,"slug":8,"type":15},"2026-04-29T05:33:44.561687",17,{"items":973,"total":1018},[974,980,986,992,999,1005,1012],{"slug":4,"name":4,"fn":5,"description":6,"org":975,"tags":976,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[977,978,979],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"slug":826,"name":826,"fn":827,"description":828,"org":981,"tags":982,"stars":22,"repoUrl":23,"updatedAt":836},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[983,984,985],{"name":832,"slug":833,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"slug":838,"name":838,"fn":839,"description":840,"org":987,"tags":988,"stars":22,"repoUrl":23,"updatedAt":848},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[989,990,991],{"name":844,"slug":845,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"slug":617,"name":617,"fn":850,"description":851,"org":993,"tags":994,"stars":22,"repoUrl":23,"updatedAt":862},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[995,996,997,998],{"name":855,"slug":856,"type":15},{"name":858,"slug":859,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"slug":650,"name":650,"fn":864,"description":865,"org":1000,"tags":1001,"stars":22,"repoUrl":23,"updatedAt":871},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1002,1003,1004],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"slug":185,"name":185,"fn":873,"description":874,"org":1006,"tags":1007,"stars":22,"repoUrl":23,"updatedAt":881},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1008,1009,1010,1011],{"name":855,"slug":856,"type":15},{"name":844,"slug":845,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"slug":883,"name":883,"fn":884,"description":885,"org":1013,"tags":1014,"stars":22,"repoUrl":23,"updatedAt":893},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1015,1016,1017],{"name":889,"slug":890,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},16]