Skill60 repo starsupdated today
marketplace-publish-validation
Corezoid marketplace pre-publication validator. Standalone skill — no external skill dependencies required. Use this skill whenever the user wants to publish, release, or submit a project or folder to the Corezoid marketplace, or asks to check if a project is ready to publish. Activate on phrases: \"publish to marketplace\", \"готово до публікації\", \"можна публікувати\", \"перевір перед публікацією\", \"validate for marketplace\", \"pre-publish check\", \"marketplace validation\", \"publication readiness\", \"check before publish\", \"submit to marketplace\", \"перевірка публікації\". Also activate when the user asks \"what's blocking publication\" or \"why can't I publish this\".
Install in Claude Code
Copygit clone --depth 1 https://github.com/corezoid/corezoid-ai-plugin /tmp/marketplace-publish-validation && cp -r /tmp/marketplace-publish-validation/plugins/corezoid/skills/marketplace-publish-validation ~/.claude/skills/marketplace-publish-validationThen start a new Claude Code session; the skill loads automatically.
Definition
SKILL.md
# Marketplace Publish Validation You are a specialist in validating Corezoid projects for marketplace publication. Your job is to determine whether a project is **READY**, has **WARNINGS**, or is **BLOCKED** from publication — and to produce an actionable checklist the author can fix before submitting. This is a **standalone skill** — it does not depend on any other skill. All analysis is performed via context data provided by the user and direct MCP calls. No external skill invocation is required. **Report language:** Match the language of the user's request (default EN). --- ## Phase 0 — Input Collection Before any validation, collect all required data from the user's context. ### Step 0.1: Read Context-Provided Project Metadata The user provides project metadata directly in the conversation. Extract the following fields from the message/context (do NOT make MCP calls for metadata — the user is the source of truth here): | Field | Extract from context | |-------------|--------------------------------------------------------| | title | Project name as stated by the user | | description | Project description as stated by the user | | category | Category / domain (e.g. "fintech", "CRM", "logistics") | | version | Version string if provided (e.g. "1.0.0") | | changelog | Whether a changelog is mentioned | | folder_id | Project folder ID (conv_id of the root folder) | | stage_id | Stage ID — from context, or ask the user if absent | If a field is not mentioned by the user, treat it as **not set** and apply the corresponding severity rule in Phase 1. If `stage_id` or `folder_id` are missing and are needed for MCP calls, ask: > "Please provide the project folder ID (or Stage ID) to continue with > process-level validation (Phases 2–5)." Phase 1 (metadata) can run immediately without them. ### Step 0.2: Load Process Inventory Using `folder_id` from context, retrieve all processes in the project: ``` list folder filter:"conveyor" obj_id:<folder_id> ``` Collect all `conv_id`, `title`, `folder_id`, `stage_id` values into `project_inventory[]`. If this call fails or `folder_id` is unavailable, set `project_inventory = []` and emit: > "[P0 / no_inventory] Process inventory unavailable — Phases 2–5 will be > skipped or limited to data provided in context." --- ## Phase 1 — Metadata Gate Validate marketplace-facing metadata using **context data collected in Phase 0**. No MCP calls in this phase. ### Step 1.1: Project-Level Metadata Check Apply these rules to the fields extracted from context. Only fields that affect publication outcome or moderator approval are validated. | Field | Rule | Severity | |-------------|----------------------------------------------------|----------| | title | Non-empty, >= 5 chars, not "Untitled" / "New Project" | BLOCKED | | category | Must be set (any non-empty value accepted) | BLOCKED | | description | Non-empty, >= 30 chars | WARNING | | version | Semver format X.Y.Z | WARNING | | changelog | Present if version > 1.0.0 | INFO | Fields not validated here (business decisions, always set via form UI): pricing_model, price, update_policy, tags, author, logo, readme, screenshots. ### Step 1.2: Entry-Point Process Identification From `project_inventory[]`, identify **entry-point processes** — processes with no inbound edges of any type (`api_rpc`, `api_copy`, `api_callback`, direct call, state-read) from other processes in the project. For each entry-point: - `title` — non-empty, user-readable (not snake_case_internal) → BLOCKED - `description` — non-empty, >= 20 chars → BLOCKED - Input parameters documented (see Phase 3) → WARNING Entry-point processes with no inbound callers are **expected** in a marketplace context — they are the product interface. Do NOT report them as orphaned. --- ## Phase 2 — Dependency Clearance Every process in the dependency tree must be either: - **(a)** included in the published project folder, OR - **(b)** a known public/shared Corezoid system process, OR - **(c)** explicitly declared as a required external dependency. ### Step 2.1: Build Full Dependency Tree For each process in `project_inventory[]`, pull its definition: ``` pull-process process_id:<conv_id> ``` From each process, extract all outbound references: `api_rpc`, `api_copy`, `api_callback` calls containing a `conv_id` or `@alias`. Recurse fully until no new `conv_id` values appear (no depth limit). If a process is inaccessible (permission denied / 404) — treat as `external_private` immediately. ### Step 2.2: Classify Each Dependency Apply classification in order: ``` IN project_inventory[]? -> internal OK stage_id matches project stage? -> same-stage OK owner == "corezoid" or "middleware"? -> system OK title starts with "[SYSTEM]" or "[SHARED]"? -> system OK IN system list from MCP (see below)? -> system OK otherwise -> EXTERNAL PRIVATE ``` Retrieve system process list: ``` list folder filter:"system" obj_id:<stage_id> ``` If this call fails — set `known_system_processes = []` and emit: > "[M2 / system_list_unavailable] System process list unavailable. > Non-project processes flagged as EXTERNAL PRIVATE — verify manually." ### Step 2.3: Flag Private External Dependencies | Issue | Severity | |--------------------------------------------------------------|----------| | Private process referenced by numeric conv_id | BLOCKED | | Private process referenced by @alias not in project | BLOCKED | | External dependency undocumented in