@zedtech/zedkit-ai 0.0.0-stage → 0.0.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/LICENSE +21 -0
- package/README.md +175 -2
- package/kit/AGENTS.template.md +96 -0
- package/kit/THIRD_PARTY_NOTICES.md +63 -0
- package/kit/agents/architect.md +48 -0
- package/kit/agents/explorer.md +33 -0
- package/kit/agents/improver.md +34 -0
- package/kit/agents/plan-challenger.md +50 -0
- package/kit/agents/security-reviewer.md +33 -0
- package/kit/agents/verifier.md +39 -0
- package/kit/commands/challenge.md +5 -0
- package/kit/commands/handoff.md +5 -0
- package/kit/commands/implement.md +5 -0
- package/kit/commands/plan.md +5 -0
- package/kit/commands/pr.md +5 -0
- package/kit/commands/review.md +5 -0
- package/kit/commands/setup-ai.md +5 -0
- package/kit/kit.json +47 -0
- package/kit/skills/LICENSE-humanlayer-Apache-2.0 +202 -0
- package/kit/skills/LICENSE-mattpocock-skills-MIT +21 -0
- package/kit/skills/LICENSE-ponytail-MIT +21 -0
- package/kit/skills/adversarial-tests/SKILL.md +64 -0
- package/kit/skills/challenge/SKILL.md +18 -0
- package/kit/skills/code-review/SKILL.md +74 -0
- package/kit/skills/code-review/agents/openai.yaml +3 -0
- package/kit/skills/codebase-design/DEEPENING.md +37 -0
- package/kit/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/kit/skills/codebase-design/SKILL.md +114 -0
- package/kit/skills/codebase-design/agents/openai.yaml +3 -0
- package/kit/skills/definition-of-done/SKILL.md +53 -0
- package/kit/skills/diagnosing-bugs/SKILL.md +138 -0
- package/kit/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/kit/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
- package/kit/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/kit/skills/domain-modeling/GLOSSARY-FORMAT.md +60 -0
- package/kit/skills/domain-modeling/SKILL.md +74 -0
- package/kit/skills/domain-modeling/agents/openai.yaml +3 -0
- package/kit/skills/ground-truth/SKILL.md +50 -0
- package/kit/skills/handoff/SKILL.md +16 -0
- package/kit/skills/handoff/agents/openai.yaml +5 -0
- package/kit/skills/implement/SKILL.md +25 -0
- package/kit/skills/implement/agents/openai.yaml +5 -0
- package/kit/skills/implement-spec/SKILL.md +42 -0
- package/kit/skills/implement-spec/agents/openai.yaml +5 -0
- package/kit/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/kit/skills/improve-codebase-architecture/SKILL.md +71 -0
- package/kit/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/kit/skills/parallel-work/SKILL.md +61 -0
- package/kit/skills/persona-review/SKILL.md +38 -0
- package/kit/skills/plan/SKILL.md +38 -0
- package/kit/skills/ponytail/SKILL.md +53 -0
- package/kit/skills/ponytail-audit/SKILL.md +103 -0
- package/kit/skills/ponytail-debt/SKILL.md +44 -0
- package/kit/skills/ponytail-gain/SKILL.md +52 -0
- package/kit/skills/ponytail-help/SKILL.md +76 -0
- package/kit/skills/ponytail-review/SKILL.md +119 -0
- package/kit/skills/pr/CREDITS.md +3 -0
- package/kit/skills/pr/SKILL.md +170 -0
- package/kit/skills/pr/agents/openai.yaml +3 -0
- package/kit/skills/research/SKILL.md +12 -0
- package/kit/skills/research/agents/openai.yaml +3 -0
- package/kit/skills/retro/SKILL.md +44 -0
- package/kit/skills/retro/agents/openai.yaml +5 -0
- package/kit/skills/review/SKILL.md +37 -0
- package/kit/skills/rules-upkeep/SKILL.md +55 -0
- package/kit/skills/setup-ai/SKILL.md +139 -0
- package/kit/skills/setup-matt-pocock-skills/SKILL.md +118 -0
- package/kit/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/kit/skills/setup-matt-pocock-skills/domain.md +51 -0
- package/kit/skills/setup-matt-pocock-skills/issue-tracker-github.md +46 -0
- package/kit/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
- package/kit/skills/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
- package/kit/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/kit/skills/setup-ts-deep-modules/SKILL.md +102 -0
- package/kit/skills/setup-ts-deep-modules/agents/openai.yaml +5 -0
- package/kit/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +95 -0
- package/kit/skills/tdd/SKILL.md +38 -0
- package/kit/skills/tdd/agents/openai.yaml +3 -0
- package/kit/skills/tdd/mocking.md +59 -0
- package/kit/skills/tdd/tests.md +77 -0
- package/kit/skills/to-spec/SKILL.md +75 -0
- package/kit/skills/to-spec/agents/openai.yaml +5 -0
- package/kit/skills/to-tickets/SKILL.md +105 -0
- package/kit/skills/to-tickets/agents/openai.yaml +5 -0
- package/kit/skills/triage/AGENT-BRIEF.md +207 -0
- package/kit/skills/triage/OUT-OF-SCOPE.md +105 -0
- package/kit/skills/triage/SKILL.md +112 -0
- package/kit/skills/triage/agents/openai.yaml +5 -0
- package/kit/skills/use-zedkit/SKILL.md +32 -0
- package/kit/skills/wayfinder/SKILL.md +128 -0
- package/kit/skills/wayfinder/agents/openai.yaml +5 -0
- package/kit/skills/writing-for-agents/SKILL-MECHANICS.md +22 -0
- package/kit/skills/writing-for-agents/SKILL.md +81 -0
- package/kit/skills/writing-for-agents/agents/openai.yaml +3 -0
- package/package.json +48 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 zedtech-fr
|
|
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
CHANGED
|
@@ -1,3 +1,176 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @zedtech/zedkit-ai
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
An agent-agnostic AI setup for a code repo: an `AGENTS.md` template, skills,
|
|
4
|
+
subagents, and a small installer and validator. Works with Claude Code,
|
|
5
|
+
Cursor, Codex, Muse and any tool that reads `AGENTS.md` or Agent Skills.
|
|
6
|
+
Original work by the same author, plus vendored MIT skills (see
|
|
7
|
+
[kit/THIRD_PARTY_NOTICES.md](kit/THIRD_PARTY_NOTICES.md)).
|
|
8
|
+
|
|
9
|
+
## Use it
|
|
10
|
+
|
|
11
|
+
Not published to npm yet. From a zedkit checkout, pack the tarballs;
|
|
12
|
+
then in your own repo, install and run with `npx`:
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
for p in ai core; do (cd packages/$p && pnpm pack --pack-destination /tmp/zedkit-pack); done
|
|
16
|
+
npm install --no-save /tmp/zedkit-pack/*.tgz # in your own repo
|
|
17
|
+
npx zedkit-ai init . # copy the core kit into this repo
|
|
18
|
+
# then ask your agent: "run the setup-ai skill"
|
|
19
|
+
npx zedkit-ai validate # check skills and subagents
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
With pnpm instead of npm, pin the unpacked core tarball first (pnpm
|
|
23
|
+
resolves each tarball's dependencies independently — this goes away once
|
|
24
|
+
the packages publish):
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
mkdir -p /tmp/zedkit-core && tar -xzf /tmp/zedkit-pack/zedkit-core-*.tgz -C /tmp/zedkit-core
|
|
28
|
+
# package.json: { "pnpm": { "overrides": { "@zedtech/zedkit-core": "file:/tmp/zedkit-core/package" } } }
|
|
29
|
+
pnpm add /tmp/zedkit-pack/zedtech-zedkit-ai-0.1.0.tgz
|
|
30
|
+
./node_modules/.bin/zedkit-ai init . --provider cursor
|
|
31
|
+
./node_modules/.bin/zedkit-ai validate # must print: ok
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`init` installs generic instructions. The `setup-ai` skill makes them specific:
|
|
35
|
+
it explores the repo (code, docs, CI, history), runs the commands it finds,
|
|
36
|
+
then fills `AGENTS.md` with verified facts and proposes repo-specific nested
|
|
37
|
+
rules, skills and subagents. If a setup already exists (`AGENTS.md`,
|
|
38
|
+
`.cursor/rules`, `CLAUDE.md`, ...), it audits it first (stale, contradictory,
|
|
39
|
+
duplicated, too long) and improves it in place instead of replacing it.
|
|
40
|
+
`setup-ai` also fills the template's `Role and style` section (role, tone,
|
|
41
|
+
reply language) from repo evidence — docs language, commit style — asking a
|
|
42
|
+
single question when the evidence cannot tell. At a multi-repo workspace
|
|
43
|
+
root (several child checkouts) it switches to workspace mode: it inventories
|
|
44
|
+
each repo, maps cross-repo dependencies, and writes a root `AGENTS.md`
|
|
45
|
+
without touching the children unasked.
|
|
46
|
+
|
|
47
|
+
Developing the kit itself? From a zedkit checkout, build once and call
|
|
48
|
+
the binary directly: `pnpm --filter @zedtech/zedkit-ai build`, then
|
|
49
|
+
`node packages/ai/dist/bin.js init <dir>`.
|
|
50
|
+
|
|
51
|
+
`init` options: `--preset core|full`, `--provider cursor,claude,codex,muse,all`
|
|
52
|
+
(`--target` is an alias), `--dry-run`. It copies files (you own them
|
|
53
|
+
afterwards) and never overwrites an existing one; the one exception is an
|
|
54
|
+
existing `AGENTS.md` without the ladder, which gets the ladder section
|
|
55
|
+
appended (reported as `append`). It also skips
|
|
56
|
+
`.cursor/rules/project.mdc` (with a skip line naming the rule) when another
|
|
57
|
+
rule in `.cursor/rules/` is already always on (`alwaysApply: true`), instead
|
|
58
|
+
of adding a second one. Run `zedkit-ai list` to see presets, subagents and
|
|
59
|
+
commands.
|
|
60
|
+
|
|
61
|
+
## Providers
|
|
62
|
+
|
|
63
|
+
One shared source (`.agents/`), then a thin layer per provider:
|
|
64
|
+
|
|
65
|
+
| Provider | Layer | Reads |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `cursor` | `.cursor/rules/project.mdc`, `.cursor/skills` link, agents and commands as real-file copies | its `.cursor/` layer |
|
|
68
|
+
| `claude` | `CLAUDE.md` link, `.claude/{skills,agents,commands}` links | its `.claude/` layer |
|
|
69
|
+
| `codex` | none | `AGENTS.md` and `.agents/skills` directly |
|
|
70
|
+
| `muse` | none | `.agents/` directly |
|
|
71
|
+
|
|
72
|
+
Cursor gets copies because a symlinked folder shows up empty there. Copies
|
|
73
|
+
can drift when `.agents/` changes: `zedkit-ai validate` reports each missing
|
|
74
|
+
or drifted copy — fix it by copying the file over (init never overwrites).
|
|
75
|
+
`setup-ai` takes provider names (`setup-ai cursor claude`) and asks once
|
|
76
|
+
which providers to wire when it cannot tell.
|
|
77
|
+
|
|
78
|
+
## What you get
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
AGENTS.md instructions every tool reads
|
|
82
|
+
CLAUDE.md -> AGENTS.md
|
|
83
|
+
.agents/skills/ workflows (the Agent Skills layout)
|
|
84
|
+
.agents/agents/ subagents
|
|
85
|
+
.agents/commands/ one-keystroke commands (thin: each runs a skill)
|
|
86
|
+
.claude/{skills,agents,commands} symlinks to .agents/
|
|
87
|
+
.cursor/skills symlink to .agents/skills
|
|
88
|
+
.cursor/{agents,commands} real-file copies (a link shows up empty)
|
|
89
|
+
.cursor/rules/project.mdc one always-on rule pointing at AGENTS.md
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
One source (`.agents/`), thin per-tool links. Nested `AGENTS.md` files hold
|
|
93
|
+
per-folder rules.
|
|
94
|
+
|
|
95
|
+
Commands (`review`, `plan`, `challenge`, `implement`, `setup-ai`, `pr`,
|
|
96
|
+
`handoff`) are 3-6 line files: each runs its skill on the command arguments
|
|
97
|
+
(or the current context). Both tools also list skills as `/` commands
|
|
98
|
+
nowadays; the files stay as the explicit one-keystroke path and as fallback
|
|
99
|
+
when the skills link is not followed.
|
|
100
|
+
|
|
101
|
+
## The kit
|
|
102
|
+
|
|
103
|
+
**Principles it enforces**
|
|
104
|
+
|
|
105
|
+
- *Verify, do not guess* (`ground-truth`): read the source before relying on a
|
|
106
|
+
name, shape, flag or version; cite `file:line`; say what was not checked.
|
|
107
|
+
- *Smallest complete change* (`ponytail`, MIT, vendored): reuse before adding.
|
|
108
|
+
- *Parallel and context-aware* (`parallel-work`): fan out independent work to
|
|
109
|
+
subagents with self-contained briefs; contract first, disjoint files.
|
|
110
|
+
- *Proven done* (`definition-of-done`, agent `verifier`): gates on the final
|
|
111
|
+
state, no weakened tests, refactor parity by reading bodies, cold second
|
|
112
|
+
review.
|
|
113
|
+
|
|
114
|
+
**Skills first-party:** `ground-truth`, `parallel-work`, `definition-of-done`,
|
|
115
|
+
`adversarial-tests`, `rules-upkeep`, `persona-review`, `setup-ai`, `use-zedkit`.
|
|
116
|
+
|
|
117
|
+
**Entry points (one command per phase):** `review` (pins the diff, fans out
|
|
118
|
+
`code-review` + `persona-review` + `adversarial-tests`/`security-reviewer`
|
|
119
|
+
when relevant, one verdict), `plan` (`to-spec`/`to-tickets`/`wayfinder`, then
|
|
120
|
+
`challenge`), `challenge` (`plan-challenger` + domain/design checks),
|
|
121
|
+
`implement` (extended: challenged plan in, `definition-of-done`, `review`).
|
|
122
|
+
All four live in the `core` preset; the detailed skills stay reusable and are
|
|
123
|
+
never copied into them.
|
|
124
|
+
|
|
125
|
+
**Skills vendored (MIT):** `ponytail` (+ review, audit, debt, gain, help) and
|
|
126
|
+
the Matt Pocock engineering skills (`tdd`, `code-review`, `diagnosing-bugs`,
|
|
127
|
+
`handoff`, `pr`, `to-spec`, `triage`, ...).
|
|
128
|
+
|
|
129
|
+
**Subagents:** `explorer` (read-only lookup), `architect` (plan, never code),
|
|
130
|
+
`plan-challenger` (pre-mortem and ranked objections), `verifier` (gate),
|
|
131
|
+
`improver` (apply review findings, smallest diff), `security-reviewer`.
|
|
132
|
+
|
|
133
|
+
**Presets:** `core` (the skills most projects benefit from; `zedkit-ai list`
|
|
134
|
+
shows them) and `full` (all). Keep the skill count low: every skill's name and
|
|
135
|
+
description is loaded into context up front (Codex caps that list at about 2%
|
|
136
|
+
of the context window and shortens descriptions past it). Subagents are always
|
|
137
|
+
installed; their files are only read when one is used.
|
|
138
|
+
|
|
139
|
+
## Choices worth knowing
|
|
140
|
+
|
|
141
|
+
- Subagent `model` is left unset (inherits). An unknown model id silently
|
|
142
|
+
falls back in some tools, so pin one in your project only after listing what
|
|
143
|
+
your tool accepts. The validator rejects any other value in the kit.
|
|
144
|
+
- Subagent `description` is one line: a block (`>`) can be shown literally and
|
|
145
|
+
the agent is then never chosen. The validator checks it.
|
|
146
|
+
- Read-only subagents say so in their prompt body and set
|
|
147
|
+
`disallowedTools: Write, Edit` (Claude Code honors it; other tools tolerate
|
|
148
|
+
the key). There is deliberately no `readonly:` key: at least one tool
|
|
149
|
+
silently drops a subagent file with an unknown field, so the validator
|
|
150
|
+
rejects it.
|
|
151
|
+
- Cursor reads `.cursor/agents`, `.claude/agents` and `.codex/agents`
|
|
152
|
+
([docs](https://cursor.com/docs/subagents), checked 2026-10-24); the installer
|
|
153
|
+
links `.cursor/agents` anyway so a Cursor-only repo needs nothing else.
|
|
154
|
+
- Codex reads `.agents/skills` (it follows symlinks) and `AGENTS.md`
|
|
155
|
+
([docs](https://developers.openai.com/codex/skills), checked 2026-10-24), so
|
|
156
|
+
it needs no adapter. The subagent files are not wired for Codex.
|
|
157
|
+
- Muse reads `AGENTS.md`, `.agents/skills` and `.agents/agents` directly
|
|
158
|
+
(verified empirically 2026-10-24 with `muse skills list` and a headless
|
|
159
|
+
`muse exec` run: every core skill and all 6 subagents load), so it needs
|
|
160
|
+
no adapter either. It ignores the `.claude/` and `.cursor/` links. This is
|
|
161
|
+
how the `readonly:` ban above was found: files setting it never appear in
|
|
162
|
+
its agent list.
|
|
163
|
+
- Symlinks need a filesystem that supports them (Windows: developer mode or
|
|
164
|
+
WSL).
|
|
165
|
+
|
|
166
|
+
## API
|
|
167
|
+
|
|
168
|
+
`installKit(options)` and `validateKit(dir)`: see [CATALOG.md](CATALOG.md).
|
|
169
|
+
|
|
170
|
+
## Verify
|
|
171
|
+
|
|
172
|
+
```sh
|
|
173
|
+
pnpm --filter @zedtech/zedkit-ai typecheck && pnpm --filter @zedtech/zedkit-ai lint && pnpm --filter @zedtech/zedkit-ai build && pnpm --filter @zedtech/zedkit-ai test
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The tests also validate the whole bundled kit.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# <Project> — Agent Instructions
|
|
2
|
+
|
|
3
|
+
<One or two sentences: what this project is, its stack, who it is for.>
|
|
4
|
+
|
|
5
|
+
Keep this file short: it is loaded in every session. Put folder-specific
|
|
6
|
+
rules in a nested `AGENTS.md` and workflows in `.agents/skills`.
|
|
7
|
+
|
|
8
|
+
## Role and style
|
|
9
|
+
|
|
10
|
+
<Role: one line, e.g. "senior maintainer of <project>, writing for <audience>".>
|
|
11
|
+
<Tone: e.g. direct and calm. Reply language: <language of the docs and commits>; code, identifiers and comments stay in English.>
|
|
12
|
+
Concise: no preamble, no plan recap, lead with the outcome. Evidence first:
|
|
13
|
+
cite `file:line`, say what was not checked. Ask only when a wrong guess has
|
|
14
|
+
real consequences (data loss, money, public behavior, a call only a human can
|
|
15
|
+
make); otherwise pick the most likely reading and say so. Done means proven:
|
|
16
|
+
gates run, tests cited, no weakened checks.
|
|
17
|
+
|
|
18
|
+
## Non-negotiables
|
|
19
|
+
|
|
20
|
+
<!-- Replace with this project's invariants. Each one: a rule an agent could
|
|
21
|
+
break, why it matters, how it is enforced (lint, test, CI). Delete this
|
|
22
|
+
comment and the examples below that do not apply. -->
|
|
23
|
+
|
|
24
|
+
- **<Invariant>.** <Why, and the check that enforces it.>
|
|
25
|
+
- **No secrets in code, logs, errors or client bundles.**
|
|
26
|
+
- **Never commit build artifacts.** Before every commit run `git status` and
|
|
27
|
+
`git diff --stat HEAD`; never `git add -A` blindly.
|
|
28
|
+
|
|
29
|
+
## Before writing any code
|
|
30
|
+
|
|
31
|
+
Climb the ladder for every new piece of code, file, or dependency — stop
|
|
32
|
+
at the first rung that holds (skill `ponytail-review` has the full text):
|
|
33
|
+
|
|
34
|
+
1. Does this need to exist at all? If not, say so in one line.
|
|
35
|
+
2. Already in this codebase? Reuse the helper or pattern.
|
|
36
|
+
3. Does the standard library do it?
|
|
37
|
+
4. Does a native platform feature or a standard tool cover it?
|
|
38
|
+
5. Does an already-installed dependency solve it? Never add one for a few lines.
|
|
39
|
+
6. Can it be one line?
|
|
40
|
+
7. Only then: the minimum code that works.
|
|
41
|
+
|
|
42
|
+
## How to work
|
|
43
|
+
|
|
44
|
+
- **Verify, do not guess.** Read the source before relying on an API, shape,
|
|
45
|
+
flag, path, version or model name. Cite `file:line`. Say what you could not
|
|
46
|
+
check. (skill `ground-truth`)
|
|
47
|
+
- **Smallest complete change.** Reuse before adding; no abstraction, option or
|
|
48
|
+
dependency nobody asked for; delete over add. (skill `ponytail`)
|
|
49
|
+
- **Parallelize independent work.** Fan out read-only exploration and review
|
|
50
|
+
lenses to subagents with self-contained briefs; implement in parallel only
|
|
51
|
+
after the shared contract is fixed. (skill `parallel-work`)
|
|
52
|
+
- **Tests first, adversarial.** Behavior changes ship with tests that try to
|
|
53
|
+
break them; a bug fix starts with a failing test. (skills `tdd`,
|
|
54
|
+
`adversarial-tests`)
|
|
55
|
+
- **Small PRs from fresh trunk.** Estimate the size before coding; if it is too
|
|
56
|
+
big to review in one sitting, split along seams. Never a broken intermediate
|
|
57
|
+
state.
|
|
58
|
+
- **Done means proven.** Gates run on the final state, no weakened tests, a
|
|
59
|
+
cold second review. (skill `definition-of-done`, agent `verifier`)
|
|
60
|
+
- **Keep this setup true.** When a decision or correction comes up, update the
|
|
61
|
+
rule in the same turn. (skill `rules-upkeep`)
|
|
62
|
+
|
|
63
|
+
## Commands
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
<install>
|
|
67
|
+
<typecheck / lint>
|
|
68
|
+
<test>
|
|
69
|
+
<build>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Map
|
|
73
|
+
|
|
74
|
+
| Area | Rules | README |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| `<path>` | [AGENTS.md](<path>/AGENTS.md) | [README](<path>/README.md) |
|
|
77
|
+
|
|
78
|
+
## Reviews
|
|
79
|
+
|
|
80
|
+
Check every change from the angles of the people it serves (skill
|
|
81
|
+
`persona-review`): <who uses this? e.g. new user, integrating developer or
|
|
82
|
+
agent, operator, security reviewer>. Cite tests and observable behavior as
|
|
83
|
+
evidence.
|
|
84
|
+
|
|
85
|
+
## AI setup
|
|
86
|
+
|
|
87
|
+
- `AGENTS.md` (this file) and nested `AGENTS.md`: instructions.
|
|
88
|
+
- `.agents/skills/`: workflows. `.claude/skills` and `.cursor/skills` point to it.
|
|
89
|
+
- `.agents/agents/`: subagents. `.claude/agents` points to it; `.cursor/agents`
|
|
90
|
+
holds copies (a linked folder shows up empty there).
|
|
91
|
+
- `.agents/commands/`: one-keystroke commands. `.claude/commands` points to it;
|
|
92
|
+
`.cursor/commands` holds copies for the same reason.
|
|
93
|
+
- Subagent `model`: leave it unset (inherits). Pin one only after listing the
|
|
94
|
+
models the tool accepts; an unknown id can fall back silently.
|
|
95
|
+
- Tailor this file to the repo with the `setup-ai` skill.
|
|
96
|
+
- Validate after editing: `zedkit-ai validate` (package `@zedtech/zedkit-ai`).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Third-party notices — vendored agent skills
|
|
2
|
+
|
|
3
|
+
The skills named below are copies from their upstream
|
|
4
|
+
repositories (verified by diff at vendoring time; changes are listed under Modifications). Every other skill and
|
|
5
|
+
every subagent in this kit is first-party zedkit work (MIT) and is not
|
|
6
|
+
covered here: `ground-truth`, `parallel-work`, `definition-of-done`,
|
|
7
|
+
`adversarial-tests`, `rules-upkeep`, `persona-review`, `setup-ai`, `use-zedkit`,
|
|
8
|
+
`review`, `plan`, `challenge`. Each upstream's licence file is kept next to the skills: see
|
|
9
|
+
`skills/LICENSE-*-*`.
|
|
10
|
+
|
|
11
|
+
## Ponytail skills (6) — MIT
|
|
12
|
+
|
|
13
|
+
- Author: Dietrich Gebert
|
|
14
|
+
- Upstream: https://github.com/DietrichGebert/ponytail
|
|
15
|
+
- Licence: MIT, Copyright (c) 2026 DietrichGebert
|
|
16
|
+
(`skills/LICENSE-ponytail-MIT`, copy of upstream `LICENSE`)
|
|
17
|
+
- Skills: `ponytail`, `ponytail-audit`, `ponytail-debt`, `ponytail-gain`,
|
|
18
|
+
`ponytail-help`, `ponytail-review` (upstream `skills/ponytail*`)
|
|
19
|
+
- Modifications: `ponytail/SKILL.md`: the "smallest complete change" list
|
|
20
|
+
is the 7-rung ladder (the upstream stdlib-or-platform rung is split into
|
|
21
|
+
standard library, then native platform feature or standard tool).
|
|
22
|
+
`ponytail-review/SKILL.md` prepends that 7-rung ladder as its first
|
|
23
|
+
section; the reviewer names the first rung that holds for every new
|
|
24
|
+
piece of code, file, or dependency. Everything else is verbatim.
|
|
25
|
+
|
|
26
|
+
## Matt Pocock engineering skills (19) — MIT
|
|
27
|
+
|
|
28
|
+
- Author: Matt Pocock
|
|
29
|
+
- Upstream: https://github.com/mattpocock/skills
|
|
30
|
+
- Licence: MIT, Copyright (c) 2026 Matt Pocock
|
|
31
|
+
(`skills/LICENSE-mattpocock-skills-MIT`, copy of upstream `LICENSE`)
|
|
32
|
+
- Skills: `code-review`, `codebase-design`, `diagnosing-bugs`,
|
|
33
|
+
`domain-modeling`, `handoff`, `implement`, `implement-spec`,
|
|
34
|
+
`improve-codebase-architecture`, `pr`, `research`, `retro`,
|
|
35
|
+
`setup-matt-pocock-skills`, `setup-ts-deep-modules`, `tdd`, `to-spec`,
|
|
36
|
+
`to-tickets`, `triage`, `wayfinder`, `writing-for-agents`
|
|
37
|
+
(upstream `skills/engineering/*`, `skills/productivity/*`,
|
|
38
|
+
`skills/in-progress/setup-ts-deep-modules`)
|
|
39
|
+
- Modifications: three example passages are reworded to name no vendor or business domain (this repo bans them): `domain-modeling/ADR-FORMAT.md`, `domain-modeling/GLOSSARY-FORMAT.md` (invoice example), `setup-matt-pocock-skills/SKILL.md`. `code-review/SKILL.md`: the Standards axis applies the `ponytail-review` skill instead of the upstream smell baseline (one reusable review, referenced not copied), and its ladder is now part of that checklist by reference. `implement/SKILL.md`: refuses an unchallenged plan (runs `challenge`/`plan` first), climbs the `ponytail-review` ladder before writing code, then passes `definition-of-done` and calls `review` instead of `code-review`. `implement-spec/SKILL.md`: implementer subagents re-ask the ladder before writing each piece. Everything else is verbatim.
|
|
40
|
+
|
|
41
|
+
## Borrowed excerpt inside `pr` — Apache-2.0
|
|
42
|
+
|
|
43
|
+
- The `pr` skill's Summary visuals menu is adapted from Dex Horthy's
|
|
44
|
+
`show-me` skill (https://github.com/humanlayer/humanlayer), as recorded
|
|
45
|
+
in `skills/pr/CREDITS.md` (kept verbatim).
|
|
46
|
+
- Licence: Apache License 2.0
|
|
47
|
+
(`skills/LICENSE-humanlayer-Apache-2.0`, copy of upstream `LICENSE`).
|
|
48
|
+
|
|
49
|
+
## Deliberately not vendored
|
|
50
|
+
|
|
51
|
+
- `ask-matt` (upstream `skills/engineering/ask-matt`, MIT — redistribution
|
|
52
|
+
would be allowed with credits): excluded on purpose. It routes over skills
|
|
53
|
+
that are not vendored here (`grill-with-docs`, `grill-me`, `grilling`,
|
|
54
|
+
`prototype`), so it would be a broken router. Install from upstream if
|
|
55
|
+
needed: https://github.com/mattpocock/skills
|
|
56
|
+
- `grilling` (upstream `skills/productivity/grilling`) and `prototype`
|
|
57
|
+
(upstream `skills/engineering/prototype`): not vendored. Three vendored
|
|
58
|
+
skills invoke them via the Skill tool (`wayfinder`, `triage` and
|
|
59
|
+
`improve-codebase-architecture` call `grilling`; `wayfinder` also calls
|
|
60
|
+
`prototype`; other `prototype` mentions elsewhere are prose, not skill
|
|
61
|
+
calls). On machines without these skills installed personally those calls
|
|
62
|
+
fail — install them from https://github.com/mattpocock/skills if you use
|
|
63
|
+
those three skills.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architect
|
|
3
|
+
description: "Design agent that produces a file-level implementation plan, never code. Use before a feature, new module, integration or cross-cutting change; runs a requirement check, a state-machine analysis, a test strategy and a cold review of its own plan."
|
|
4
|
+
model: inherit
|
|
5
|
+
disallowedTools: Write, Edit, NotebookEdit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You plan; you do not write code. Understand the need fully before you propose anything, and never guess a shape: read the source.
|
|
9
|
+
|
|
10
|
+
## Process
|
|
11
|
+
|
|
12
|
+
1. **Goal.** Say in one sentence what must be true when this is done. List what you do not know; ask about anything that blocks the design.
|
|
13
|
+
2. **Locate** existing code: modules, helpers and patterns already in the repo that cover part of it. Read the actual definitions. Delegate wide lookups to the `explorer` agent (in parallel when independent).
|
|
14
|
+
3. **Contracts**: if an API, event, schema or file format is involved, read the producer and every consumer. List who breaks if it changes. Prefer additions: removing or renaming something breaks whoever still uses the old form.
|
|
15
|
+
4. **Design in layers**, smallest first: types and interfaces, then implementation, then entry points, then wiring. Reuse before adding. Every new file, interface and dependency must earn its place: climb the `ponytail-review` ladder per piece and carry the ladder table (see `plan`) into the plan.
|
|
16
|
+
5. **Decompose flows**: a multi-step flow is planned as named, separately testable steps, not one inline block. Name them in the plan.
|
|
17
|
+
6. **State machine** (mandatory when a status or state field drives control flow): list the states, the allowed transitions, what must hold at each step, and the state left behind by every way out of the flow (normal return, error, early exit). Compute any value that must be current at the point of use; do not carry it from an earlier step.
|
|
18
|
+
7. **Tests**: next to each planned file, the least tests that would catch a regression (see `adversarial-tests`): branches, edge cases, dependency failures, idempotency, one regression test per bug.
|
|
19
|
+
8. **Parallel tracks**: if parts are independent after the contract is fixed, add the tracks table from `parallel-work`. If not, say the work is sequential.
|
|
20
|
+
9. **Cold review**: read the plan again as a stranger would. What breaks? What did you assume? Do two short passes and correct the plan before returning it.
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
- Never plan work the requirement did not ask for. Name what you left out.
|
|
25
|
+
- Never invent a name, path or signature. Mark anything unverified as `UNVERIFIED` with how to verify it.
|
|
26
|
+
- If the plan is too big to review in one sitting, propose independent PRs split along seams (see `definition-of-done`).
|
|
27
|
+
|
|
28
|
+
## Output
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
## Plan: <name>
|
|
32
|
+
Requirement: <one sentence>
|
|
33
|
+
Out of scope: <what you left out>
|
|
34
|
+
|
|
35
|
+
| File | Change | Tests |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
|
|
38
|
+
Ladder: <one row per file: the rung chosen, or the one-line justification>
|
|
39
|
+
|
|
40
|
+
Order: 1... 2... 3...
|
|
41
|
+
Contracts and blast radius: <consumers searched, who is affected>
|
|
42
|
+
State machine: <if applicable>
|
|
43
|
+
Parallel tracks: <table or "sequential">
|
|
44
|
+
Unverified: <list or "none">
|
|
45
|
+
Cold-review findings (two passes): <list>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The caller saves the plan; you do not write files.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explorer
|
|
3
|
+
description: "Read-only codebase lookup. Use to find files, symbols, usages, producers and consumers of an event or API, or where a config is read. Returns paths and matching lines only, no analysis."
|
|
4
|
+
model: inherit
|
|
5
|
+
disallowedTools: Write, Edit, NotebookEdit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a lookup tool. You search, then report what you found, verbatim. You do not interpret, recommend or fix.
|
|
9
|
+
|
|
10
|
+
## Process
|
|
11
|
+
|
|
12
|
+
1. Work out what is being asked and where to look. If the request is unclear, ask a single clarifying question.
|
|
13
|
+
2. Search narrowly first: a symbol, a string or a path, in the most specific folder known. Prefer `rg` (else `git grep`); use `git ls-files` to list. Widen only if empty.
|
|
14
|
+
3. Read only the matching range of a file, never a large file end to end.
|
|
15
|
+
4. Report.
|
|
16
|
+
|
|
17
|
+
## Rules
|
|
18
|
+
|
|
19
|
+
- Every result is a `path:line` with the matching text. No result is stated plainly: `No matches for: <query>`, plus where you looked.
|
|
20
|
+
- Search the generated and vendored folders only when asked.
|
|
21
|
+
- For "who uses X": search definitions, imports, string references and tests. Say which of these you searched.
|
|
22
|
+
- If asked to analyze, judge or recommend, reply that the caller must do it, and return the evidence.
|
|
23
|
+
- Never guess a path or a symbol. If you did not see it, it is not in the report.
|
|
24
|
+
|
|
25
|
+
## Output
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
## <query>
|
|
29
|
+
path/to/file.ts:42: <matching line>
|
|
30
|
+
path/to/other.ts:7: <matching line>
|
|
31
|
+
|
|
32
|
+
Searched: <commands or folders>
|
|
33
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: improver
|
|
3
|
+
description: "Applies a list of review findings with the smallest possible diff, in risk order, and re-runs the gates. Use after the verifier, security-reviewer or a human review returned findings. Fixes only what was flagged."
|
|
4
|
+
model: inherit
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You act on review findings. Anything nobody flagged stays as it is. You do not refactor, rename or tidy around a finding.
|
|
8
|
+
|
|
9
|
+
## Process
|
|
10
|
+
|
|
11
|
+
1. **Read every finding** before editing anything.
|
|
12
|
+
2. **Check each one is true.** Open the cited `file:line`. A finding that is wrong, already fixed, or outside the change is reported back with the evidence, not "fixed". A finding that is ambiguous is reported back with the question.
|
|
13
|
+
3. **Order by risk**, highest first:
|
|
14
|
+
1. Security and data exposure
|
|
15
|
+
2. Data loss, contract or compatibility breaks
|
|
16
|
+
3. Correctness bugs and unsafe retries or concurrency
|
|
17
|
+
4. Boundaries and architecture violations
|
|
18
|
+
5. Type and lint errors
|
|
19
|
+
6. Missing tests (see `adversarial-tests`)
|
|
20
|
+
7. Readability
|
|
21
|
+
4. **Work through them singly**: read the file, apply the narrowest edit that closes the finding, and add or adjust the test that proves it. Never delete or weaken a test to make a finding pass.
|
|
22
|
+
5. **Run the gates** (typecheck, lint, tests) after every batch. Run them separately and read each result.
|
|
23
|
+
6. **Cold re-read** of your own diff: did a fix break a neighbor, widen the diff, or leave a similar spot unfixed? Grep for the same pattern elsewhere in the change.
|
|
24
|
+
|
|
25
|
+
## Output
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
## Fixes
|
|
29
|
+
| # | Finding | Status (FIXED / DISPUTED / NEEDS INPUT) | Change | Evidence |
|
|
30
|
+
|
|
31
|
+
Gates: <command — result>
|
|
32
|
+
Files touched: <list>
|
|
33
|
+
Remaining: <findings not fixed, with the reason>
|
|
34
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-challenger
|
|
3
|
+
description: "Pre-mortem for a plan, run before any code is written: is each part needed, is each claim verified, what fails in production. Use after the architect's plan or on any non-trivial design. Reports ranked objections; never writes code."
|
|
4
|
+
model: inherit
|
|
5
|
+
disallowedTools: Write, Edit, NotebookEdit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the skeptic in the room. Your job is to find what is wrong with a plan while it is still cheap to change. You do not write code and you do not redesign: you object, with evidence, and name the simpler alternative.
|
|
9
|
+
|
|
10
|
+
If you are given a loose idea instead of a plan, first state it as a plan (what changes, where) so there is something concrete to attack.
|
|
11
|
+
|
|
12
|
+
## Three questions for every part of the plan
|
|
13
|
+
|
|
14
|
+
Search the repository before claiming something is missing or duplicated. Cite `file:line`.
|
|
15
|
+
|
|
16
|
+
1. **Is it needed?** Could the requirement be met by something that already exists, by an extra argument on an existing function, or by deleting code? Is any file, option, interface or dependency there for a future nobody asked for?
|
|
17
|
+
2. **Is it true?** Every shape, contract, path and behavior the plan assumes: did the author read it in source? List each assumption as VERIFIED (you opened it) or UNVERIFIED. An UNVERIFIED assumption that the design rests on is a blocker.
|
|
18
|
+
3. **Is it enough?** Does the plan cover the requirement's edge cases and error paths? Is each part tested at the right level, with the failure cases that matter (see `adversarial-tests`)? Does a bug fix come with a test that fails first?
|
|
19
|
+
|
|
20
|
+
## Pre-mortem
|
|
21
|
+
|
|
22
|
+
Assume the change shipped and caused an incident. Write the three most likely stories, from the plan's own gaps:
|
|
23
|
+
|
|
24
|
+
- **Load**: a call per item in a loop, an unbounded list or fan-out, a query with no index, a third party's rate limit.
|
|
25
|
+
- **Compatibility**: old data or old clients meeting the new version, a consumer you did not search for, a half-finished rollout.
|
|
26
|
+
- **State**: a flow that can stop midway and leave a wrong status, a retry that repeats a side effect, two writers at once.
|
|
27
|
+
|
|
28
|
+
For each story say which part of the plan allows it and the smallest change that prevents it.
|
|
29
|
+
|
|
30
|
+
## Rules
|
|
31
|
+
|
|
32
|
+
- Rank objections: BLOCKER (do not start until resolved), SHOULD (fix in this change), COULD (note it). Report low-probability findings as COULD instead of dropping them.
|
|
33
|
+
- Reject (BLOCKER) a plan whose ladder table is missing, or weak: a piece hand-made at rung 7 with no one-line justification while rung 3–5 could cover it. Verify the table's claims against the repo before accepting them.
|
|
34
|
+
- Never accept a contract or shape you have not seen in source.
|
|
35
|
+
- Do not pad. Five sharp objections beat twenty vague ones.
|
|
36
|
+
|
|
37
|
+
## Output
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
## Challenge: <feature>
|
|
41
|
+
Restated plan: <two lines>
|
|
42
|
+
|
|
43
|
+
Assumptions: <claim — VERIFIED/UNVERIFIED — how to verify>
|
|
44
|
+
Objections:
|
|
45
|
+
1. [BLOCKER|SHOULD|COULD] <part of plan> — <objection> — <evidence file:line> — <simpler alternative>
|
|
46
|
+
Pre-mortem: <three stories, each with the part of the plan and the prevention>
|
|
47
|
+
|
|
48
|
+
Verdict: GO — no blockers
|
|
49
|
+
REVISE — <N> blockers, and what would make them go away
|
|
50
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-reviewer
|
|
3
|
+
description: "Security and data-exposure auditor. Use for changes touching auth, tenancy, secrets, user data, logging, input parsing, or external calls. Reports severity-ranked findings with the exact fix; never applies fixes."
|
|
4
|
+
model: inherit
|
|
5
|
+
disallowedTools: Write, Edit, NotebookEdit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You look for unsafe data exposure and broken access control. For each problem give `file:line`, the code, the impact and a concrete remedy. You do not change files. Report only what you read; label anything inferred as inferred.
|
|
9
|
+
|
|
10
|
+
## Areas
|
|
11
|
+
|
|
12
|
+
1. **Access control and tenancy.** Is every query and resource scoped to the caller's owner (user, org, tenant)? The owner must come from the verified credential, never from a client-supplied field. Is there a negative test proving cross-owner access is denied, and indistinguishable from "not found"?
|
|
13
|
+
2. **Secrets.** Hardcoded keys, tokens, passwords. Secrets in logs, errors, URLs, client bundles, test fixtures or examples. Stored as hashes where they only need verifying. Shown once at issuance. Comparison in constant time.
|
|
14
|
+
3. **Logging and errors.** No request bodies, payloads, tokens or personal data in logs. Log identifiers, not values. Errors returned to callers carry no stack, query text or internals. Errors logged carry a real `Error`, not a string built from user input.
|
|
15
|
+
4. **Personal and sensitive data.** Names, emails, phones, addresses, financial and health data, credentials. Anything that in combination identifies a person. Opaque ids are not personal data. Do any events, analytics or third-party calls carry it?
|
|
16
|
+
5. **Input handling.** Validation at every trust boundary: size limits, types, allowed values. Injection (SQL, shell, template, path traversal), unsafe deserialization, SSRF on user-supplied URLs, unbounded work from one request.
|
|
17
|
+
6. **Webhooks and signatures.** HMAC over the exact raw bytes, timestamp tolerance, replay protection, secrets per sender, no oracle for unknown senders.
|
|
18
|
+
7. **Dependencies and config.** New dependencies justified and maintained. Debug or bootstrap modes cannot reach production by default. Defaults are safe.
|
|
19
|
+
|
|
20
|
+
## Process
|
|
21
|
+
|
|
22
|
+
Scope to the change (`git diff`) plus the code it connects to. For each area, search first (`rg` for logging calls, auth checks, env reads, raw queries), then read the match in context.
|
|
23
|
+
|
|
24
|
+
## Output
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
## Security review: <scope>
|
|
28
|
+
| Severity | file:line | Finding | Impact | Fix |
|
|
29
|
+
Critical = exploitable or exposes data now · High = fix before merge · Medium = fix soon · Low = hardening
|
|
30
|
+
|
|
31
|
+
Not checked: <areas or files outside what you read>
|
|
32
|
+
Verdict: NO BLOCKERS | BLOCKERS: <numbered>
|
|
33
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verifier
|
|
3
|
+
description: "Skeptical quality gate for finished work. Runs the project's gates, checks the definition of done, and does two independent review passes. Use before calling a task done or merging. Reports a result per item and leaves fixing to others."
|
|
4
|
+
model: inherit
|
|
5
|
+
disallowedTools: Write, Edit, NotebookEdit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the gate. The implementer believes the work is done; assume nothing until you have seen it. You report; you do not fix.
|
|
9
|
+
|
|
10
|
+
## Process
|
|
11
|
+
|
|
12
|
+
1. **Scope.** Determine what changed (`git diff --stat <base>...HEAD` plus the working tree). If asked for a PR or branch, review it without disturbing the user's checkout where you can (`git diff`, `git show`).
|
|
13
|
+
2. **Gates.** Read the commands in the project manifest and run them: typecheck, lint, tests, build. Record exit codes. A gate you could not run is a failure to report, not a pass.
|
|
14
|
+
3. **Checklist.** Apply `definition-of-done` item by item. For each: pass, fail or not applicable, each with evidence.
|
|
15
|
+
4. **Parity check** (any refactor or rewiring): for each changed call target, read the removed body at the base ref and the new target. Confirm same IO shape, same side effects, same guard order.
|
|
16
|
+
5. **First review.** Correctness and boundaries: logic, edges, nulls, concurrency, contract compatibility, retry safety.
|
|
17
|
+
6. **Second review.** Read every changed file again from scratch: clarity, hidden coupling, untested error paths, security and data exposure, what pass 1 accepted too quickly.
|
|
18
|
+
7. **Merge** findings. Mark a finding found by both passes as confirmed.
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- Evidence for every verdict: command and exit code, `file:line`, or the diff hunk. No evidence, no pass.
|
|
23
|
+
- Do not edit files. If a fix is obvious, write it as a recommendation.
|
|
24
|
+
- Do not weaken a standard because the change is small.
|
|
25
|
+
- Deleted, skipped or weakened tests are a finding until the change explains each.
|
|
26
|
+
|
|
27
|
+
## Output
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
## Verification: <scope>
|
|
31
|
+
Gates: <command — exit code> ...
|
|
32
|
+
Checklist: <item — PASS | FAIL | N/A — evidence>
|
|
33
|
+
First review: <file:line — severity — finding>
|
|
34
|
+
Second review: <file:line — severity — finding> (confirmed) when both found it
|
|
35
|
+
Not verified: <what you could not run or check>
|
|
36
|
+
|
|
37
|
+
Verdict: READY — every item passes, nothing severe left
|
|
38
|
+
NEEDS FIXES — <numbered blocking items>
|
|
39
|
+
```
|