Reconcile gemini/kiro bundlers with template's root-level README/LICENSE - #111
Merged
Merged
Conversation
The template repo (commit d2d9923) moved README.md/LICENSE from per-plugin source to the repo root, where they are canonical, author-owned shared artifacts backing the single emitted Gemini extension / Kiro power. The bundlers still copied a plugin's own README.md/LICENSE into dist bundles and repo-root emission, diverging from the template's real output and risking a root-artifact-collision against the repo's actual root files. Stop copying them, update the parity fixture-completeness check to no longer require them under plugins/skill-evaluator/, and bump the pinned template revision to main HEAD now that the divergence is gone. Refs #89
There was a problem hiding this comment.
Pull request overview
Aligns the Gemini/Kiro bundlers and parity/fixture checks with the template’s newer convention where README.md/LICENSE are canonical repo-root files (shared, author-owned) rather than per-plugin bundle content, and updates the pinned template revision accordingly.
Changes:
- Stop copying per-plugin
README.md/LICENSEinbundleGeminiPluginandbundleKiroPlugin, and update parity expectations to match. - Update template-checkout completeness probing to require the still-relevant emitted fixture files (and explicitly exclude
README.md/LICENSE). - Bump
.github/template-repo.rev, update architecture spec text, and add a changeset describing the behavior change.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| packages/core/src/test-support/template-repo.ts | Updates “complete template checkout” required-file list to match current bundler outputs and excludes README.md/LICENSE. |
| packages/core/src/test-support/template-repo.test.ts | Adds/updates unit coverage for the updated completeness requirements (including the pre-move fixture scenario). |
| packages/core/src/targets/kiro/bundle.ts | Removes README.md/LICENSE from Kiro bundle copied-file set and documents the root-level shared-artifact rationale. |
| packages/core/src/targets/kiro/bundle.test.ts | Updates parity expectations and adds a regression test ensuring README.md/LICENSE are not emitted even if present in pluginDir. |
| packages/core/src/targets/gemini/bundle.ts | Removes README.md/LICENSE from Gemini bundle copied-file set with detailed rationale (template parity + root collision guard). |
| packages/core/src/targets/gemini/bundle.test.ts | Updates emitted-path expectations and adds a regression test for excluding README.md/LICENSE when present in pluginDir. |
| docs/specs/architecture.md | Documents that per-plugin README.md/LICENSE are optional and never copied by bundlers; repo-root files back repo-root emission. |
| .github/template-repo.rev | Advances the pinned template SHA to current main HEAD. |
| .changeset/reconcile-gemini-kiro-root-readme-license.md | Records the bundler behavior change as a patch-level release note for @ai-plugin-marketplace/core. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The regression test built its own scratch plugin directory and never read the template repo, but sat inside the skipIf(SKIP_PARITY_SUITE) block, so it disappeared whenever no template checkout was resolvable — precisely when the parity oracle was also unavailable to catch the regression. Move it to a top-level describe, matching the Kiro suite's placement for the identical test.
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
The template repo (
ai-plugin-marketplace/template, commitd2d9923) movedREADME.md/LICENSEfrom per-plugin source (
plugins/skill-evaluator/README.md) to the repo root, where they arecanonical, author-owned files backing the single emitted Gemini extension / Kiro power. The tools
bundler (
bundleGeminiPlugin,bundleKiroPlugin) still copied a plugin's ownREADME.md/LICENSEinto
dist/gemini/<plugin>/,dist/kiro/<plugin>/, and the repo-root single-artifact-hostemission — diverging from the template's real output and, for repo-root emission, capable of
tripping the
root-artifact-collisionguard against the repo's actual root files. This PR stopscopying them and advances the pinned template revision to
mainHEAD now that the divergence isgone (issue #86's pinning mechanism is unchanged — only the pinned SHA moves).
Acceptance criteria mapping
GeneratedFile.targetshared-artifactownership, not per-plugin copies —
bundleGeminiPlugin/bundleKiroPlugin(
packages/core/src/targets/{gemini,kiro}/bundle.ts) no longer includeREADME.md/LICENSEin their copied-file set. Root
README.md/LICENSEare treated the same way Model shared-artifact ownership in GeneratedFile.target #54's'shared'GeneratedFile.targettreats artifacts with no single owning target: they simply already existat the root the single artifact is emitted into, so the bundlers never duplicate or re-home
them. Covered by the new regression tests
bundleGeminiPlugin — emitted paths > does not include README.md/LICENSE even when present in pluginDirand the equivalentbundleKiroPlugin — README.md/LICENSE exclusionsuite (both fail pre-fix, since the old codecopied a stray plugin-dir README/LICENSE verbatim).
packages/core/src/targets/gemini/bundle.test.tsand
packages/core/src/targets/kiro/bundle.test.ts(describe.skipIf(SKIP_PARITY_SUITE)blocks) verified locally against a template checkout at the new pinned SHA (
AIPM_TEMPLATE_REPOAIPM_REQUIRE_TEMPLATE=1) — 20/20 passing, positive coverage (not skip).mainHEAD in this PR —.github/template-repo.revnow pins5eeef913ca0da920f07852286c336a03d152bb8e(templatemaintip). This PR's own CI (checkjob,per Run the gemini/kiro bundle parity suites in CI against a pinned template revision, eliminating the CI-skips-entirely asymmetry #86,
AIPM_REQUIRE_TEMPLATE=1) is the end-to-end proof the bump procedure works — seeCONTRIBUTING.md"Bumping the pinned template revision".docs/specs/architecture.md§4 ("Plugin source layout") now documentsthat
README.md/LICENSEare optional per-plugin files, never toolkit-generated, never copiedby the bundlers, and that in a repo emitting a repo-root Gemini/Kiro artifact the root
README.md/LICENSEback that artifact as pre-existing shared content.Also updated (required to keep the parity fixture-completeness gate meaningful post-move):
packages/core/src/test-support/template-repo.ts'sREQUIRED_SKILL_EVALUATOR_FILESno longerrequires
plugins/skill-evaluator/{README.md,LICENSE}(which the template intentionally dropped)— it now requires the files the bundlers actually still emit
(
gemini-extension.json/GEMINI.md/POWER.md/mcp.json), with matching test coverage intemplate-repo.test.tsincluding a regression case for a checkout stuck on the pre-#89README/LICENSE fixture files.
Verification
AIPM_TEMPLATE_REPO=<template checkout at 5eeef91> AIPM_REQUIRE_TEMPLATE=1 pnpm run check—green (typecheck, lint, api-report, full
core+clitest suites, knip, syncpack, format).AIPM_TEMPLATE_REPO) run also green — the local candidate-resolved checkout stillruns the parity suites with positive coverage; the
describe.skipIfskip path itself is exercisedby existing
template-repo.test.tsunit coverage.pnpm run fix:format— no changes (already formatted).Non-goals honored
Refs #89