Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
}
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/**
25 changes: 24 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -19,11 +21,31 @@ 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

- 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

- 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.
- 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

Expand All @@ -36,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
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
41 changes: 41 additions & 0 deletions docs/adr/0004-public-release-and-distribution.md
Original file line number Diff line number Diff line change
@@ -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.
5 changes: 2 additions & 3 deletions plugins/repokit/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
}
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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 = @()
Expand All @@ -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 = ''
Expand Down
Loading