infinity-harness 2.0.0 → 2.0.1
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/CHANGELOG.md +59 -0
- package/README.md +30 -3
- package/harness/docs/ARCHITECTURE.md +1 -1
- package/harness/docs/skills.md +89 -0
- package/harness/skills/auth-security.md +1 -0
- package/harness/skills/building-tools.md +35 -39
- package/harness/skills/capability-acquisition.md +1 -0
- package/harness/skills/cli-design.md +1 -0
- package/harness/skills/code-review.md +1 -0
- package/harness/skills/codebase-design.md +1 -0
- package/harness/skills/concurrency-async.md +1 -0
- package/harness/skills/config-and-secrets.md +1 -0
- package/harness/skills/context-hygiene.md +1 -0
- package/harness/skills/databases.md +1 -0
- package/harness/skills/diagnosing-bugs.md +1 -0
- package/harness/skills/domain-modeling.md +1 -0
- package/harness/skills/error-handling-logging.md +1 -0
- package/harness/skills/frontend-ui.md +1 -0
- package/harness/skills/grilling.md +1 -0
- package/harness/skills/http-apis.md +1 -0
- package/harness/skills/performance.md +1 -0
- package/harness/skills/pi-todo-adapted.md +1 -0
- package/harness/skills/planning-tasks.md +1 -0
- package/harness/skills/prototype.md +2 -1
- package/harness/skills/research.md +1 -0
- package/harness/skills/resolving-merge-conflicts.md +1 -0
- package/harness/skills/scope-discipline.md +1 -0
- package/harness/skills/self-review.md +1 -0
- package/harness/skills/stuck-protocol.md +1 -0
- package/harness/skills/tdd.md +1 -0
- package/harness/skills/testing-infra.md +1 -0
- package/harness/skills/writing-skills.md +2 -1
- package/package.json +1 -1
- package/src/core/brief.ts +45 -0
- package/src/core/skills.ts +386 -0
- package/src/core/skillsAudit.ts +223 -0
- package/src/core/types.ts +2 -0
- package/harness/skills/README.md +0 -60
- package/harness/skills/building-mcp-servers.md +0 -70
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,65 @@ All notable changes to this project are documented here.
|
|
|
4
4
|
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [2.0.1] — 2026-08-23
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **pi printed a skill conflict on every start.** `harness/skills/README.md` was a README, and pi
|
|
12
|
+
loads *every* `.md` in a declared skills directory as a skill — so every session opened with
|
|
13
|
+
`[Skill conflicts] … description is required`. The README moved to `harness/docs/skills.md`, and
|
|
14
|
+
`tests/skills.test.ts` now audits the shipped skills against pi's own rules (frontmatter present,
|
|
15
|
+
`description` non-empty and within length, `name` lowercase-and-hyphens, matching its filename, no
|
|
16
|
+
duplicates, no UTF-8 BOM hiding the header). A warning the user saw at runtime is a failure we see
|
|
17
|
+
at test time.
|
|
18
|
+
- **Four shipped skills told the agent to run a CLI that does not exist.**
|
|
19
|
+
`capability-acquisition`, `building-tools`, `writing-skills` and the deleted MCP skill all
|
|
20
|
+
instructed the model to register capabilities with `infinity-harness capability add …` — a command
|
|
21
|
+
from the `dev-harness` ancestor that this package never had. An agent following them got stuck at
|
|
22
|
+
3am on a command not found. Rewritten around what pi actually provides: a skill file in
|
|
23
|
+
`.pi/skills/`, a script in the repo, or an extension via `pi install`.
|
|
24
|
+
|
|
25
|
+
### Removed
|
|
26
|
+
|
|
27
|
+
- **`building-mcp-servers.md`**, and every other reference to MCP. pi has no MCP client — no
|
|
28
|
+
dependency, no configuration, no code — so a skill about scaffolding MCP servers and registering
|
|
29
|
+
them could only send the agent somewhere pi cannot follow. This is a pi extension; MCP was
|
|
30
|
+
another system's answer.
|
|
31
|
+
- **`harness/capability/sources.json` and `harness/tools/`.** Neither was read by any code, neither
|
|
32
|
+
was published, and both documented the same missing CLI.
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
- **The brief names the skills that match the work.** The docs claimed it did; nothing implemented
|
|
37
|
+
it. Every skill now declares a `kind` — `process` (belongs to its phase), `domain` (needs to share
|
|
38
|
+
vocabulary with the task) or `meta` (asked for explicitly) — and the brief ranks them by phase
|
|
39
|
+
position, tag hits and name mentions, showing the best two. A task about *"two workers racing on
|
|
40
|
+
the lock"* gets `concurrency-async`; a bare BUILD task gets `tdd`; a task that matches nothing gets
|
|
41
|
+
no section at all, because a padded section teaches the model to skip it.
|
|
42
|
+
- **`src/core/skills.ts`** — skill loading, header parsing and matching, resolved from the package so
|
|
43
|
+
it works in an install with no project setup.
|
|
44
|
+
- **`src/core/skillsAudit.ts`** — pi's validation rules, reproduced strictly enough that a clean
|
|
45
|
+
audit means a clean start. Also catches what pi does not: a duplicate name (pi keys skills by name,
|
|
46
|
+
so one silently ceases to exist), a mistyped phase, a missing `kind`, and a name that disagrees
|
|
47
|
+
with its filename.
|
|
48
|
+
- **A `package` E2E scenario** — `npm pack`, extracted and inspected. Every bug it looks for was
|
|
49
|
+
found by a user after install and by nothing in this repository: a file pi rejects, a symlink out
|
|
50
|
+
of the tree, a module the extension imports that npm did not publish, a UTF-8 BOM. The repo working
|
|
51
|
+
tree is not the product; the tarball is.
|
|
52
|
+
- **A reachability guard.** "The tested code was not the shipped code" was this project's worst bug.
|
|
53
|
+
The `package` scenario now also walks every import from the extension entry point and fails on any
|
|
54
|
+
*new* module that ships without a path to it. Nine modules are unreachable today — `worker`,
|
|
55
|
+
`unstuck`, `review`, `rework`, `replan`, the three `goal*` modules and the audit itself — and they
|
|
56
|
+
are named in the test with the reason, so the debt is visible and cannot grow quietly.
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- `prototype` now leads with PLAN rather than BUILD — it answers a design question before you commit
|
|
61
|
+
to one, and the phase a skill leads with is what decides its rank.
|
|
62
|
+
- Tag matching tolerates plurals, so a task about "two workers" matches the `worker` tag.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
7
66
|
## [2.0.0] — 2026-08-23
|
|
8
67
|
|
|
9
68
|
Renamed from `pi-harness` to **infinity-harness**, and rebuilt from a working prototype into
|
package/README.md
CHANGED
|
@@ -186,6 +186,32 @@ verdict. It refreshes itself every 5 seconds and reconnects with backoff if the
|
|
|
186
186
|
The dashboard is strictly read-only and binds to `127.0.0.1`. It never writes, and never bumps
|
|
187
187
|
`baseRevision` — opening it can't perturb the run you're watching.
|
|
188
188
|
|
|
189
|
+
## Craft skills
|
|
190
|
+
|
|
191
|
+
28 short documents on how to do the work well — how to write a test worth
|
|
192
|
+
keeping, how to debug something intermittent, how to design a module boundary.
|
|
193
|
+
They ship with the package, so pi loads them wherever it's installed and the
|
|
194
|
+
model can invoke any of them by name.
|
|
195
|
+
|
|
196
|
+
A model with 28 skills available and no idea which one applies reads none of
|
|
197
|
+
them, so **the brief names the ones that match the work in hand**. Each skill
|
|
198
|
+
declares what it's for:
|
|
199
|
+
|
|
200
|
+
```yaml
|
|
201
|
+
kind: domain # process | domain | meta
|
|
202
|
+
phases: [plan, build, verify] # the phase it leads counts most
|
|
203
|
+
tags: [concurrency, race, lock, mutex, deadlock] # vocabulary a task would use
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
A `process` skill belongs to its phase — TDD is the right answer for a BUILD
|
|
207
|
+
task whatever the task says. A `domain` skill has to share vocabulary with the
|
|
208
|
+
task: nobody needs the database skill because they happen to be in BUILD. So a
|
|
209
|
+
task called *"serialise plan writes so two workers can't race on the lock"*
|
|
210
|
+
gets `concurrency-async`, and a bare BUILD task gets `tdd`.
|
|
211
|
+
|
|
212
|
+
When nothing matches, the brief has no skills section. An empty section is
|
|
213
|
+
honest; a padded one teaches the model to skip it.
|
|
214
|
+
|
|
189
215
|
## Model routing (optional)
|
|
190
216
|
|
|
191
217
|
Send cheap tasks to a small model and hard ones to a large one. Pick them with `/infinity:config` →
|
|
@@ -229,6 +255,7 @@ infinity-harness/
|
|
|
229
255
|
├── src/
|
|
230
256
|
│ ├── core/ types · paths · fsx · config · phases · gates · brief
|
|
231
257
|
│ │ · featureList (the SSOT) · lock · exec
|
|
258
|
+
│ │ · skills (match) · skillsAudit (guard)
|
|
232
259
|
│ ├── ui/ theme · widget (terminal) · dashboard (web)
|
|
233
260
|
│ ├── loop.ts the continuous-run driver and its stop conditions
|
|
234
261
|
│ ├── taskList.ts atomic plan editor
|
|
@@ -242,8 +269,8 @@ infinity-harness/
|
|
|
242
269
|
│ ├── config.json pipeline state and settings
|
|
243
270
|
│ ├── model-router.json optional routing
|
|
244
271
|
│ ├── docs/ architecture · decisions · phase and role docs
|
|
245
|
-
│ └── skills/
|
|
246
|
-
├── tests/
|
|
272
|
+
│ └── skills/ 28 craft skills the brief points at
|
|
273
|
+
├── tests/ 22 files, plain node:assert
|
|
247
274
|
└── scripts/run-tests.mjs
|
|
248
275
|
```
|
|
249
276
|
|
|
@@ -255,7 +282,7 @@ there is one implementation, and the adapter calls it.
|
|
|
255
282
|
```bash
|
|
256
283
|
npm install
|
|
257
284
|
npm run check # tsc --noEmit
|
|
258
|
-
npm test #
|
|
285
|
+
npm test # 22 test files
|
|
259
286
|
npm run e2e # end-to-end against a live model
|
|
260
287
|
```
|
|
261
288
|
|
|
@@ -153,7 +153,7 @@ Every stop carries a reason. A human coming back finds an explanation, not a mys
|
|
|
153
153
|
## Verification
|
|
154
154
|
|
|
155
155
|
- `npm test` — 20 unit files, plain `node:assert`, no framework.
|
|
156
|
-
- `npm run e2e` —
|
|
156
|
+
- `npm run e2e` — 12 scenarios over real temp projects, real git repos, real child processes: the
|
|
157
157
|
full pipeline walkthrough, loop convergence, every stop condition, SIGKILL-and-restart, a 6-way
|
|
158
158
|
concurrent write fan-out with an unlocked control, data round-trip, the dashboard, widget
|
|
159
159
|
rendering across shapes, adversarial input, and the extension adapter itself.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Kept in docs/, not in harness/skills/.
|
|
3
|
+
|
|
4
|
+
pi loads every .md in a declared skills directory as a skill and requires
|
|
5
|
+
`name` and `description` frontmatter on each. A README has neither, so leaving
|
|
6
|
+
it beside the skills made pi print a skill conflict on every start.
|
|
7
|
+
`tests/skills.test.ts` now fails if anything in harness/skills/ would do that.
|
|
8
|
+
-->
|
|
9
|
+
|
|
10
|
+
# Craft Skills
|
|
11
|
+
|
|
12
|
+
How to do the work WELL — the engineering discipline behind each pipeline
|
|
13
|
+
phase. The phase docs (`harness/docs/phases/`) say *what* to produce; these
|
|
14
|
+
skills say *how* an expert produces it.
|
|
15
|
+
|
|
16
|
+
They ship with the package, so pi loads them wherever it is installed: the
|
|
17
|
+
model can invoke any of them by name, and `/skill:<name>` lists them.
|
|
18
|
+
|
|
19
|
+
**The brief names the ones that match the work in hand.** Each skill declares
|
|
20
|
+
what it is for, so the brief can route:
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
kind: domain # process | domain | meta
|
|
24
|
+
phases: [plan, build, verify] # leading phase counts most
|
|
25
|
+
tags: [concurrency, race, lock, mutex, deadlock] # vocabulary a task would use
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- **`process`** — how to work in a phase. Belonging to the phase is enough;
|
|
29
|
+
TDD is the right answer for a BUILD task whatever the task says.
|
|
30
|
+
- **`domain`** — a subject area. Surfaces only when the task shares its
|
|
31
|
+
vocabulary. Nobody needs the database skill for being in BUILD.
|
|
32
|
+
- **`meta`** — growing the toolkit. Vocabulary only, never a phase.
|
|
33
|
+
|
|
34
|
+
Read the one the brief names before you start. Each is short, and it changes
|
|
35
|
+
what you do.
|
|
36
|
+
|
|
37
|
+
## Process skills
|
|
38
|
+
|
|
39
|
+
| Skill | Leads | One-liner |
|
|
40
|
+
|-------|-------|-----------|
|
|
41
|
+
| `grilling.md` | DEFINE | Stress-test the spec with relentless questions |
|
|
42
|
+
| `domain-modeling.md` | DEFINE | Pin down domain terms before writing code |
|
|
43
|
+
| `research.md` | DEFINE | Answer questions from primary sources only |
|
|
44
|
+
| `planning-tasks.md` | PLAN | Break specs into tracer-bullet vertical slices |
|
|
45
|
+
| `codebase-design.md` | PLAN | Design deep modules behind small interfaces |
|
|
46
|
+
| `prototype.md` | PLAN | Throwaway code that answers a design question |
|
|
47
|
+
| `tdd.md` | BUILD | Red → green loop; tests worth keeping |
|
|
48
|
+
| `self-review.md` | BUILD | The pass that runs before every validate |
|
|
49
|
+
| `diagnosing-bugs.md` | VERIFY | Build a feedback loop before hypothesising |
|
|
50
|
+
| `code-review.md` | REVIEW | Two-axis review: standards + spec |
|
|
51
|
+
| `resolving-merge-conflicts.md` | any | Resolve conflicts by original intent |
|
|
52
|
+
| `context-hygiene.md` | any | Externalise discoveries the moment they happen |
|
|
53
|
+
| `scope-discipline.md` | any | The contract is the boundary; park everything else |
|
|
54
|
+
| `stuck-protocol.md` | any | Stop thrashing, escalate cleanly |
|
|
55
|
+
|
|
56
|
+
## Domain skills
|
|
57
|
+
|
|
58
|
+
Matched by vocabulary, not by phase:
|
|
59
|
+
|
|
60
|
+
`databases` · `http-apis` · `auth-security` · `frontend-ui` ·
|
|
61
|
+
`testing-infra` · `concurrency-async` · `performance` ·
|
|
62
|
+
`error-handling-logging` · `config-and-secrets` · `cli-design` ·
|
|
63
|
+
`pi-todo-adapted`
|
|
64
|
+
|
|
65
|
+
## Meta skills
|
|
66
|
+
|
|
67
|
+
| Skill | Purpose |
|
|
68
|
+
|-------|---------|
|
|
69
|
+
| `capability-acquisition.md` | HAVE → ACQUIRE → CREATE → KEEP |
|
|
70
|
+
| `writing-skills.md` | How to author a skill worth keeping |
|
|
71
|
+
| `building-tools.md` | Standards for a project script anyone can run |
|
|
72
|
+
|
|
73
|
+
Growing the library is part of the job. A skill you write into
|
|
74
|
+
`.pi/skills/<name>.md` is loaded by pi on the next start — there is nothing to
|
|
75
|
+
register — and committing it means the next session starts one rung higher.
|
|
76
|
+
|
|
77
|
+
## Adding one here
|
|
78
|
+
|
|
79
|
+
Frontmatter is a strict subset: `key: value`, `key: [a, b]`, `key: { k: v }`.
|
|
80
|
+
No block scalars, no multi-line values. `name` must match the filename, be
|
|
81
|
+
lowercase `a-z0-9-`, and `description`, `kind` and `phases` must all be
|
|
82
|
+
present and valid — `npm test` enforces every one of those, because pi only
|
|
83
|
+
warns and it warns on every single start.
|
|
84
|
+
|
|
85
|
+
## Attribution
|
|
86
|
+
|
|
87
|
+
Skills marked "Adapted from mattpocock/skills" derive from
|
|
88
|
+
[Matt Pocock's skills repository](https://github.com/mattpocock/skills)
|
|
89
|
+
(MIT License, © 2026 Matt Pocock), adapted for the infinity-harness pipeline.
|
|
@@ -4,6 +4,7 @@ description: Authentication, authorization, secrets, and the injection/XSS/CSRF
|
|
|
4
4
|
tags: [auth, authentication, authorization, security, login, password, token, jwt, session, oauth, secret, csrf, xss, injection, permission]
|
|
5
5
|
when: task touches login, sessions, tokens, permissions, user input, or secrets
|
|
6
6
|
phases: [plan, build, verify]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -1,60 +1,56 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: building-tools
|
|
3
|
-
description: Project
|
|
4
|
-
tags: [meta, tool, script, cli, automation, executable]
|
|
5
|
-
when: a repeatable action deserves a
|
|
3
|
+
description: Project script standards — idempotent, self-documenting, non-interactive executables
|
|
4
|
+
tags: [meta, tool, script, cli, automation, executable, makefile]
|
|
5
|
+
when: a repeatable action deserves a script instead of the same shell dance twice
|
|
6
6
|
phases: []
|
|
7
|
+
kind: meta
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
# Building Tools
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
Build one when you catch yourself doing the same multi-step shell dance
|
|
14
|
+
twice. The bar is not "it worked once on my machine" — an unattended agent
|
|
15
|
+
will run this at 3am with no one watching.
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
There is nothing to register. A script in the repo, named in `AGENTS.md` or
|
|
18
|
+
`package.json`, is discoverable by the next session; a script nobody can
|
|
19
|
+
find is a script nobody runs.
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
`harness/tools/<name>.sh` (any language works — .mjs, .py; the stub is
|
|
20
|
-
bash).
|
|
21
|
-
2. Implement to the standards below.
|
|
22
|
-
3. Register:
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
infinity-harness capability add tool harness/tools/<name>.sh \
|
|
26
|
-
--run "bash harness/tools/<name>.sh" \
|
|
27
|
-
--tags db,fixtures --description "Reset local db to fixtures"
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Standards (the registration bar)
|
|
21
|
+
## Standards
|
|
31
22
|
|
|
32
23
|
- **Idempotent** — running it twice is safe and converges to the same state.
|
|
33
|
-
- **`--help` works** — prints usage
|
|
34
|
-
|
|
35
|
-
- **`--json` where output is consumed** — machine-readable when
|
|
36
|
-
|
|
37
|
-
- **Exit codes
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
24
|
+
- **`--help` works** — prints usage and purpose, exits 0. This is the first
|
|
25
|
+
thing anyone runs, human or model.
|
|
26
|
+
- **`--json` where output is consumed** — machine-readable when something
|
|
27
|
+
downstream reads the result. Humans get the summary line.
|
|
28
|
+
- **Exit codes** — `0` success · `1` the operation failed · `2` you were
|
|
29
|
+
called wrong. An agent branches on these; get them right.
|
|
30
|
+
- **Never interactive** — no prompts, no confirmations, no "are you sure".
|
|
31
|
+
Flags only.
|
|
32
|
+
- **Fail loud and specific** — errors name the thing that is wrong and the
|
|
33
|
+
likely fix, on stderr. "Error: 1" costs someone an hour.
|
|
34
|
+
- **Self-contained** — resolve paths from the project root, not the
|
|
35
|
+
caller's cwd. Check prerequisites at startup and fail with the install
|
|
36
|
+
command.
|
|
44
37
|
|
|
45
38
|
## Anti-patterns
|
|
46
39
|
|
|
47
|
-
- **The snowflake** —
|
|
48
|
-
|
|
40
|
+
- **The snowflake** — hardcoded paths, undeclared dependencies, works only
|
|
41
|
+
where it was written. Fix: check prerequisites first, fail with
|
|
49
42
|
instructions.
|
|
50
43
|
- **The chatterbox** — pages of output hiding the result. Fix: one summary
|
|
51
44
|
line by default, `--verbose` for the rest.
|
|
52
|
-
- **The mutation surprise** — destructive with no dry
|
|
53
|
-
destructive gets `--dry-run
|
|
45
|
+
- **The mutation surprise** — destructive with no dry run. Fix: anything
|
|
46
|
+
destructive gets `--dry-run`, and says what it would do.
|
|
47
|
+
- **The second source of truth** — a script that keeps its own copy of state
|
|
48
|
+
the project already stores. Fix: read the real file.
|
|
54
49
|
|
|
55
50
|
## Checklist
|
|
56
51
|
|
|
57
|
-
- [ ]
|
|
58
|
-
- [ ] `--help`
|
|
59
|
-
- [ ]
|
|
60
|
-
- [ ]
|
|
52
|
+
- [ ] Ran it twice; the second run was a no-op
|
|
53
|
+
- [ ] `--help` exits 0 and explains the purpose
|
|
54
|
+
- [ ] Exit codes are 0 / 1 / 2 and mean what they should
|
|
55
|
+
- [ ] No prompt, no confirmation, no TTY assumption
|
|
56
|
+
- [ ] Named somewhere a cold reader will find it
|
|
@@ -4,6 +4,7 @@ description: The capability ladder — HAVE, ACQUIRE, CREATE, KEEP — for skill
|
|
|
4
4
|
tags: [meta, capability, acquire, search, skill, mcp, tool, ladder, library]
|
|
5
5
|
when: a task needs knowledge, system access, or an executable the project lacks
|
|
6
6
|
phases: []
|
|
7
|
+
kind: meta
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Command-line tool design — argument conventions, output contracts
|
|
|
4
4
|
tags: [cli, command, terminal, flags, arguments, stdout, stdin, shell, script, tool]
|
|
5
5
|
when: task builds or extends a command-line interface
|
|
6
6
|
phases: [plan, build]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Two-axis review (spec fidelity + standards/smells) with the Fowler
|
|
|
4
4
|
tags: [review, quality, smell, refactor, standards, spec, diff, audit]
|
|
5
5
|
when: reviewing a diff, a branch, or the whole delivery before shipping
|
|
6
6
|
phases: [review, simplify]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Deep modules — small interfaces hiding lots of behavior, seams, t
|
|
|
4
4
|
tags: [design, architecture, module, interface, seam, refactor, coupling, abstraction, api]
|
|
5
5
|
when: designing module boundaries, planning features, refactoring for clarity
|
|
6
6
|
phases: [plan, simplify]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Concurrency and async correctness — races, idempotency, queues, c
|
|
|
4
4
|
tags: [concurrency, async, race, parallel, queue, lock, mutex, retry, idempotent, worker, thread, promise, deadlock, atomic]
|
|
5
5
|
when: task involves parallel work, background jobs, shared state, or retried operations
|
|
6
6
|
phases: [plan, build, verify]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Configuration discipline — env-driven config, validation at boot,
|
|
|
4
4
|
tags: [config, configuration, environment, env, secret, settings, deploy, dotenv, variable]
|
|
5
5
|
when: task adds configuration, environment handling, or deployment settings
|
|
6
6
|
phases: [build, ship]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Externalize state before it decays — write discoveries down, re-r
|
|
|
4
4
|
tags: [meta, context, memory, handoff, session, notes, playbook]
|
|
5
5
|
when: any long session, and always before ending one
|
|
6
6
|
phases: []
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: built-in, notes: frontier-playbook }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Relational database craft — schema design, migrations, transactio
|
|
|
4
4
|
tags: [database, db, sql, postgres, postgresql, mysql, sqlite, schema, migration, transaction, index, query, orm, persistence, storage]
|
|
5
5
|
when: task touches persistent data, schemas, queries, or migrations
|
|
6
6
|
phases: [plan, build, verify]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Feedback-loop-first debugging discipline for hard bugs and regressi
|
|
|
4
4
|
tags: [debug, debugging, bug, error, failure, crash, flaky, slow, performance, regression, bisect]
|
|
5
5
|
when: something is broken, throwing, failing intermittently, or slow
|
|
6
6
|
phases: [verify, build]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Pin down domain terminology — glossary discipline and decision re
|
|
|
4
4
|
tags: [domain, glossary, terminology, naming, model, ubiquitous, language, adr, decision]
|
|
5
5
|
when: defining specs, resolving fuzzy or conflicting terms, recording decisions
|
|
6
6
|
phases: [define, plan]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Error taxonomy, fail-loud handling, structured logging that debugs
|
|
|
4
4
|
tags: [error, exception, logging, log, observability, retry, crash, handling, monitoring, trace]
|
|
5
5
|
when: task defines error paths, adds logging, or hardens failure behavior
|
|
6
6
|
phases: [build, verify]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Frontend craft — state discipline, componentization, accessibilit
|
|
|
4
4
|
tags: [frontend, ui, component, react, vue, svelte, state, form, accessibility, a11y, css, browser, render]
|
|
5
5
|
when: task builds or changes user interface
|
|
6
6
|
phases: [plan, build]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Stress-test a spec or plan with relentless one-at-a-time questions
|
|
|
4
4
|
tags: [grill, spec, requirements, questions, stress, interview, scope, clarify]
|
|
5
5
|
when: before proposing the sprint contract, or when a plan feels underspecified
|
|
6
6
|
phases: [define]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: HTTP/REST API design — resources, status codes, errors, versionin
|
|
|
4
4
|
tags: [api, http, rest, endpoint, route, json, status, error, versioning, pagination, webhook, request, response]
|
|
5
5
|
when: task designs or implements HTTP endpoints or consumes external APIs
|
|
6
6
|
phases: [plan, build]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Performance work — measure first, fix the biggest cost, cache wit
|
|
|
4
4
|
tags: [performance, slow, latency, profiling, optimize, cache, memory, benchmark, throughput, speed]
|
|
5
5
|
when: something is slow, memory-hungry, or a task sets performance targets
|
|
6
6
|
phases: [verify, build]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: "Atomic infinity_plan pattern with omission deletion, baseRevision
|
|
|
4
4
|
tags: [harness, pi-todo, atomic, baseRevision, omission, deletion, compaction, widget, task-list, dependency]
|
|
5
5
|
when: "implementing infinity_plan, atomic revisioning, Pi widget with session persistence or task dependencies"
|
|
6
6
|
phases: [build, verify]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: "https://github.com/99percentpeople/pi-extensions", license: MIT, adapted: true, url: "https://github.com/99percentpeople/pi-extensions", contentHash: abf626df6a74a6fb }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Break specs into tracer-bullet vertical slices with checkable accep
|
|
|
4
4
|
tags: [plan, planning, slice, ticket, decompose, criteria, backlog, breakdown, refactor]
|
|
5
5
|
when: writing or restructuring the feature list from a spec
|
|
6
6
|
phases: [plan]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -3,7 +3,8 @@ name: prototype
|
|
|
3
3
|
description: Throwaway code that answers a design question fast, then gets deleted
|
|
4
4
|
tags: [prototype, spike, experiment, explore, poc, throwaway, design]
|
|
5
5
|
when: a state model, logic shape, or UI direction cannot be judged on paper
|
|
6
|
-
phases: [
|
|
6
|
+
phases: [plan, build]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Answer factual questions from primary sources; capture cited findin
|
|
|
4
4
|
tags: [research, docs, documentation, investigate, source, facts, api, spec, evidence]
|
|
5
5
|
when: a factual question about an API, library, protocol, or tool blocks progress
|
|
6
6
|
phases: [define, plan, build]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Resolve git merge/rebase conflicts by original intent, verify, and
|
|
|
4
4
|
tags: [git, merge, rebase, conflict, branch, hunk]
|
|
5
5
|
when: an in-progress git merge or rebase has conflicting hunks
|
|
6
6
|
phases: []
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: The contract is the boundary — park ideas, resist drive-by fixes,
|
|
|
4
4
|
tags: [meta, scope, creep, contract, focus, discipline, playbook]
|
|
5
5
|
when: mid-task ideas, adjacent problems, or "while I'm here" temptations appear
|
|
6
6
|
phases: []
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: built-in, notes: frontier-playbook }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Structured pass before claiming done — criteria re-check, real ru
|
|
|
4
4
|
tags: [meta, review, verify, done, quality, check, playbook]
|
|
5
5
|
when: before running validate on any task — every time
|
|
6
6
|
phases: [build, verify, simplify]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: built-in, notes: frontier-playbook }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: What to do after repeated failures — stop, write down, reframe on
|
|
|
4
4
|
tags: [meta, stuck, retry, failure, escalate, blocked, playbook]
|
|
5
5
|
when: the same step has failed 2-3 times, or you notice you are looping
|
|
6
6
|
phases: []
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: built-in, notes: frontier-playbook }
|
|
8
9
|
---
|
|
9
10
|
|
package/harness/skills/tdd.md
CHANGED
|
@@ -4,6 +4,7 @@ description: Red → green test-driven loop — what a good test is, seams, anti
|
|
|
4
4
|
tags: [tdd, test, testing, unit, integration, red-green, seam, mock, coverage]
|
|
5
5
|
when: implementing any BUILD task, or fixing a bug that needs a regression test
|
|
6
6
|
phases: [build, verify]
|
|
7
|
+
kind: process
|
|
7
8
|
provenance: { origin: "mattpocock/skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: Test infrastructure — fixtures, isolation, flaky-test policy, CI
|
|
|
4
4
|
tags: [test, testing, fixture, ci, flaky, coverage, mock, isolation, pipeline, suite]
|
|
5
5
|
when: task sets up test tooling, fixtures, CI, or fights slow/flaky suites
|
|
6
6
|
phases: [build, verify]
|
|
7
|
+
kind: domain
|
|
7
8
|
provenance: { origin: built-in }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -4,6 +4,7 @@ description: How to author a skill worth keeping — scope, structure, frontmatt
|
|
|
4
4
|
tags: [meta, skill, writing, author, documentation, checklist]
|
|
5
5
|
when: creating a new skill or adapting an acquired one
|
|
6
6
|
phases: []
|
|
7
|
+
kind: meta
|
|
7
8
|
provenance: { origin: "mattpocock/skills writing-great-skills", license: MIT, adapted: true }
|
|
8
9
|
---
|
|
9
10
|
|
|
@@ -54,7 +55,7 @@ Frontmatter uses a strict subset: `key: value`, `key: [a, b]`,
|
|
|
54
55
|
|
|
55
56
|
## Checklist
|
|
56
57
|
|
|
57
|
-
- [ ] Frontmatter
|
|
58
|
+
- [ ] Frontmatter is complete: `name` matching the filename, `description`, `kind`, `tags`, `when`, `phases`
|
|
58
59
|
- [ ] A cold reader knows exactly what to do and how to check they did it
|
|
59
60
|
- [ ] Every rule is checkable; every anti-pattern has a fix
|
|
60
61
|
- [ ] Attribution line present if adapted from elsewhere
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "infinity-harness",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "A pi agent extension that runs a gated build pipeline unattended \u2014 enforces phases, validates with deterministic gates, and keeps working for hours or days without losing the plan.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|