pi-gauntlet 4.12.2 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +103 -0
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## v4.13.0 - 2026-08-20
4
+
5
+ - Claude Code plugin marketplace (gh-11): new `.claude-plugin/marketplace.json` exposes exactly three tracker-facing skills (`shape-ticket`, `gatekeep-pr`, `check-delivery`) to Claude Code in place - plugin `gauntlet`, marketplace `pi-gauntlet`, consumer setting `"enabledPlugins": {"gauntlet@pi-gauntlet": true}`. Exclusivity rests on `source: "./"` + `strict: false` + specific subdir paths; `"agents": []` suppresses the default `agents/` scan so pi personas never register as CC agents. Zero skill-body edits; the directory is excluded from the npm tarball and never read by pi.
6
+ - `scripts/ci.mjs`: new marketplace guard - identity pins (`gauntlet`@`pi-gauntlet`), source/strict/agents assertions, scan-leak entry ban, allowlist path + frontmatter existence checks, bundle-local `.md` reference integrity for allowlisted skills, and a negative npm-pack assertion for `.claude-plugin/`.
7
+ - README: new "Use from Claude Code" section - consumer settings snippet, register/install/enable distinction, `CLAUDE.md` symlink advice, folder-trust gotcha, and an 11-step smoke-test cookbook.
8
+
3
9
  ## v4.12.2 - 2026-08-19
4
10
 
5
11
  - New `skills/shape-ticket/reference/split-axes.md`: the shared split test for tickets and specs - identity test (same precipitating failure / mooted outcome = one concern), user-observable outcome test, closed axis list with pass/fail examples, Never-axis list (fix location, service/repo/layer/team, "keep tickets small"), discovery-conversion exemption, fail-closed release-timing precondition gated on a documented `## Deployment` overrides section.
package/README.md CHANGED
@@ -124,6 +124,109 @@ cd ~/path/to/your/repo && pi install -l ~/repos/pi-gauntlet
124
124
  cd ~/repos/pi-gauntlet && npm run link-agents # local-path installs skip npm install; run this once
125
125
  ```
126
126
 
127
+ ## Use from Claude Code
128
+
129
+ Three skills are exposed to Claude Code via the plugin marketplace at
130
+ `.claude-plugin/marketplace.json`: **shape-ticket**, **gatekeep-pr**, and
131
+ **check-delivery**. They are harness-portable by design - every pi-specific
132
+ mechanic they touch (`plan_tracker`, `gauntlet_setting`, `subagent()`) carries
133
+ an inline fallback, so they run on Claude Code's native facilities. This is the
134
+ supported set. Not exposed, in two classes: (a) genuinely pi-bound surface -
135
+ the full gated pipeline (brainstorming -> writing-plans ->
136
+ subagent-driven-development -> verify -> finish), the spec council, the
137
+ conformance gate, flow guards, verify-before-ship, and all `piGauntlet.*`
138
+ settings, which depend on pi extensions; (b) runtime-neutral skills
139
+ (e.g. `systematic-debugging`, `receiving-code-review`, `using-git-worktrees`) that
140
+ are simply out of scope for this channel, not incompatible - re-adding one is a
141
+ one-line allowlist append. For Claude-Code-native equivalents of the
142
+ methodology skills, see [obra/superpowers](https://github.com/obra/superpowers).
143
+
144
+ ### Setup
145
+
146
+ Add to your repo's `.claude/settings.json`:
147
+
148
+ ```json
149
+ {
150
+ "extraKnownMarketplaces": {
151
+ "pi-gauntlet": {
152
+ "source": { "source": "github", "repo": "jjuraszek/pi-gauntlet" }
153
+ }
154
+ },
155
+ "enabledPlugins": { "gauntlet@pi-gauntlet": true }
156
+ }
157
+ ```
158
+
159
+ Add `"ref": "vX.Y.Z"` to the source object to pin a tag; the default tracks the
160
+ default branch. Claude Code merges settings entries whole (no field-level
161
+ merge), so teams layering managed settings must carry the full objects.
162
+
163
+ Registration, installation, and enablement are distinct steps in Claude Code:
164
+ `extraKnownMarketplaces` registers the marketplace, `enabledPlugins` records
165
+ enablement intent. If a fresh machine shows the plugin as known but not
166
+ installed, run `/plugin install gauntlet@pi-gauntlet` once. Alternative path
167
+ without touching settings.json: `/plugin marketplace add jjuraszek/pi-gauntlet`,
168
+ then install.
169
+
170
+ Invocation: `/gauntlet:shape-ticket` (or bare `/shape-ticket` when unambiguous).
171
+
172
+ Project instructions: Claude Code reads `CLAUDE.md`, pi reads `AGENTS.md` - a
173
+ symlink keeps one source of truth: `ln -s AGENTS.md CLAUDE.md`. The gauntlet
174
+ overrides ladder (`.pi/gauntlet-overrides.md` -> `gauntlet-overrides.md` ->
175
+ `doc/gauntlet-overrides.md`) works unchanged on Claude Code - it is a plain
176
+ file read.
177
+
178
+ **Trust gotcha:** the marketplace auto-activates only after you trust *that
179
+ exact repo folder* in interactive Claude Code. Trusting a parent folder,
180
+ `claude -p`, or SDK runs in untrusted folders silently skip
181
+ `extraKnownMarketplaces` with no error.
182
+
183
+ ### Smoke test
184
+
185
+ 1. Create a scratch repo and add the marketplace config:
186
+
187
+ mkdir -p /tmp/cc-smoke/.claude && cd /tmp/cc-smoke && git init
188
+ cat > .claude/settings.json <<'EOF'
189
+ {
190
+ "extraKnownMarketplaces": {
191
+ "pi-gauntlet": {
192
+ "source": { "source": "github", "repo": "jjuraszek/pi-gauntlet" }
193
+ }
194
+ },
195
+ "enabledPlugins": { "gauntlet@pi-gauntlet": true }
196
+ }
197
+ EOF
198
+
199
+ 2. Start Claude Code interactively in that directory: `claude`
200
+ 3. When prompted, trust the folder (this exact folder - trust is what activates
201
+ the marketplace; there is no separate marketplace prompt).
202
+ 4. Run `/plugin` and confirm: marketplace `pi-gauntlet` is listed, plugin
203
+ `gauntlet` is enabled. If it shows as known but not installed, run
204
+ `/plugin install gauntlet@pi-gauntlet` and re-check.
205
+ 5. Confirm exactly three skills are registered under the plugin (via the
206
+ `/plugin` details view): shape-ticket, gatekeep-pr, check-delivery.
207
+ 6. Invoke `/gauntlet:shape-ticket` with a deliberately two-concern ask (e.g.
208
+ "shape a ticket: CSV import for operators, plus a partner-facing status
209
+ API") so the skill deterministically consults its
210
+ `reference/split-axes.md` before proposing a split. Expected: skill
211
+ activates, reads the reference file, reaches its tracker capability ladder
212
+ without erroring on missing pi tools. Stop at the first human gate; write
213
+ nothing to any tracker.
214
+ 7. Invoke `/gauntlet:gatekeep-pr` in the scratch repo (which has no PR).
215
+ Expected: the skill activates and stops at its configuration/verification
216
+ ladder reporting nothing to gate - no error about missing pi tools, no
217
+ mutation.
218
+ 8. Invoke `/gauntlet:check-delivery` with no deliverable reference. Expected:
219
+ the skill activates and asks for / reports a missing deliverable set - a
220
+ reported skip, not a pass, and no pi-tool error.
221
+ 9. Negative check: type `/gauntlet:brainstorming`. Expected: no such skill -
222
+ the allowlist excluded it.
223
+ 10. Optional validator pass: `claude plugin validate .` from a checkout of
224
+ pi-gauntlet (strict mode if available). Expected: no schema errors.
225
+ 11. Agent check: type `@gauntlet:` in the mention typeahead (or open the
226
+ plugin's details). Expected: the plugin registers no agents - `"agents": []`
227
+ in the marketplace entry suppresses the default `agents/` scan of the
228
+ repo's pi personas.
229
+
127
230
  ## Project-specific overrides
128
231
 
129
232
  The skills shipped here are generic on purpose - they describe *how* to TDD, brainstorm, debug, request review, etc., without naming your services, your CI command, or your worktree wrapper. When you need that level of detail, drop a file at `.pi/gauntlet-overrides.md` in your repo. The skills read it at runtime and merge sections that match the skill's name or topic:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-gauntlet",
3
- "version": "4.12.2",
3
+ "version": "4.13.0",
4
4
  "description": "Opinionated, gated workflow skills, subagent personas, and runtime extensions for the pi coding agent.",
5
5
  "author": "Jacek Juraszek",
6
6
  "type": "module",