32 "summary": "Two distinct plugins both document an install folder literally named `free-gifts-for-woocommerce`: the closed-source WooCommerce.com Marketplace extension 'Free Gifts for WooCommerce' (woocommerce.com/products/free-gifts-for-woocommerce/, active development through v12.8.0 as of 2025-12-19 per wpspring.com's changelog mirror), and the free wordpress.org plugin now listed under a DIFFERENT current slug, `free-gifts-product-for-woocommerce` ('Free Gift Product For WooCommerce'). This profile assumes the WooCommerce.com Marketplace extension, matching both the requested slug and the existing `fgf` alias in fingerprint-aliases.json — but neither plugin's source was reachable (closed/paid, not GitHub-mirrored; wordpress.org network fetches failed in the research pass behind this profile). Re-verify plugin identity against the live site's `GET /wp/v2/plugins` name/description before trusting this profile's specifics.",
38 "summary": "Per the vendor's own changelog (v12.2.0, released 2025-07-02, mirrored at wpspring.com/free-gifts-for-woocommerce-changelog/): 'REST API endpoints support was added to enable full CRUD operation for Free Gift rule(s) and Master Log', with a response-key rename in the same release. This means current installs (v12.2.0+) may have a genuine plugin-rest channel for rule definitions — a materially better position than woo-discount-rules ever had. No route path, namespace, or auth requirement was discoverable without source access (closed-source, no live site to probe). Classified admin-page-only here as the conservative default; the highest-value follow-up for this profile is a live `GET /wp-json` route-index check on an actual install running v12.2.0+ before assuming no REST path.",
39 "unverified": true
40 },
41 {
42 "code": "gift-is-not-auto-added-on-wix",
43 "severity": "warning",
44 "summary": "A rebuilt Wix coupon does NOT reproduce this plugin's central behaviour, and the loss is easy to miss because the mapping otherwise looks clean. On the source, applying the Coupon Gift code ADDS the gift product to the cart. The Wix equivalent — `percentOffRate: 100` scoped to that product — only discounts the gift if the buyer has already put it in the cart, so a buyer who enters the code and adds nothing receives nothing. There is no platform fallback: no Wix service plugin mutates a cart (every extension returns a decision — eligible triggers, rates, fees, validations, tax — and none can insert a line item). So the outcome is either the lossy coupon plus an explicit note to the merchant, or custom storefront/app development outside the migration. Surface this at mapping review rather than after go-live. See rp-target-wix/domains/stores/entities/coupon.json's free-gift-coupons-are-a-lossy-mapping-the-gift-is-not-auto-added."
49 "summary": "Coupon Gift is standing configuration and maps to a product-scoped Wix coupon, not an Automatic Discount. The source rule is still admin-page-only unless the unverified REST CRUD route is present; Application Passwords cannot authenticate a wp-admin settings-page render.",
50 "blocked": [
51 {
52 "kind": "user-file",
53 "resolution": "First check whether the live site's REST index exposes a Free Gifts namespace (v12.2.0+ may have one). If not, ask the site owner to transcribe or screenshot each Coupon Gift rule, including its code, trigger threshold, and eligible gift product. Rebuild it as a product-scoped Wix coupon — and see the gift-is-not-auto-added-on-wix pitfall below before telling anyone the rebuild is equivalent.",
71 "summary": "CORRECTED 2026-08-31 — this pitfall previously said no native Wix target existed for granting a DIFFERENT product, and that was WRONG. Automatic Gift and Buy X Get Y both map natively: DiscountRule `discounts.values[].targetType` accepts BUY_X_GET_Y with a `buyXGetYInfo` payload ({customerBuys: {scopes[], minimumQuantity|minimumSpend}, customerGets: {scopes[], quantity}, limit?}). Set customerBuys to the threshold scope and customerGets to the gift product with discountType FIXED_PRICE / fixedPrice '0'. So route these definitions to ecom/discount-rule rather than keeping the capability pending. The old conclusion came from reading QUANTITY_BASED, which is the wrong axis — BOGO lives on targetType, not discountType — and from buyXGetYInfo being absent from the published method schema while the docs' own Buy-X-Get-Y example returns HTTP 500. WHAT STILL DOES NOT MAP is a gate Wix has no trigger for, a cart COUPON CODE being the common one: such a rule imported `active` applies to every shopper unconditionally, so import it inactive and flag it, or rebuild it as a Wix coupon. See rp-target-wix/domains/ecom/entities/discount-rule.json's buy-x-get-y-is-supported-but-undocumented pitfall."
76 "summary": "The rule definitions are admin-page-only unless the vendor's unverified v12.2.0+ REST CRUD route is present. Application Passwords cannot authenticate a wp-admin settings-page render.",
77 "blocked": [
78 {
79 "kind": "user-file",
80 "resolution": "First check whether the live site's REST index exposes a Free Gifts namespace. If not, ask the site owner to transcribe or screenshot each Automatic Gift and Buy X Get Y rule so the unsupported behavior is visible at mapping review.",
81 "declined": false
82 }
83 ]
84 }
85 ]
86 }
87 ],
88 "quirks": [
89 "Functional scope (vendor docs, woocommerce.com/document/free-gifts/): Coupon Gift is standing configuration mapped to stores/coupon; Automatic Gift and Buy X Get Y are tracked separately as the commerce.free-gift-rules capability, which routes to ecom/discount-rule via targetType BUY_X_GET_Y (corrected 2026-08-31; it was recorded as pending until then). The rule DEFINITIONS are still admin-page-only, so having a target does not make them readable; Manual Gift is a merchant action on an individual order, not standing configuration or an entity to migrate.",
90 "Vendor docs and third-party summaries consistently describe the applied gift as landing on the order as a real $0.00 line item for the gift product (either via a zero-price line or a $0 coupon restricted to that product) — this is NOT a distinct entity here because a $0 product line item already migrates generically through the existing commerce.order-line-items capability (ecom/order-line-item, sourceEntity woocommerce:order_line_item, confidence high) with no plugin-specific channel required. What is NOT captured anywhere in this profile is a marker distinguishing 'this $0 line was a promotional gift' from 'the merchant manually priced this product at $0' — no meta key was found (no source access); if a future live run finds one (search sampled order line_items[].meta_data for anything gift-related), add it here as a core-meta entity under a new applied-discount-style capability rather than folding it into commerce.order-line-items.",
91 "fingerprint-aliases.json already maps the observed `fgf` asset-path token to `free-gifts-for-woocommerce`, promoting that otherwise named-only signal to this profile's deterministic detection path.",
92 "This profile has not been verified against a running installation of the assumed WooCommerce.com Marketplace extension. Every behavioral claim above is vendor-documentation-tier, not source- or live-verified."