Skip to content

CI and validator cover manifests only: skills, hooks, mcp.json, agents and the script test suites are unchecked #531

Open

Description

@deanrie

Summary

The validator and the workflow that runs it leave most of what plugins ship unchecked. Collected while going through the repo last week; filing as one issue so the pieces can be picked off separately.

What validate-plugins.yml covers today

  • Trigger paths: is .cursor-plugin/marketplace.json, **/plugin.json, schemas/**. A PR that only touches SKILL.md, hooks.json, mcp.json, agents or scripts runs no CI at all.
  • Dependencies are npm install --no-save ajv ajv-formats with no lockfile, so every run resolves whatever Ajv major is current.
  • scripts/validate-plugins.mjs checks the two manifests against the schemas and that name matches the marketplace entry. It does not check that skills / agents / rules / hooks / mcpServers / logo paths exist, that SKILL.md or agent frontmatter parses, that ${VAR} placeholders in mcp.json are declared in variables, or that every directory with a plugin.json is listed in the marketplace.

What that has let through

Suggested shape

  1. Broaden paths: to the whole tree (or drop the filter); the job takes seconds.
  2. Add a root package.json + lockfile with ajv/ajv-formats pinned and use npm ci.
  3. Extend the validator: path existence for component fields, frontmatter parse + required name/description for SKILL.md and agents/*.md, mcp.json placeholders vs variables, unlisted plugin directories. Validate SKILL.md frontmatter in CI #440 already proposes the SKILL.md part with a skill.schema.json; it is conflicting now but the approach fits.
  4. A second job running bun test / tsc in the two script packages.

Activity

  1. saleh98salehsleem1198-ai commented on Oct 10, 2026

    @saleh98salehsleem1198-ai

    Anything ok

  2. akushonkamen commented on Oct 12, 2026

    @akushonkamen

    Taking this one. Confirmed the root cause from the current default branch: scripts/validate-plugins.mjs only calls existsSync on the manifest files themselves (lines 37/57/65 — marketplace path, plugin dir, plugin.json), so declared skills/agents/rules/hooks/mcpServers/logo paths are never checked; and .github/workflows/validate-plugins.yml triggers on only 3 path globs (marketplace.json, **/plugin.json, schemas/**) with unpinned npm install --no-save ajv ajv-formats.

    Plan (per the pieces in this issue): first PR = broaden workflow paths: + add path-existence checks in the validator; follow-ups separately for frontmatter parsing, ${VAR} ⊆ variables cross-check, unlisted plugin dirs, and a lockfile.

    Heads-up: this work is assisted by an AI coding agent, so the PR description will say so.

  3. akushonkamen commented on Oct 12, 2026

    @akushonkamen

    Opened #582 with the first two pieces of the suggested shape: the paths: filter dropped from validate-plugins.yml, and path-existence checks for declared skills / agents / rules / commands / hooks / mcpServers / logo paths in the validator (plain paths must exist, trailing-slash paths must be directories, globs need an existing static base directory; URL logos and inline objects are skipped). All 100 marketplace plugins pass green; pieces 3–6 left for follow-ups.

  4. deanrie commented on Oct 13, 2026

    @deanrie
    Author

    Hey @akushonkamen, thanks for picking this up, and #582 matches the first two pieces of the shape above. I checked it out on top of current main: node scripts/validate-plugins.mjs is green across every listed plugin, and adding a skills/does-not-exist/ entry to a plugin.json fails with skills path "skills/does-not-exist/" does not exist, so the check does what it says. The glob handling (require only the static base dir) is the right call for skills/* style entries.

    One thing worth knowing for whoever merges: because the paths: filter is still on main, the Validate job did not run on #582 itself (it only touches the workflow and the script, neither of which matches the filter). It will start running on every PR once it lands.

    Still open from the list, for anyone who wants a piece: (2) root package.json + lockfile with ajv/ajv-formats pinned and npm ci; (3b) frontmatter parse with required name/description for SKILL.md and agents/*.md (#440 has a skill.schema.json approach, currently conflicting); (3c) mcp.json ${VAR} placeholders vs variables; (3d) plugin directories not listed in the marketplace; (4) a job running bun test / tsc in the two script packages (#492 just added a bun test under pstack/skills/poteto-mode/scripts that nothing runs yet).

  5. saleh98salehsleem1198-ai commented on Oct 13, 2026

    @saleh98salehsleem1198-ai

    Ok

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions