publishListing
Publish a strategy version + backtest to the public marketplace. AUTHENTICATED; authorization is enforced IN THE RESOLVER against workspace__strategy__make_public on the strategy's owning workspace (via graph.checkScope) — publishing to a search-indexed public page IS publication, not the plain write authority setStrategyVisibility takes today. The @hasScope directive is not used here so the SAME gate helper covers publish/republish/unpublish uniformly (republish/unpublish take a listing id the directive's static resourceType cannot resolve).
Gated additionally behind the marketplace_publish entitlement (Starter and
above), enforced IN THE RESOLVER exactly as forkFromListing enforces
marketplace_fork. Scope alone is not a sufficient gate here: the org creator
holds workspace__strategy__make_public by default, publishing writes
StatusPublished with NO staff pre-review, and each publish mints a permanent
slug that enters the marketplace sitemap and is pushed to Bing via IndexNow.
publishListing(
input: PublishListingInput!
): MarketplaceListingAdmin!
Arguments
publishListing.input ● PublishListingInput! non-null input
Type
MarketplaceListingAdmin object
Owner-facing view of ONE of the caller's own listings, in ANY status. AUTHENTICATED and a SEPARATE type from MarketplaceListingDetail — unlike the anonymous type this DOES carry ids (id, strategyID, backtestID): unlike sharesForResource (which already receives the resource id as a query argument), myMarketplaceListings takes no argument, so the caller needs these to tell listings apart and to know what is currently pinned before a republish. It is still built field by field, never by embedding the ent row, so fork_payload stays unreachable here too.