@pi-in-go/pigpen-dev-skills 0.1.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.
package/CREDITS.md ADDED
@@ -0,0 +1,43 @@
1
+ # Credits
2
+
3
+ The Skills in this Package are adaptations of public Skills. The adaptation
4
+ work (condensing, adding a mutation gate, removing the author's private workflow
5
+ references) is by **Michael Kinsy**, MIT. Each adapted file names its source at
6
+ the top and keeps the upstream license.
7
+
8
+ ## mattpocock/skills
9
+
10
+ **Matt Pocock**, https://github.com/mattpocock/skills, MIT
11
+ (Copyright (c) 2026 Matt Pocock; license at
12
+ [`upstream/mattpocock-skills/LICENSE`](upstream/mattpocock-skills/LICENSE)).
13
+
14
+ Adapted from the `engineering` and `productivity` Skills at commit
15
+ `d81f3a183412e71a5b1e84ca21bc1a35eea03a60`:
16
+
17
+ | Skill here | Upstream Skill | What changed |
18
+ |---|---|---|
19
+ | `pigpen-tdd` | `engineering/tdd` | Condensed; explicit test-first mode; mutation gate; independent-oracle rule. |
20
+ | `pigpen-diagnosing-bugs` | `engineering/diagnosing-bugs` | Condensed; loop preference list kept; regression test must be able to fail. |
21
+ | `pigpen-handoff` | `productivity/handoff` | Index-not-store rule for what goes inline. |
22
+ | `pigpen-research` | `engineering/research` | Claim records (value, source, basis, reasoning); where findings go; no background agent required. |
23
+ | `pigpen-grilling` | `productivity/grilling` | One question at a time instead of rounds. |
24
+ | `pigpen-prototype` | `engineering/prototype` | Condensed; `LOGIC.md` and `UI.md` kept close to the source. |
25
+ | `pigpen-code-review` | `engineering/code-review` | Standards and spec axes only; subagents optional. |
26
+
27
+ The unmodified upstream files are kept in [`upstream/mattpocock-skills/`](upstream/mattpocock-skills)
28
+ (renamed from `SKILL.md` so they are not loaded as Skills). They are the current
29
+ files at the commit above. The adaptations were made from an earlier revision, whose
30
+ commit was not recorded, so the diff between an upstream file and its adaptation also
31
+ contains upstream changes made since.
32
+
33
+ ## mitsuhiko/agent-stuff
34
+
35
+ **Armin Ronacher** (GitHub: mitsuhiko), https://github.com/mitsuhiko/agent-stuff,
36
+ Apache License 2.0 (license at
37
+ [`upstream/mitsuhiko-agent-stuff/LICENSE`](upstream/mitsuhiko-agent-stuff/LICENSE)).
38
+
39
+ `pigpen-commit` is adapted from `skills/commit/SKILL.md` at commit
40
+ `0865c849befd2021490679f96a8dee58c84ac857`. As Apache-2.0 section 4(b) requires,
41
+ the modified file states that it was changed: the body of the commit message is
42
+ strongly encouraged rather than optional, and the format rules were tightened. The
43
+ original is in [`upstream/mitsuhiko-agent-stuff/commit.md`](upstream/mitsuhiko-agent-stuff/commit.md).
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Michael Kinsy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # dev-skills
2
+
3
+ Eight general Skills for software work, as one PiG Package. They are adaptations of
4
+ public Skills (see [CREDITS.md](CREDITS.md)); the names carry a `pigpen-` prefix.
5
+
6
+ | Skill | Use it when |
7
+ |---|---|
8
+ | `pigpen-tdd` | you want test-first work: seams, independent oracles, red before green, and a mutation gate. |
9
+ | `pigpen-diagnosing-bugs` | something is broken, failing or slow: build a fast pass/fail loop first, then localize, then fix and prove. |
10
+ | `pigpen-handoff` | a session ends and another must continue: an index document in the OS temp directory, not the repository. |
11
+ | `pigpen-research` | a question needs primary sources, with claims recorded as value, source, basis and reasoning. |
12
+ | `pigpen-grilling` | you want a plan stress-tested: one question at a time, each with a recommended answer. |
13
+ | `pigpen-prototype` | a design question needs throwaway code: a logic prototype or several UI variants. |
14
+ | `pigpen-code-review` | review a diff against standards and against its spec. User-invoked only. |
15
+ | `pigpen-commit` | write a Conventional Commits message with a descriptive body. |
16
+
17
+ Skills are text only: no scripts, no network, nothing runs by itself.
18
+
19
+ ## Install
20
+
21
+ ```sh
22
+ pig install ./components/dev-skills
23
+ ```
24
+
25
+ `pig package validate ./components/dev-skills` validates the Package. The Skills expand
26
+ as `/skill:pigpen-tdd` and so on, and the model can load them by name.
27
+
28
+ ## Not in this Package
29
+
30
+ The author's other Skills tie into a private workflow (spec management, planning,
31
+ ticketing, glossaries) or wrap third-party CLIs, and are not included. If you want
32
+ Matt Pocock's originals, install them from https://github.com/mattpocock/skills.
33
+
34
+ MIT. © Michael Kinsy for the adaptations; upstream licenses in `upstream/`.
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@pi-in-go/pigpen-dev-skills",
3
+ "version": "0.1.0",
4
+ "description": "General software-development Skills adapted from public sources: TDD with a mutation gate, diagnosing bugs, handoff, research, grilling, prototyping, code review and commit messages",
5
+ "keywords": [
6
+ "pig-package",
7
+ "skills",
8
+ "tdd",
9
+ "debugging",
10
+ "code-review",
11
+ "pigpen",
12
+ "skill"
13
+ ],
14
+ "license": "MIT",
15
+ "author": "Michael Kinsy",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/MichaelKinsy/pigpen.git",
19
+ "directory": "components/dev-skills"
20
+ },
21
+ "homepage": "https://github.com/MichaelKinsy/pigpen/tree/main/components/dev-skills#readme",
22
+ "bugs": {
23
+ "url": "https://github.com/MichaelKinsy/pigpen/issues"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "files": [
29
+ "skills",
30
+ "upstream",
31
+ "README.md",
32
+ "LICENSE",
33
+ "CREDITS.md",
34
+ "provenance.json"
35
+ ],
36
+ "pi": {
37
+ "skills": [
38
+ "skills/pigpen-code-review",
39
+ "skills/pigpen-commit",
40
+ "skills/pigpen-diagnosing-bugs",
41
+ "skills/pigpen-grilling",
42
+ "skills/pigpen-handoff",
43
+ "skills/pigpen-prototype",
44
+ "skills/pigpen-research",
45
+ "skills/pigpen-tdd"
46
+ ]
47
+ }
48
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "origin": "ported",
3
+ "authors": ["Michael Kinsy"],
4
+ "license": "MIT",
5
+ "licenseFile": "LICENSE",
6
+ "upstreams": [
7
+ {
8
+ "name": "mattpocock/skills",
9
+ "authors": ["Matt Pocock"],
10
+ "url": "https://github.com/mattpocock/skills",
11
+ "revision": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60",
12
+ "path": "upstream/mattpocock-skills",
13
+ "license": "MIT",
14
+ "licenseFile": "upstream/mattpocock-skills/LICENSE",
15
+ "attributionFile": "CREDITS.md"
16
+ },
17
+ {
18
+ "name": "mitsuhiko/agent-stuff",
19
+ "authors": ["Armin Ronacher"],
20
+ "url": "https://github.com/mitsuhiko/agent-stuff",
21
+ "revision": "0865c849befd2021490679f96a8dee58c84ac857",
22
+ "path": "upstream/mitsuhiko-agent-stuff",
23
+ "license": "Apache-2.0",
24
+ "licenseFile": "upstream/mitsuhiko-agent-stuff/LICENSE",
25
+ "attributionFile": "CREDITS.md"
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: pigpen-code-review
3
+ description: Review the diff since a fixed point along two axes, standards and spec, and report them side by side.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ Adapted from Matt Pocock's `code-review` skill (MIT); see the Package's CREDITS.md.
8
+
9
+ Review the diff between `HEAD` and a fixed point the user names. This is a
10
+ user-selected evaluation after the change works. Read the evidence that it works (run
11
+ output, test results, a manual check) before reviewing. If there is none, report that
12
+ gap instead of substituting a broad automated suite. Focused commands may verify a
13
+ concrete finding.
14
+
15
+ ## 1. Pin the fixed point
16
+
17
+ A commit, branch, tag, or the main branch. If the user named none, ask. Capture the
18
+ diff once with `git diff <fixed-point>...HEAD` (three-dot, against the merge-base) and
19
+ the commit list with `git log <fixed-point>..HEAD --oneline`. Confirm the ref resolves
20
+ and the diff is non-empty before going further.
21
+
22
+ ## 2. Find the spec
23
+
24
+ In order: issue references in the commit messages; a path the user passed; a spec
25
+ under `docs/`, `specs/`, or a scratch directory matching the branch. If none exists,
26
+ the spec axis reports "no spec available" rather than inventing one.
27
+
28
+ ## 3. Run the axes
29
+
30
+ If subagents are available, run the two axes as parallel subagents so they do not
31
+ pollute each other's context; otherwise run them one after the other.
32
+
33
+ - **Standards**: does the code follow this repository's documented standards
34
+ (contributing guide, agent instructions, lint and style rules)? Each finding is a
35
+ judgement call labelled as such, never a hard violation, and anything tooling
36
+ already enforces is skipped.
37
+ - **Spec**: does the diff faithfully implement the originating issue or spec? Missing
38
+ behavior, invented behavior, and silent scope changes all count.
39
+
40
+ ## 4. Aggregate
41
+
42
+ One report, two labelled sections, each finding tied to a file and line. Findings
43
+ only; whether a defect can wait is the user's call. End with the single most
44
+ important finding, not a summary of all of them.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: pigpen-commit
3
+ description: "Read this skill before making git commits"
4
+ license: Apache-2.0
5
+ ---
6
+
7
+ Adapted from mitsuhiko/agent-stuff `skills/commit` (Apache-2.0); see the Package's
8
+ CREDITS.md. **This file was changed from the original:** the body is strongly
9
+ encouraged rather than optional, and the format rules were tightened.
10
+
11
+ Create a git commit for the current changes using Conventional Commits format with a **polished, highly descriptive** message.
12
+
13
+ ## Format
14
+
15
+ `<type>(<scope>): <summary>`
16
+
17
+ - `type` REQUIRED. Use `feat` for new features, `fix` for bug fixes. Other common types: `docs`, `refactor`, `chore`, `test`, `perf`.
18
+ - `scope` OPTIONAL. Short noun in parentheses for the affected area (e.g., `api`, `parser`, `ui`).
19
+ - `summary` REQUIRED. Short, imperative, <= 72 chars, no trailing period.
20
+
21
+ ## Notes
22
+
23
+ - Body is **strongly encouraged** — always include one unless the change is trivially obvious (e.g., fixing a typo). The body should explain **what** changed, **why** it changed, the approach taken, and any notable decisions. A reader of `git log` should understand the change without looking at the diff.
24
+ - Do NOT include breaking-change markers or footers.
25
+ - Do NOT add sign-offs (no `Signed-off-by`), unless the project requires them.
26
+ - Only commit; do NOT push.
27
+ - If it is unclear whether a file should be included, ask the user which files to commit.
28
+ - Treat any caller-provided arguments as additional commit guidance. Common patterns:
29
+ - Freeform instructions should influence scope, summary, and body.
30
+ - File paths or globs should limit which files to commit. If files are specified, only stage/commit those unless the user explicitly asks otherwise.
31
+ - If arguments combine files and instructions, honor both.
32
+
33
+ ## Steps
34
+
35
+ 1. Infer from the prompt if the user provided specific file paths/globs and/or additional instructions.
36
+ 2. Review `git status` and `git diff` to understand the current changes (limit to argument-specified files if provided).
37
+ 3. (Optional) Run `git log -n 50 --pretty=format:%s` to see commonly used scopes.
38
+ 4. If there are ambiguous extra files, ask the user for clarification before committing.
39
+ 5. Stage only the intended files (all changes if no files specified).
40
+ 6. Run `git commit -m "<subject>"` (and `-m "<body>"` if needed).
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: pigpen-diagnosing-bugs
3
+ description: Diagnosis loop for hard bugs and performance regressions. Use when the user says diagnose or debug, or reports something broken, throwing, failing, or slow.
4
+ ---
5
+
6
+ Adapted from Matt Pocock's `diagnosing-bugs` skill (MIT), condensed; see the Package's
7
+ CREDITS.md.
8
+
9
+ If the project keeps a glossary (`CONTEXT.md`), read it for a mental model of the
10
+ modules involved, and check recorded decisions (ADRs) in the area: a surprising
11
+ behavior is sometimes a decision that was written down.
12
+
13
+ ## Phase 1: build a feedback loop
14
+
15
+ This is the skill; everything after is mechanical. Get a **tight** pass/fail signal
16
+ that goes red on this bug, and the bug is 90 percent fixed. Start with the real
17
+ surface that exposed the failure, then make that loop faster and more repeatable. In
18
+ rough order of preference:
19
+
20
+ 1. A reproduction against the running system: the agent itself, a browser, a CLI, an
21
+ API or an SDK.
22
+ 2. A benchmark that reproduces a performance or scale regression.
23
+ 3. Replay of a captured trace, payload, or event log through the real path.
24
+ 4. An existing focused test that already reproduces the bug.
25
+ 5. A headless browser or caller script that checks the visible symptom.
26
+ 6. A throwaway harness: the minimal subset of the system that exercises the path.
27
+ 7. A property or fuzz loop over random inputs, for "sometimes wrong output".
28
+ 8. A bisection harness, so `git bisect run` can walk to the breaking change.
29
+ 9. A differential loop: same input through two versions or configs, diffed.
30
+ 10. A human-in-the-loop script, so manual actions still produce structured output.
31
+
32
+ Then tighten it: faster (cache setup, narrow scope), sharper (assert the specific
33
+ symptom, not "didn't crash"), deterministic (pin time, seed RNG, isolate the
34
+ filesystem). A two-second deterministic loop is a superpower; a flaky thirty-second
35
+ one is barely better than none.
36
+
37
+ For non-deterministic bugs, raise the reproduction rate rather than hunting a clean
38
+ repro: loop the trigger 100 times, parallelize, stress, inject sleeps. A 50 percent
39
+ flake is debuggable; a 1 percent flake is not.
40
+
41
+ If you genuinely cannot build a loop, stop and say so, list what you tried, and ask
42
+ for a reproducing environment, a captured artifact, or permission to add temporary
43
+ instrumentation. Do not hypothesize without a loop.
44
+
45
+ ## Phase 2: localize
46
+
47
+ Consume the loop: bisect the code path, test hypotheses one variable at a time, add
48
+ instrumentation the loop reads. State each hypothesis before testing it, so a wrong
49
+ guess is information rather than drift.
50
+
51
+ ## Phase 3: fix and prove
52
+
53
+ Fix the cause, not the symptom. The loop that failed now succeeds, and the benchmark
54
+ recovers when performance was the defect. Turn the smallest useful reproduction into
55
+ a permanent regression test, and check it can fail (revert the fix, watch it go red).
56
+ If the fix reveals a defect out of scope, report it plainly. Naming the defect does
57
+ not resolve it.
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: pigpen-grilling
3
+ description: Interview the user relentlessly about a plan, decision, or idea until shared understanding is reached. Use when the user wants their thinking stress-tested or says "grill".
4
+ ---
5
+
6
+ Adapted from Matt Pocock's `grilling` skill (MIT); see the Package's CREDITS.md. This
7
+ version asks one question at a time.
8
+
9
+ Interview the user about every aspect of the plan until you reach a shared
10
+ understanding. Walk each branch of the decision tree, resolving dependencies between
11
+ decisions one by one.
12
+
13
+ Ask one question at a time and wait for the answer. If a structured-question tool is
14
+ available (for example `ask_user_question`), use it; otherwise ask in chat. Never put
15
+ more than one substantive decision in one question: a batch lets the load-bearing one
16
+ hide among the easy ones.
17
+
18
+ For each question, give your recommended answer with your reasoning, and present
19
+ verified context and consequences rather than unexplained labels. When choices are
20
+ offered, always allow a free-text answer. Propose a concrete criterion to confirm
21
+ rather than asking an open question.
22
+
23
+ If a fact can be found in the environment (the filesystem, the code, the tracker),
24
+ look it up instead of asking. Decisions belong to the user; facts do not. Never ask
25
+ the human for something you can resolve yourself: a revision, a file path, a retry, a
26
+ validation fix.
27
+
28
+ If the project has a glossary (`CONTEXT.md`), use its canonical terms. When the user's
29
+ answer introduces a conflicting term, stop and resolve the term before continuing.
30
+
31
+ Do not act on the plan until the user confirms the understanding is shared. Record the
32
+ accepted answers and their rationale where the project keeps decisions.
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: pigpen-handoff
3
+ description: Compact the current conversation into a handoff document for the next session's agent.
4
+ ---
5
+
6
+ Adapted from Matt Pocock's `handoff` skill (MIT); see the Package's CREDITS.md.
7
+
8
+ Write a handoff document so a fresh agent can continue this work, and save it to the
9
+ operating system's temporary directory, never the workspace. A handoff is session
10
+ memory, not a deliverable: do not commit one to the repository.
11
+
12
+ The document is an index, not a store. Durable knowledge already has a home: specs,
13
+ ADRs, glossaries, plans, issues, commits, and diffs. Reference each by path or URL and
14
+ never duplicate its content. What belongs inline is only what exists nowhere else yet:
15
+ the current state of the task, the next step, the dead ends already tried, and the
16
+ constraints spoken but not yet written down. If something inline deserves to outlive
17
+ the handoff, file it properly first (a decision record, a glossary term, an issue
18
+ comment) and then point at it.
19
+
20
+ Include a "suggested skills" section naming the skills the next session should invoke,
21
+ and name the issue or ticket the session should pick up, if one exists.
22
+
23
+ Redact secrets: API keys, passwords, personal information.
24
+
25
+ If the user passed arguments, treat them as what the next session will focus on, and
26
+ shape the document for that.
@@ -0,0 +1,27 @@
1
+ # Logic prototypes
2
+
3
+ The question: does this state model or algorithm feel right in the hand, not
4
+ just on paper?
5
+
6
+ Build a minimal interactive terminal app around the state machine or core
7
+ logic, real enough to poke:
8
+
9
+ - Model the states and transitions as plainly as the language allows: a
10
+ discriminated union, an enum plus a transition function, a reducer. This
11
+ snippet is the likely survivor; the decision-rich shape may be inlined into
12
+ the resolving ticket, so keep it separable from the harness around it.
13
+ - A read-eval loop drives it: print the full current state, list the legal
14
+ actions, apply the chosen one, print the new state. Illegal actions print
15
+ why they are illegal rather than crashing, because the rejected transitions
16
+ are half of what the prototype is checking.
17
+ - Seed it with the awkward cases from the discussion: the double-cancel, the
18
+ refund after partial shipment, the concurrent claim. Script them as named
19
+ scenarios the user can replay with one keystroke, so the conversation can
20
+ point at "scenario 3" instead of re-deriving it.
21
+ - Keep the vocabulary of the project glossary (`CONTEXT.md`, if any) in state names and actions. A prototype
22
+ that renames the domain mid-flight pollutes the discussion it exists to
23
+ sharpen.
24
+
25
+ Done when the user has pushed the model through the awkward cases and either
26
+ trusts it or has found where it breaks. Record the verdict and the question it
27
+ settled on the ticket, then capture and discard per the rules in SKILL.md.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: pigpen-prototype
3
+ description: Build a throwaway prototype that answers a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
4
+ ---
5
+
6
+ Adapted from Matt Pocock's `prototype` skill (MIT), condensed; see the Package's
7
+ CREDITS.md.
8
+
9
+ A prototype is **throwaway code that answers a question**. The question decides the
10
+ shape, so identify it first, from the prompt, the surrounding code, a decision record,
11
+ or by asking:
12
+
13
+ - "Does this logic or state model feel right?" leads to [LOGIC.md](LOGIC.md): a tiny
14
+ interactive terminal app that pushes the state machine through cases that are hard
15
+ to reason about on paper.
16
+ - "What should this look like?" leads to [UI.md](UI.md): several radically different
17
+ variations on one route, switchable at runtime.
18
+
19
+ If the question is ambiguous and the user is not reachable, pick the branch that
20
+ matches the surrounding code (a backend module means logic, a page or component means
21
+ UI) and state the assumption at the top of the prototype.
22
+
23
+ ## Rules for both branches
24
+
25
+ 1. **Throwaway from day one, marked as such.** Put the code next to the module or page
26
+ it prototypes so context is obvious, named so a casual reader sees it is not
27
+ production. Follow the project's existing routing and runner conventions; invent
28
+ nothing top-level.
29
+ 2. **One command to run.** The user starts it without thinking.
30
+ 3. **No persistence by default.** State lives in memory. If the question is about
31
+ persistence, use a scratch store with a wipe-me name.
32
+ 4. **Skip the polish.** No tests, no abstractions, no error handling beyond runnable.
33
+ The least code that answers the question. Speed of learning is the whole point.
34
+ 5. **Surface the state.** After every action, print or render the full relevant state
35
+ so the user sees what changed.
36
+ 6. **Capture, then discard.** Fold the validated decision into the real code or the
37
+ ticket it answers. Commit the prototype itself to a throwaway branch off the main
38
+ line and leave a pointer from the ticket. If the decision is hard to reverse and
39
+ surprising, record it as a decision record. The main branch keeps only the
40
+ validated decision, never the prototype.
@@ -0,0 +1,23 @@
1
+ # UI prototypes
2
+
3
+ The question: what should this look like, out of a genuinely open space?
4
+
5
+ Build several **radically different** variations, not one design with three
6
+ accent colors. Different layout, different information hierarchy, different
7
+ interaction model. Three to five variants; fewer hides the space, more blurs
8
+ the reactions.
9
+
10
+ - All variants live on a single route, switched by a URL search parameter,
11
+ with a small floating switcher so the user flips between them in place.
12
+ Obey the project's existing routing convention for where that route goes.
13
+ - Use the project's real component library and design tokens where they
14
+ exist, so reactions are about the design and not about unstyled controls.
15
+ - Fake the data inline with realistic shapes and awkward lengths: the
16
+ 40-character name, the empty list, the 200-row table. A variant that only
17
+ looks right with pretty data has not answered the question.
18
+ - Wire only the interactions the question is about. Everything else is inert
19
+ and visibly so.
20
+
21
+ Show the variants, collect the reaction to each, and converge: often the
22
+ answer is one variant's layout with another's detail. Record which variant
23
+ won and why on the ticket, then capture and discard per SKILL.md.
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: pigpen-research
3
+ description: Investigate a question against primary sources and report findings with citations, provenance, and explicit uncertainty.
4
+ ---
5
+
6
+ # Research
7
+
8
+ Adapted from Matt Pocock's `research` skill (MIT); see the Package's CREDITS.md.
9
+
10
+ Investigate the question against primary sources: official documentation, source code,
11
+ specifications, and first-party APIs. Follow each claim to the source that owns it.
12
+
13
+ Record each captured claim as one semantic unit:
14
+
15
+ - **Value:** what the claim says.
16
+ - **Source:** the exact citation, file, API, or measurement.
17
+ - **Basis:** `stated`, `inferred`, or `unverified`.
18
+ - **Reasoning:** why the evidence supports the claim or why uncertainty remains.
19
+
20
+ Do not present an inference as something the source stated. Do not merge conflicting
21
+ claims by silently replacing one source with another; show the conflict.
22
+
23
+ Findings go, in order:
24
+
25
+ 1. the reply, when the asker is in this session;
26
+ 2. the issue or decision record the research was meant to inform;
27
+ 3. the project's established place for research notes, when the evidence fits neither.
28
+
29
+ If no durable research location exists, keep the findings in the reply and propose a
30
+ location. Never create a loose summary or report file merely because the research was
31
+ long.
32
+
33
+ When delegating to a background agent (if your setup has subagents), give it one
34
+ factual question, the decision it informs, source priority, exit criteria, and the
35
+ required citation shape. It returns evidence and citations to you; it does not decide.
36
+ Independent questions may run in parallel. Reduce their claims and surface conflicts
37
+ instead of concatenating reports.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: pigpen-tdd
3
+ description: Test-driven development. Use when building features or fixing bugs test-first, or when the user mentions red-green or integration tests.
4
+ ---
5
+
6
+ Adapted from Matt Pocock's `tdd` skill (MIT); see the Package's CREDITS.md. Changes: a
7
+ mutation gate, and a stricter rule that tests take their expected values from an
8
+ independent oracle.
9
+
10
+ This skill is an explicit test-first mode. Load it when the user asks for TDD or when
11
+ an accepted plan selects red-green-refactor for a crisp contract.
12
+
13
+ If the project keeps a glossary (`CONTEXT.md` or `GLOSSARY.md`), read it first so test
14
+ names and interface vocabulary match the domain language, and respect recorded
15
+ decisions (ADRs) in the area you touch.
16
+
17
+ ## Seams
18
+
19
+ A **seam** is the public boundary you test at: where behavior is observable without
20
+ reaching inside. Tests live at seams, never against internals. Before writing any
21
+ test, write down the seams under test and confirm them with the user; agreeing them up
22
+ front is how testing effort lands on critical paths. Prefer existing seams, and the
23
+ highest seam possible.
24
+
25
+ ## What a good test is
26
+
27
+ A test verifies behavior through the public interface and takes its expected value
28
+ from an independent oracle: the spec, a worked example, a known-good literal. Never
29
+ from the code's own computation. A good test reads like a specification and survives
30
+ refactors.
31
+
32
+ ## Anti-patterns
33
+
34
+ - **Implementation-coupled**: mocks internal collaborators, tests private methods, or
35
+ verifies through a side channel. The tell: it breaks on refactor when behavior did
36
+ not change.
37
+ - **Tautological**: the assertion recomputes the expected value the way the code does,
38
+ so it passes by construction and can never disagree.
39
+ - **Horizontal slicing**: all tests first, then all implementation. Work in vertical
40
+ slices instead: one test, one minimal implementation, repeat, each a tracer bullet
41
+ shaped by what the last cycle taught.
42
+
43
+ ## The loop
44
+
45
+ Red before green: write the failing test, then only enough code to pass it. One seam,
46
+ one test, one slice per cycle. Refactoring belongs to review, not to the red-green
47
+ cycle.
48
+
49
+ **Mutation gate.** A test earns its keep only if it could fail. After green, flip one
50
+ small detail in the code it covers, a comparison or an operator, and confirm the test
51
+ goes red; restore, and confirm green. A passing test you could not make fail is
52
+ decoration. Run the smallest slice early and locally; the full suite once at the end.
53
+
54
+ Exercise invalid, empty, boundary, and error-path inputs, not only the happy path.
55
+ Never weaken, skip, hardcode, or delete a test to force it green. If a test is wrong,
56
+ say so and fix it in the open.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Matt Pocock
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.