Repository navigation
Conversation
rahul05ranjan
left a comment
There was a problem hiding this comment.
Verified most of this locally (standalone run of the new validator logic against the full tree — I didn't have bun/ajv installed, so the script-package matrix I reviewed statically only). Results:
- Copied the new
checkSkillFrontmatter/checkPluginSkillscode verbatim and ran it over all 102 marketplace plugins: 0 errors, 5 warnings — exactly the five you listed (cursor-sdk's 1045-char description,make-bot-ui/poteto-mode/x-api-mcp-guide/x-money-guidenames). Matches the PR description to the letter. - The unlisted-plugin walk reports 102 listed / 0 unlisted on main, and I planted a
zz-unlisted/.cursor-plugin/plugin.jsonto confirm it gets caught with exit-1 semantics. Also confirmed every current marketplace source is a root-level dir orthird_party/*, so the two-level walk covers everything that exists today. - Frontmatter parser edge cases behave: quoted scalars strip quotes,
>-folds lines,|preserves blank lines, missing/unterminated frontmatter returns null, and the folder-mismatch warning fires when a kebab-case name differs from its directory. - Both workflow files parse as YAML, and the
package.jsonvalidatescript wiring matches the workflow step. Lockfile is exactly the 7 claimed entries.
Two small nits, neither blocking:
-
parseFrontmatter(scripts/validate-plugins.mjs:53):text.indexOf("\n---", 3)also matches a continuation line that merely starts with---, so a block-scalar description containing e.g. a markdown rule (--- text) silently truncates the value at that point. Anchoring the terminator to a line that is exactly---would close that; as-is it's a silent mis-parse rather than an error, which is the one spot this new checking can be quietly wrong. -
script-packages.yml:33pins bun tolatest— a little at odds with this PR's own rationale for pinning the ajv deps in CI. Not urgent, but a future bun release could start failing these checks for reasons unrelated to any PR.
Thanks for folding the four pieces into one reviewable-per-commit PR — the body made it genuinely easy to verify each claim independently.
|
Hey @rahul05ranjan, thanks for the thorough pass, and for replicating the walk against all 102 plugins. Both nits addressed in
|
…nstall with npm ci (cherry picked from commit b2aed9d)
…, length) (cherry picked from commit 94f15a7)
(cherry picked from commit 1e97677)
The validator walked marketplace.json entries only, so a directory with a .cursor-plugin/plugin.json that no entry references (forgotten listing, or a typo in source) passed CI and never reached the marketplace. Walk the repo root and third_party/ for plugin directories and fail for each one that is not a listed source. main has 102 listed and 0 unlisted today, so this is an error from the start. (cherry picked from commit e8ea031)
…un in CI
indexOf("\n---") also matched an indented continuation line starting with
--- (a markdown rule inside a block-scalar description), silently cutting
the value short. The terminator is now a line that is exactly --- with
optional trailing whitespace, CRLF or EOF after it. bun is pinned to 1.4.3
for the same reason the ajv deps are pinned.
ba400c7 to
d27a45f
Compare
Summary
One PR for the repo-level CI and validator work from #531, replacing #607, #599, #598 and #625 (closed in favour of this one; their commits are carried here unchanged, one commit each, reviewable separately). Together they close pieces 2, 3b, 3d and 4 of the shape in #531, the last ones; #582 (akushonkamen) covers pieces 1 and 2a and touches
validate-plugins.yml/validate-plugins.mjstoo, so whichever lands second needs a small rebase.ci: pin the validator's ajv dependencies in a root package.json and install with npm ci(was ci: pin the validator's ajv dependencies in a root package.json and install with npm ci #607). The job installedajvandajv-formatsunpinned on every run. Rootpackage.json(private, devDependencies only,validatescript),package-lock.json(7 packages),npm ciwith the npm cache, and thepaths:trigger widened toscripts/**, the package files and the workflow.validate: check SKILL.md frontmatter (name, description, folder match, length)(was validate: check SKILL.md frontmatter (name, description, folder match, length) #599). The validator never read aSKILL.md. Errors: no frontmatter, missingname, missingdescription. Warnings for now:namenot kebab-case or not equal to the folder,descriptionover 1024 characters. On currentmainthat is 0 errors and 5 warnings (cursor-sdk description, two pstack and two third_party names), all with open fix PRs (chore: keep the cursor-sdk skill description under the 1024-char limit; label agent-compatibility changelog 1.0.0 #530, fix(pstack): make skill names match their directories (poteto-mode, make-bot-ui) #596, fix(x, x-money): make skill names match their directories #600); once those land the two warnings can become errors in a two-line follow-up.ci: run bun typecheck and tests for the two script packages on PRs(was ci: run bun typecheck and tests for the two script packages on PRs #598).orchestrate/skills/orchestrate/scripts(209 tests) andpstack/skills/poteto-mode/scripts(63 tests) have test suites nothing ran. Newscript-packages.yml: matrix over the two directories,bun install --frozen-lockfile,bun run typecheck,bun run test,fail-fast: false,paths:scoped to the two packages and the workflow.validate: fail when a plugin directory is not listed in marketplace.json(was validate: fail when a plugin directory is not listed in marketplace.json #625). The validator only walkedmarketplace.jsonentries, so a directory with a.cursor-plugin/plugin.jsonthat no entry references (forgotten listing, or asourcetypo) passed silently. New step walks the repo root andthird_party/and fails for each plugin directory that is not a listed source. On currentmain: 102 listed, 0 unlisted, so this is an error from day one.Verification
rm -rf node_modules && npm ci && npm run validateon this branch:All plugins validated successfully.with the 5 expected warnings.zz-unlisted/.cursor-plugin/plugin.json:ERROR: Unlisted plugin: "zz-unlisted" ..., exit 1.Refs #531.