From 72b541eb6b7232c6bdf4a9b2fcefeecf1f6ffa45 Mon Sep 17 00:00:00 2001 From: PBNZ Date: Mon, 6 Jul 2026 12:57:02 +1200 Subject: [PATCH 1/4] fix(new-repo): track template files swallowed by a global gitignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A global gitignore (*private* and env rules) silently kept two bundled templates out of git, so fresh clones and installed copies scaffolded incomplete repos: - types/powershell-module/core/Private/.gitkeep — the type's own .psm1 and README rely on Private/ existing - types/docker-compose/core/.env.example — the committed template the type's README and compose.yaml point users at Track both, and add a repo-level negation for the whole bundled templates/ tree so a global rule can never silently drop template payload again (verified with git check-ignore). Fixes #2 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01VZrsZsqCMvyd3CqqyXVsCR --- .gitignore | 6 ++++++ CHANGELOG.md | 8 ++++++++ .../templates/types/docker-compose/core/.env.example | 4 ++++ .../types/powershell-module/core/Private/.gitkeep | 0 4 files changed, 18 insertions(+) create mode 100644 plugins/repokit/skills/new-repo/templates/types/docker-compose/core/.env.example create mode 100644 plugins/repokit/skills/new-repo/templates/types/powershell-module/core/Private/.gitkeep diff --git a/.gitignore b/.gitignore index d673bef..ca9b5de 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,9 @@ __pycache__/ release-assets/ *.nupkg node_modules/ + +# Bundled scaffolding templates are payload, never local cruft: a GLOBAL gitignore +# may match template filenames (a `*private*` rule ate powershell-module's +# Private/.gitkeep; env rules ate docker-compose's .env.example). This repo-level +# negation outranks the global file so template files always stay tracked. +!plugins/repokit/skills/new-repo/templates/** diff --git a/CHANGELOG.md b/CHANGELOG.md index ebfcc5d..fce4a8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The plugin now displays as `repo-kit` in the `/plugin` UI (via `displayName`), matching the marketplace name. - `/new-repo` now sets a repo-local commit identity using the GitHub noreply email by default (so a new repo doesn't leak a personal address) and initialises the default branch as `main`. +### Fixed + +- Two bundled template files existed only in the author's working tree — a global gitignore + (`*private*` and env patterns) had silently kept them out of git, so fresh clones and installed + copies scaffolded incomplete repos: `powershell-module/core/Private/.gitkeep` (#2) and + `docker-compose/core/.env.example`. Both are now tracked, and the repo's `.gitignore` un-ignores + everything under the bundled `templates/` tree so this cannot recur. + ## [0.1.0] - 2026-06-21 ### Added diff --git a/plugins/repokit/skills/new-repo/templates/types/docker-compose/core/.env.example b/plugins/repokit/skills/new-repo/templates/types/docker-compose/core/.env.example new file mode 100644 index 0000000..5e75676 --- /dev/null +++ b/plugins/repokit/skills/new-repo/templates/types/docker-compose/core/.env.example @@ -0,0 +1,4 @@ +# Copy to .env (gitignored) and fill in. .env holds secrets and local config; +# this .env.example is committed as the template. +APP_PORT=8080 +DB_PASSWORD=change-me diff --git a/plugins/repokit/skills/new-repo/templates/types/powershell-module/core/Private/.gitkeep b/plugins/repokit/skills/new-repo/templates/types/powershell-module/core/Private/.gitkeep new file mode 100644 index 0000000..e69de29 From e68a308fd49f65bdbe19f262348a33099107414d Mon Sep 17 00:00:00 2001 From: PBNZ Date: Mon, 6 Jul 2026 12:58:07 +1200 Subject: [PATCH 2/4] fix(new-repo): modernise the powershell-module manifest defaults The manifest template advertised PowerShellVersion 5.1 with no CompatiblePSEditions, while everything else in the type is modern- PowerShell-only (pwsh CI on ubuntu-latest, Publish-PSResource publish, Install-PSResource docs). Scaffolds now declare what the type targets: - PowerShellVersion = '7.0' - CompatiblePSEditions = @('Core') - a PSData hint to add the Gallery compatibility tags (PSEdition_Core plus OS tags) before publishing Verified against Microsoft Learn (about_Module_Manifests, module-psedition-support, package-manifest-affecting-ui) and smoke- tested with Test-ModuleManifest on a rendered manifest. Fixes #3 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01VZrsZsqCMvyd3CqqyXVsCR --- CHANGELOG.md | 4 ++++ .../core/{{ModuleName}}.psd1.tmpl | 17 ++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fce4a8b..f1f5069 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 copies scaffolded incomplete repos: `powershell-module/core/Private/.gitkeep` (#2) and `docker-compose/core/.env.example`. Both are now tracked, and the repo's `.gitignore` un-ignores everything under the bundled `templates/` tree so this cannot recur. +- The `powershell-module` manifest template now matches the type's modern-PowerShell-only tooling + (pwsh CI, `Publish-PSResource`): `PowerShellVersion = '7.0'`, `CompatiblePSEditions = @('Core')`, + plus a hint to add the Gallery's compatibility tags (`PSEdition_Core` + OS tags) before + publishing (#3). ## [0.1.0] - 2026-06-21 diff --git a/plugins/repokit/skills/new-repo/templates/types/powershell-module/core/{{ModuleName}}.psd1.tmpl b/plugins/repokit/skills/new-repo/templates/types/powershell-module/core/{{ModuleName}}.psd1.tmpl index 401d9a1..59fe1d5 100644 --- a/plugins/repokit/skills/new-repo/templates/types/powershell-module/core/{{ModuleName}}.psd1.tmpl +++ b/plugins/repokit/skills/new-repo/templates/types/powershell-module/core/{{ModuleName}}.psd1.tmpl @@ -1,10 +1,11 @@ @{ - RootModule = '{{ModuleName}}.psm1' - ModuleVersion = '0.1.0' # x-release-please-version - GUID = '{{Guid}}' - Author = '{{author}}' - Description = '{{description}}' - PowerShellVersion = '5.1' + RootModule = '{{ModuleName}}.psm1' + ModuleVersion = '0.1.0' # x-release-please-version + GUID = '{{Guid}}' + Author = '{{author}}' + Description = '{{description}}' + PowerShellVersion = '7.0' + CompatiblePSEditions = @('Core') # List the Public/ functions you want exported (explicit — no wildcards). FunctionsToExport = @() @@ -14,7 +15,9 @@ PrivateData = @{ PSData = @{ - # Fill these before publishing to the PowerShell Gallery. + # Fill these before publishing to the PowerShell Gallery. For the + # Gallery's compatibility filters, tag the edition and OS you support, + # e.g. 'PSEdition_Core', 'Windows', 'Linux', 'macOS'. Tags = @() LicenseUri = '' ProjectUri = '' From bcaa5f316420b3d32041d1393facf54f7d6f7b87 Mon Sep 17 00:00:00 2001 From: PBNZ Date: Mon, 6 Jul 2026 12:59:02 +1200 Subject: [PATCH 3/4] docs: record the public-release and distribution decisions (ADR-0004) - ADR-0004: go public with 0.2.0; this repo stays the canonical marketplace; pbnz-skills lists the plugin as a git-subdir reference (a listing, not a copy) - README: document the pbnz-skills install alternative - CHANGELOG: backfill the where-things-go guide and naming-conventions entries that shipped without changelog lines Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01VZrsZsqCMvyd3CqqyXVsCR --- CHANGELOG.md | 6 +++ README.md | 7 ++++ .../0004-public-release-and-distribution.md | 41 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 docs/adr/0004-public-release-and-distribution.md diff --git a/CHANGELOG.md b/CHANGELOG.md index f1f5069..799b3d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 every output, and a scheduled sync workflow opens a PR when the upstream collection changes. The collection is committed, so the repo builds with just Docker — no Postman account. - The `repo-standard` skill now tells agents to check the remote after a push/PR — CI/Actions status and GitHub Copilot / reviewer feedback — before calling work done. +- A `where-things-go.md` placement guide in the `repo-standard` skill: "I have X — where does it + go, how do I create the place if it's missing, and on what convention?" +- A naming-conventions section in the standard: which casing each convention-bearing file and + directory follows, and why (match the ecosystem that owns the name). +- `README.md` documents the [`PBNZ/pbnz-skills`](https://github.com/PBNZ/pbnz-skills) marketplace + listing as an alternative install channel; this repo remains the canonical home (ADR-0004). ### Changed diff --git a/README.md b/README.md index 9ed06b6..fe53a1e 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,13 @@ flowchart LR /reload-plugins ``` +RepoKit is also listed in the [`PBNZ/pbnz-skills`](https://github.com/PBNZ/pbnz-skills) +marketplace (a directory of PBNZ plugins); if you already have that marketplace added: + +```text +/plugin install repokit@pbnz-skills +``` + Then scaffold a repo: ```text diff --git a/docs/adr/0004-public-release-and-distribution.md b/docs/adr/0004-public-release-and-distribution.md new file mode 100644 index 0000000..02aa037 --- /dev/null +++ b/docs/adr/0004-public-release-and-distribution.md @@ -0,0 +1,41 @@ +# ADR-0004: Going public, and distribution via two marketplaces + +- **Status:** accepted +- **Date:** 2026-07-06 + +## Context + +RepoKit was built private-first (ADR-0001) and has reached the point of being useful beyond its +author: three built-out types, a dogfooded standard, green CI, and a first real-world scaffold +test behind it. Going public raised two distribution questions: + +1. **Where do people install from?** RepoKit ships its own self-contained marketplace + (ADR-0001 D1) — but PBNZ also operates [`pbnz-skills`](https://github.com/PBNZ/pbnz-skills), + a public marketplace repo that currently lists nothing (its only plugin, Newton, moved to a + dedicated repo, and its README declared "one repo per plugin, not back here"). +2. **What does "ready to be public" require?** The repo already dogfoods the Public tier + (LICENSE, SECURITY, CoC, PR/issue templates, CI), so the gap was release hygiene (#4) and the + GitHub-side settings (topics, branch rules, security features). + +## Decision + +- **Go public with release 0.2.0**, clearing the release-hygiene backlog (#4): retroactive tag + `v0.1.0` on the commit that declared 0.1.0, `v0.2.0` on the release commit, matching GitHub + releases, and versions bumped in `plugin.json` + `marketplace.json`. +- **This repo stays the canonical home and marketplace.** The primary install is + `/plugin marketplace add PBNZ/repo-kit`. +- **Also list the plugin in `PBNZ/pbnz-skills` as a reference**, using a `git-subdir` marketplace + source pointing at `plugins/repokit` in this repo. This is a listing, not a copy: no plugin + content is duplicated into pbnz-skills, so the maintained-in-two-places failure that prompted + pbnz-skills' one-repo-per-plugin rule cannot recur. pbnz-skills becomes a directory of PBNZ + plugins whose canonical homes are their own repos. + +## Consequences + +- "Publish" remains bump + tag + push (ADR-0001 D1). The pbnz-skills listing is a second + discovery channel that needs **no per-release maintenance** — the reference entry carries no + version pin, so installs always fetch the current tagged content from this repo. +- pbnz-skills' README/policy is amended in that repo (reference listings welcome; + content-carrying plugins still live in their own repos). +- This repo must remain public for either channel to work; flipping visibility is the release + act, done by the maintainer. From dda0e42e0255448399313c50b46be3239177360e Mon Sep 17 00:00:00 2001 From: PBNZ Date: Mon, 6 Jul 2026 13:00:01 +1200 Subject: [PATCH 4/4] chore(release): 0.2.0 Cut the Unreleased backlog into 0.2.0: bump plugin.json and the marketplace entry to 0.2.0, move category to the marketplace entry, and date the changelog section. Tags v0.1.0 (retroactive, at the commit that declared 0.1.0) and v0.2.0 accompany this commit, so installed copies can finally see that content moved past 0.1.0. Fixes #4 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01VZrsZsqCMvyd3CqqyXVsCR --- .claude-plugin/marketplace.json | 3 ++- CHANGELOG.md | 7 ++++++- plugins/repokit/.claude-plugin/plugin.json | 5 ++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6f10f91..46add1f 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,8 @@ "name": "repokit", "source": "./plugins/repokit", "description": "Scaffold standard-compliant repos (/new-repo) and apply the repo standard while you work.", - "version": "0.1.0" + "version": "0.2.0", + "category": "productivity" } ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 799b3d4..804b552 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.0] - 2026-07-06 + ### Added - A `docker-compose` repo type for `/new-repo`: a minimal `compose.yaml` (named volumes for data, @@ -30,6 +32,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The plugin now displays as `repo-kit` in the `/plugin` UI (via `displayName`), matching the marketplace name. - `/new-repo` now sets a repo-local commit identity using the GitHub noreply email by default (so a new repo doesn't leak a personal address) and initialises the default branch as `main`. +- `category` moved from `plugin.json` to the marketplace entry — Claude Code reads it from the + marketplace manifest, not the plugin manifest (flagged by `claude plugin validate`). ### Fixed @@ -54,5 +58,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Templates for the **Core**, **Public**, and **Published** tiers, plus the **powershell-module** type overlay. The other types ship as stubs. -[Unreleased]: https://github.com/PBNZ/repo-kit/compare/v0.1.0...HEAD +[Unreleased]: https://github.com/PBNZ/repo-kit/compare/v0.2.0...HEAD +[0.2.0]: https://github.com/PBNZ/repo-kit/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/PBNZ/repo-kit/releases/tag/v0.1.0 diff --git a/plugins/repokit/.claude-plugin/plugin.json b/plugins/repokit/.claude-plugin/plugin.json index 45e7789..75bb25c 100644 --- a/plugins/repokit/.claude-plugin/plugin.json +++ b/plugins/repokit/.claude-plugin/plugin.json @@ -3,13 +3,12 @@ "name": "repokit", "displayName": "repo-kit", "description": "Scaffold standard-compliant repos with /new-repo, and apply the RepoKit standard (conventions + pre-commit/pre-PR checklists) while working in any compliant repo.", - "version": "0.1.0", + "version": "0.2.0", "author": { "name": "PBNZ" }, "homepage": "https://github.com/PBNZ/repo-kit", "repository": "https://github.com/PBNZ/repo-kit", "license": "Apache-2.0", - "keywords": ["scaffolding", "repo-standard", "templates", "conventional-commits", "agent-skills"], - "category": "productivity" + "keywords": ["scaffolding", "repo-standard", "templates", "conventional-commits", "agent-skills"] }