Remove vercel from the default scaffolded target list - #107
Merged
Merged
Conversation
`vercel`'s only build artifact is an author-authored skills/<name>/SKILL.md that the scaffold never seeds, so a fresh plugin declared vercel but emitted zero artifacts for it anywhere on build while looking fully supported by list-targets/check-support. A fresh scaffold now declares every known target except vercel; vercel remains fully supported and addable via add-target.
There was a problem hiding this comment.
Pull request overview
This PR adjusts the core scaffolding defaults so a bare aipm scaffold <name> no longer declares vercel, preventing a freshly scaffolded plugin from including a target that produces no build artifacts out of the box. It also adds regression/guard tests to ensure the default scaffold target set remains “non-no-op” over time.
Changes:
- Introduces
DEFAULT_SCAFFOLD_TARGETS(all known targets exceptvercel) and uses it as the default inrunScaffoldwhenopts.targetsis omitted. - Updates scaffold tests to reflect the new default set and adds a guard test ensuring every default-scaffolded target emits at least one build artifact (in workspace-mode builds).
- Adds a changeset to bump
@ai-plugin-marketplace/coreand@ai-plugin-marketplace/clifor the user-visible default behavior change.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| packages/core/src/pipeline/types.ts | Adds DEFAULT_SCAFFOLD_TARGETS as the new default scaffold target list (excluding vercel). |
| packages/core/src/pipeline/scaffold.ts | Switches runScaffold default targets from TARGET_IDS to DEFAULT_SCAFFOLD_TARGETS. |
| packages/core/src/pipeline/scaffold.test.ts | Updates default scaffold expectations and adds regression + build-artifact guard coverage for issue #94. |
| .changeset/remove-vercel-from-default-scaffold.md | Declares minor bumps for core + cli due to the default scaffold behavior change. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…nside tmpDir The two default-scaffold tests passed tmpDir directly as pluginsDir, but runScaffold derives repoRoot = dirname(pluginsDir) for marketplace registration, so registries were written to the shared OS temp dir (outside afterEach's cleanup). Use a plugins/ subdirectory of tmpDir instead.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
vercelshipped in the DEFAULT scaffolded target list but is a silent no-op: it is accepted byscaffold,build,validate, andcheck-support, and appears inlist-targets, yet emits ZERObuild artifacts. A user who keeps the default config believes they have a working vercel target
that in fact produces nothing.
This PR removes
vercelfrom the default scaffold set.vercelremains fully supportedelsewhere in the toolkit — it's still addable via
core.scaffold(name, { targets: [...] })oraipm add-target <plugin> vercel— this only changes what a bareaipm scaffold <name>declares.Changes
packages/core/src/pipeline/types.ts: addsDEFAULT_SCAFFOLD_TARGETS,TARGET_IDSminusvercel.packages/core/src/pipeline/scaffold.ts:runScaffoldnow defaults toDEFAULT_SCAFFOLD_TARGETSinstead ofTARGET_IDSwhenopts.targetsis omitted.packages/core/src/pipeline/scaffold.test.ts: updates the existing "canonical file set"default-scaffold test (vercel's
skills/*/SKILL.mdis no longer part of the default set) andadds the regression + guard coverage below.
.changeset/remove-vercel-from-default-scaffold.md: minor bump forcore+cli(user-visibledefault-scaffold behavior change).
Acceptance criteria → tests
vercelfrom the DEFAULT scaffolded targets list →runScaffold > does not declare vercel among the default targets (issue #94)(packages/core/src/pipeline/scaffold.test.ts).Confirmed to fail against pre-fix code (reverting the one-line default in
scaffold.tsmakes itfail with
expected [...] to not include 'vercel').every default-scaffolded target emits a build artifact (issue #94) > produces at least one build artifact per target for a freshly scaffolded plugin with default targets(
packages/core/src/pipeline/scaffold.test.ts). This test reads back the targetsrunScaffoldactually declared (not the
DEFAULT_SCAFFOLD_TARGETSconstant directly), so it independentlycatches any future default target that ships with zero build artifacts — confirmed by
temporarily reintroducing
vercelinto the default set, which makes this test fail withexpected an artifact for default target 'vercel'. A companion negative test(
vercel (excluded from defaults) emits zero build artifacts on a bare scaffold) documents whyvercel specifically is excluded.
Both scaffold+build tests run against a workspace-mode repo (a hand-written
aipm.workspace.ts),matching the issue's real repro shape (
aipm scaffold+aipm buildin a repo that has opted intomarketplace-registry generation) — registry-backed targets (claude/cursor/codex/open-plugins) only
produce build artifacts in that mode; gemini/kiro's dist bundles are unconditional.
Note: exercising this combination surfaced a separate, pre-existing gap —
runScaffoldhand-writes the repo-root Open Plugins
marketplace.jsonunconditionally, which collides withrunBuild's generated version of the same path on a workspace-mode repo's first build(
root-artifact-collision). This is orthogonal to #94 (a build-failure/collision issue, not ano-op-target issue) and reproduces identically on
mainbefore this change — the new tests workaround it exactly as the build's own finding documents (remove the hand-authored file before
building). Flagging here since it may warrant its own issue, but it's out of scope for this PR.
Non-goals (per issue)
default.
Refs #94