1'use strict';23// Every product-SEO stage outcome, in one frozen place that both the SEO stage4// (rp-target-wix/lib/product-seo.js) and the completion report import, so the stage cannot5// report a code the report has no line for (the same reason payments-outcome-registry.js exists).67// Rows with any of these outcomes keep the run from reporting product SEO complete.8const SEO_BLOCKING_OUTCOMES = Object.freeze([9 'seo_disposition_required',10 'focus_keywords_disposition_required',11 'canonical_pending_policy',12 'seo_write_unverified',
29// What the owner or operator does next, per outcome. Rendered by the completion report instead
30// of the generic "re-run the stage" line, because most of these need a decision, not a retry.
31const SEO_OUTCOME_ACTIONS = Object.freeze({
32 seo_disposition_required: 'Product SEO is held: the source shows SEO for these products but cannot prove which fields the merchant overrode. Supply the raw Yoast evidence, or choose omit (inherit Wix patterns and record the loss) or materialize (write the rendered title/description as item overrides).',
33 focus_keywords_disposition_required: 'Yoast focus keyphrases have no verified Wix product write path. Supply evidence of a verified path later, or accept the loss (omit) for these products.',
34 canonical_pending_policy: 'These products carry a canonical URL that is not their own source permalink. It is not written until an approved canonical policy is supplied.',
35 seo_write_unverified: 'A product SEO write did not read back as an item override. The next run reconciles that write from its journal and read-back; it is never re-sent blindly.',
36 seo_inheritance_unverified: 'A field that should inherit Wix\'s pattern still has an item-level tag. No write happened; the next run re-verifies. The stray tag is removed only through a partial update or when the owner asks.',
37 seo_resolution_unverified: 'Wix resolved SEO tags could not be read for these products. The next run re-verifies them.',
38 seo_conflict: 'These products changed in Wix since the last import. Choose override (write the source SEO over the Wix edit) or keep (leave the Wix values).',
39 seo_disposition_accepted_gap: 'The owner chose omit: these products inherit Wix SEO patterns and the source overrides are an accepted loss.',
40 seo_materialized: 'The owner chose materialize: the rendered source title/description were written as item overrides.',
41 focus_keywords_accepted_gap: 'The owner accepted the loss of Yoast focus keyphrases for these products.',
42 seo_conflict_kept_wix: 'The owner chose to keep the Wix SEO values for these products over the source values.',