liteagents 2.20.0 → 2.21.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/CHANGELOG.md +44 -0
- package/README.md +4 -4
- package/package.json +1 -1
- package/packages/ampcode/AGENT.md +4 -4
- package/packages/ampcode/agents/code-developer.md +2 -2
- package/packages/ampcode/agents/quality-assurance.md +1 -1
- package/packages/ampcode/commands/branch-review.md +123 -0
- package/packages/ampcode/commands/release.md +108 -79
- package/packages/ampcode/commands/remember.md +4 -4
- package/packages/ampcode/commands/security.md +34 -18
- package/packages/ampcode/commands/ship.md +29 -26
- package/packages/ampcode/commands/stash.md +12 -6
- package/packages/claude/CLAUDE.md +4 -4
- package/packages/claude/agents/code-developer.md +2 -2
- package/packages/claude/agents/quality-assurance.md +1 -1
- package/packages/claude/commands/branch-review.md +123 -0
- package/packages/claude/commands/release.md +108 -79
- package/packages/claude/commands/remember.md +4 -4
- package/packages/claude/commands/security.md +34 -18
- package/packages/claude/commands/ship.md +29 -26
- package/packages/claude/commands/stash.md +12 -6
- package/packages/droid/AGENTS.md +4 -4
- package/packages/droid/commands/branch-review.md +123 -0
- package/packages/droid/commands/release.md +108 -79
- package/packages/droid/commands/remember.md +4 -4
- package/packages/droid/commands/security.md +34 -18
- package/packages/droid/commands/ship.md +29 -26
- package/packages/droid/commands/stash.md +12 -6
- package/packages/droid/droids/code-developer.md +2 -2
- package/packages/droid/droids/quality-assurance.md +1 -1
- package/packages/opencode/AGENTS.md +4 -4
- package/packages/opencode/agent/code-developer.md +2 -2
- package/packages/opencode/agent/quality-assurance.md +1 -1
- package/packages/opencode/command/branch-review.md +123 -0
- package/packages/opencode/command/release.md +108 -79
- package/packages/opencode/command/remember.md +4 -4
- package/packages/opencode/command/security.md +34 -18
- package/packages/opencode/command/ship.md +29 -26
- package/packages/opencode/command/stash.md +12 -6
- package/packages/opencode/opencode.jsonc +6 -6
- package/packages/subagentic-manual.md +5 -5
- package/packages/ampcode/commands/diff-review.md +0 -78
- package/packages/claude/commands/diff-review.md +0 -78
- package/packages/droid/commands/diff-review.md +0 -78
- package/packages/opencode/command/diff-review.md +0 -78
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [2.21.0] - 2026-08-30
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- **`/diff-review` renamed to `/branch-review`, in all four kits.** The command's subject is
|
|
16
|
+
the branch, not a diff — it reads whole files around each hunk, skims `git log` for intent,
|
|
17
|
+
and now runs a repo- and history-scoped security audit — so the old name described neither
|
|
18
|
+
its input nor its output. No command-count change; `/code-review` (Anthropic's plugin
|
|
19
|
+
skill) is untouched.
|
|
20
|
+
- **`/branch-review` gains effort levels and a second stage.** `low | medium | high | max`
|
|
21
|
+
(default `medium`) governs the general review's breadth. Stage 2 delegates to `/security`
|
|
22
|
+
and **always runs it in full at every level** — a shallow security pass reads as coverage
|
|
23
|
+
while missing the class of bug that costs the most. Stage 3 verifies adversarially (try to
|
|
24
|
+
break each claim, not confirm it), and **every surviving finding must carry a concrete
|
|
25
|
+
failure scenario** — inputs/state → wrong output, crash, or exposure — or it is dropped.
|
|
26
|
+
- **`/branch-review` and `/security` never edit code.** Both previously applied "confirmed and
|
|
27
|
+
unambiguous" fixes directly, which contradicted the gate they are meant to be; `/security`
|
|
28
|
+
also lost `Edit` from its tool list. They report and escalate; fixing is a separate,
|
|
29
|
+
separately authorized action. `/security` behaves identically standalone or as stage 2 —
|
|
30
|
+
only the report's recipient changes.
|
|
31
|
+
- **`/release` no longer reviews, and no longer touches the remote.** Review moved out
|
|
32
|
+
entirely (anything that returns a work-list forks into fix→re-review and does not belong
|
|
33
|
+
inside a linear release run). It now gates on a **review precondition**: a review must have
|
|
34
|
+
run at the current HEAD SHA, which makes "all findings fixed" mechanically checkable, since
|
|
35
|
+
a fix commit moves HEAD and staleness forces a re-review. It releases the **current branch**
|
|
36
|
+
only — no branch argument, no branch creation, and on `main` it stops and asks. It runs
|
|
37
|
+
`/ship`, sweeps the docs, bumps the version, commits locally, then **stops and reports the
|
|
38
|
+
remaining push → PR → merge → tag → publish sequence** for a human to authorize.
|
|
39
|
+
- **`/ship` is now purely mechanical.** Every item is answerable by running a command and
|
|
40
|
+
reading an exit code. Dropped four code-judgment checks (error handling, authorization,
|
|
41
|
+
rate limiting, data-access scoping) that duplicated `/security` in weaker form, plus the
|
|
42
|
+
"run `/security` before shipping" line. The secrets grep stays, deliberately and with the
|
|
43
|
+
reason stated inline. New evidence rule: record the exact command and exit code; a check you
|
|
44
|
+
did not run is a fail, and **N/A requires a stated reason**.
|
|
45
|
+
- **Worker guardrails, in `/branch-review`, `/release`, `/stash` and `/remember`.** The
|
|
46
|
+
mid-tier model rule no longer names vendor models (they drift, and these kits ship to four
|
|
47
|
+
tools); it now says "your tool's balanced default tier" and explicitly excludes the
|
|
48
|
+
cheapest/fastest tier, which measurably degrades on judgment work. All four also carry an
|
|
49
|
+
"escalate, never assume" rule, and `/stash` gains a "write only what the brief contains"
|
|
50
|
+
rule — its subagent expands a brief, which is exactly where fabrication happens.
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
- `/stash` carried two guardrails about writing minimal code, in a command that writes one
|
|
54
|
+
markdown file.
|
|
55
|
+
|
|
12
56
|
### Planned
|
|
13
57
|
- Community marketplace submissions
|
|
14
58
|
- Additional skills for data analysis
|
package/README.md
CHANGED
|
@@ -148,10 +148,10 @@ Results land in `.claude/remember/friction/antigen_review.md` with projects, err
|
|
|
148
148
|
- **debug-method** - Four-phase debugging framework
|
|
149
149
|
- **optimize** - Performance analysis
|
|
150
150
|
- **refactor** - Safe refactoring with behavior preservation
|
|
151
|
-
- **
|
|
152
|
-
- **security** -
|
|
151
|
+
- **branch-review** - Pre-merge gate: general review at a chosen effort level plus a full security audit, adversarial verify pass; reports findings, never fixes
|
|
152
|
+
- **security** - Standalone vulnerability scan; also runs as stage 2 of `/branch-review`
|
|
153
153
|
- **ship** - Pre-deployment checklist
|
|
154
|
-
- **release** -
|
|
154
|
+
- **release** - Prepare a release on the current branch: verify → docs sweep → version bump → local commit, then hand back the merge/tag/publish sequence (never pushes)
|
|
155
155
|
- **test-generate** - Generate test suites
|
|
156
156
|
|
|
157
157
|
> **Claude-only plugin:** `live-canvas-channel` is a bundled Claude Code MCP channel plugin that ships under `~/.claude/plugins/live-canvas-marketplace/`. One-time `/plugin install` + a session started with `--dangerously-load-development-channels` unlocks live mode. Skill probes for the channel on each invocation and handholds setup when missing. See [`packages/claude/skills/live-canvas/README.md`](packages/claude/skills/live-canvas/README.md) for the full walkthrough.
|
|
@@ -184,7 +184,7 @@ Results land in `.claude/remember/friction/antigen_review.md` with projects, err
|
|
|
184
184
|
**Code Quality:**
|
|
185
185
|
```
|
|
186
186
|
@quality-assurance Review this PR before merge
|
|
187
|
-
/
|
|
187
|
+
/branch-review main medium # review branch vs main + security audit; reports, never fixes
|
|
188
188
|
/debug-method Investigate this race condition
|
|
189
189
|
```
|
|
190
190
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "liteagents",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.21.0",
|
|
4
4
|
"description": "AI development toolkit with 11 specialized agents and 18 commands including live-canvas UI design with click-to-annotate feedback. Simple one-question installer for Claude, Opencode, Ampcode, and Droid.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -43,10 +43,10 @@ These subagents are available when using Ampcode CLI.
|
|
|
43
43
|
| optimize | Analyze and optimize performance issues | /optimize <target-area> |
|
|
44
44
|
| refactor | Refactor code while maintaining behavior and tests | /refactor <code-section> |
|
|
45
45
|
| remember | Consolidate stashes + friction into project memory | /remember |
|
|
46
|
-
|
|
|
47
|
-
| security | Security
|
|
48
|
-
| ship |
|
|
49
|
-
| release |
|
|
46
|
+
| branch-review | Pre-merge review: general review + full security audit, verify pass, no fixes | /branch-review [target] [level] |
|
|
47
|
+
| security | Security audit — recurring six, injection, auth, trust boundaries; reports, never fixes | /security [target] |
|
|
48
|
+
| ship | Mechanical pre-deploy gate — tests, build, tree state | /ship |
|
|
49
|
+
| release | Verify, sweep docs, cut a version — then hand back the merge/tag/publish sequence | /release |
|
|
50
50
|
| stash | Save session context for compaction recovery or handoffs | /stash ["optional-name"] |
|
|
51
51
|
| test-generate | Generate tests, run them, verify each one actually exercises the code | /test-generate <file> |
|
|
52
52
|
|
|
@@ -75,7 +75,7 @@ digraph CodeDeveloper {
|
|
|
75
75
|
regression_fixable [label="Fixable?", shape=diamond];
|
|
76
76
|
|
|
77
77
|
// Review and complete
|
|
78
|
-
code_review [label="Run /
|
|
78
|
+
code_review [label="Run /branch-review"];
|
|
79
79
|
verification [label="Run /verify-done", fillcolor=orange];
|
|
80
80
|
|
|
81
81
|
// Story-specific
|
|
@@ -191,7 +191,7 @@ All require `*` prefix. Invocation commands in table above. Additional:
|
|
|
191
191
|
| Writing any test | `/test-traps` (avoid mocks, production pollution) |
|
|
192
192
|
| Before completion | `/verify-done` |
|
|
193
193
|
| After code changes | `/security` |
|
|
194
|
-
| Task complete / general review | `/
|
|
194
|
+
| Task complete / general review | `/branch-review` (reviews the branch + full security audit, verifies claims, reports findings — never fixes) |
|
|
195
195
|
| Performance issues | `/optimize` |
|
|
196
196
|
|
|
197
197
|
You are an autonomous implementation specialist. Execute with precision, delegate appropriately, and communicate clearly when you need guidance or encounter blockers.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: branch-review
|
|
3
|
+
description: Review a branch before merge [target] [level]
|
|
4
|
+
usage: /branch-review [target] [low|medium|high|max]
|
|
5
|
+
argument-hint: [file, branch (e.g. main), range (main..HEAD), or empty] [effort level]
|
|
6
|
+
allowed-tools: Read, Grep, Glob, Agent, Bash(git diff *), Bash(git log *), Bash(git show *), Bash(git status *), Bash(git grep *), Bash(git rev-parse *), Bash(git merge-base *), Bash(rg *)
|
|
7
|
+
---
|
|
8
|
+
Pre-merge review gate. Two stages — **general review** then a **full security
|
|
9
|
+
audit** — followed by an adversarial verify pass. It **never edits code**: it
|
|
10
|
+
reports findings and hands them back. Fixing is a separate, separately
|
|
11
|
+
authorized action.
|
|
12
|
+
|
|
13
|
+
Run this **before** `/release`. `/release` will refuse to run without a review
|
|
14
|
+
at the current HEAD SHA.
|
|
15
|
+
|
|
16
|
+
## Guardrails
|
|
17
|
+
- **Spawn a worker on a mid-tier model, not hardcoded.** The review runs in a
|
|
18
|
+
subagent on your tool's balanced default tier — judgment-capable, cheaper and
|
|
19
|
+
faster than your top reasoning tier. **Not the cheapest/fastest tier**: on
|
|
20
|
+
judgment work it measurably degrades (misclassification rates several times
|
|
21
|
+
higher). Never hardcode a vendor-specific model name. Fall back to running
|
|
22
|
+
inline if your tool has no subagent mechanism.
|
|
23
|
+
- **Escalate, never assume.** Anything you cannot decide, cannot verify, or
|
|
24
|
+
that this spec does not cover → **stop and report it to the orchestrator**
|
|
25
|
+
(the main session). Never improvise, never widen scope, never fix a side
|
|
26
|
+
issue you noticed along the way.
|
|
27
|
+
- **No edits.** You have no authorization to change code, even for a finding
|
|
28
|
+
you are certain about. Report it.
|
|
29
|
+
|
|
30
|
+
## Target — interpret `$ARGUMENTS` in this order
|
|
31
|
+
1. **Empty** → the current branch vs its merge-base with `main`
|
|
32
|
+
(`git diff $(git merge-base main HEAD)..HEAD`). If that is empty, the
|
|
33
|
+
staged diff; if that is empty too, the working tree.
|
|
34
|
+
2. **A range** like `main..HEAD` or `origin/main...HEAD` → `git diff <range>`.
|
|
35
|
+
3. **A single ref** (branch / tag / SHA — confirm with `git rev-parse
|
|
36
|
+
--verify`) → that ref's merge-base against `HEAD`.
|
|
37
|
+
4. **A file or directory path** → that target.
|
|
38
|
+
5. Otherwise → ask.
|
|
39
|
+
|
|
40
|
+
Record the **HEAD SHA** you reviewed. `/release` checks it, and any commit
|
|
41
|
+
made after the review makes the review stale.
|
|
42
|
+
|
|
43
|
+
## Effort level
|
|
44
|
+
`low | medium | high | max` — default **medium** if not given. The level
|
|
45
|
+
governs **stage 1 only**:
|
|
46
|
+
- **low / medium** — fewer findings, only ones you are confident in.
|
|
47
|
+
- **high / max** — broader coverage; uncertain findings are allowed, but each
|
|
48
|
+
must be labelled uncertain.
|
|
49
|
+
|
|
50
|
+
**Stage 2 (security) always runs full, at every level.** A shallow security
|
|
51
|
+
pass is worse than none — it reads as coverage while missing the class of bug
|
|
52
|
+
that costs the most.
|
|
53
|
+
|
|
54
|
+
## Stage 1 — General review
|
|
55
|
+
The diff is the subject, but **read the whole file around every hunk** — a
|
|
56
|
+
hunk-only read cannot see that a caller further down the same file is now
|
|
57
|
+
wrong. For multi-commit ranges, skim `git log <range>` for intent before
|
|
58
|
+
judging.
|
|
59
|
+
|
|
60
|
+
- **Bugs needing a fix.** Logic errors, off-by-one, null/undefined paths,
|
|
61
|
+
races, wrong defaults, broken edge cases.
|
|
62
|
+
- **Dead code.** Unreferenced functions / vars / imports / params, unreachable
|
|
63
|
+
branches, commented-out blocks, legacy paths the diff just obsoleted.
|
|
64
|
+
`git grep` the symbol before flagging — easy to be wrong.
|
|
65
|
+
- **Loose ends.** TODO / FIXME / XXX added by this diff, half-finished
|
|
66
|
+
branches, silently swallowed errors, stub bodies, mocked-out paths,
|
|
67
|
+
"temporary" names, abandoned feature flags.
|
|
68
|
+
- **Correctness.** Edge cases, error handling, type / contract violations,
|
|
69
|
+
broken invariants.
|
|
70
|
+
- **Performance.** N+1, blocking calls in hot paths, unbounded loops, indexes
|
|
71
|
+
the diff actually touches.
|
|
72
|
+
- **Maintainability.** Complexity, naming, duplication — only when material.
|
|
73
|
+
|
|
74
|
+
## Stage 2 — Security (always full)
|
|
75
|
+
**Delegate; do not re-implement.** Locate and **read** the installed
|
|
76
|
+
`security.md` and run its actual checklist — the recurring six (secrets in the
|
|
77
|
+
repo *and in git history*, data-access authorization / tenant isolation, rate
|
|
78
|
+
limiting, unhappy-path error handling, authorization beyond authentication,
|
|
79
|
+
inefficient data access) plus injection, auth/session, and trust boundaries.
|
|
80
|
+
|
|
81
|
+
If `security.md` cannot be found, run what you can from the list above and
|
|
82
|
+
**flag that the full checklist was unavailable** — never report it as passed.
|
|
83
|
+
|
|
84
|
+
This stage is repo- and history-scoped, not diff-scoped: a key committed forty
|
|
85
|
+
commits ago, an unbounded route the diff never touched, or a missing row
|
|
86
|
+
policy on a table the new code now reads are all in scope.
|
|
87
|
+
|
|
88
|
+
## Stage 3 — Verify (adversarial)
|
|
89
|
+
Findings are claims, not facts. **Try to break each one, not to confirm it** —
|
|
90
|
+
a pass that sets out to confirm reliably misses what an adversarial pass
|
|
91
|
+
finds.
|
|
92
|
+
|
|
93
|
+
- Re-read the cited `file:line` in full context.
|
|
94
|
+
- `git grep` the name across the repo before trusting any dead-code or
|
|
95
|
+
unused-symbol claim.
|
|
96
|
+
- Mark each **confirmed**, **false positive** (with the reason), or
|
|
97
|
+
**uncertain** (with what would settle it).
|
|
98
|
+
|
|
99
|
+
**Every surviving finding must carry a concrete failure scenario**: specific
|
|
100
|
+
inputs or state → the wrong output, crash, or exposure that results. If you
|
|
101
|
+
cannot write that sentence, the finding is not ready — drop it or mark it
|
|
102
|
+
uncertain. No vibes.
|
|
103
|
+
|
|
104
|
+
## Report — then escalate
|
|
105
|
+
Order findings most severe first.
|
|
106
|
+
|
|
107
|
+
### 🚨 Critical (blocks merge)
|
|
108
|
+
### ⚠️ Warnings (should fix)
|
|
109
|
+
### 💡 Suggestions (nice to have)
|
|
110
|
+
|
|
111
|
+
Each finding: **Location** (`file:line`) · **What's wrong** · **Failure
|
|
112
|
+
scenario** (inputs/state → result) · **Why it matters** · **Suggested fix**
|
|
113
|
+
(described, not applied) · **Verdict** (confirmed / uncertain).
|
|
114
|
+
|
|
115
|
+
Then a coverage line: stage 1 at level `<level>`, stage 2 full — each `ran ✓/✗`
|
|
116
|
+
with its evidence. A stage you did not actually run is a **✗**, never an
|
|
117
|
+
assumed pass.
|
|
118
|
+
|
|
119
|
+
End with:
|
|
120
|
+
- **Reviewed at HEAD `<sha>` on `<branch>`.**
|
|
121
|
+
- One-line verdict: **Ready to merge? Yes / No / Not until these are fixed.**
|
|
122
|
+
- **Escalate to the orchestrator** with the findings. It decides what gets
|
|
123
|
+
fixed and by whom. Say plainly what you could not verify.
|
|
@@ -1,90 +1,119 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: release
|
|
3
|
-
description:
|
|
4
|
-
usage: /release
|
|
5
|
-
|
|
6
|
-
allowed-tools: Read, Grep, Glob, Edit, Write, Bash(git *), Bash(gh *), Bash(npm *), Bash(pnpm *), Bash(yarn *), Bash(pytest *), Bash(python *), Bash(go *), Bash(cargo *), Bash(make *)
|
|
3
|
+
description: Verify, sweep docs, cut a version — then hand the release sequence back
|
|
4
|
+
usage: /release
|
|
5
|
+
allowed-tools: Read, Grep, Glob, Edit, Write, Agent, Bash(git status *), Bash(git diff *), Bash(git log *), Bash(git show *), Bash(git fetch *), Bash(git add *), Bash(git commit *), Bash(git rev-parse *), Bash(git merge-base *), Bash(npm *), Bash(pnpm *), Bash(yarn *), Bash(pytest *), Bash(python *), Bash(go *), Bash(cargo *), Bash(make *)
|
|
7
6
|
---
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
7
|
+
Release **preparation** orchestrator for the **current branch**. It runs your
|
|
8
|
+
existing pre-deploy gate, sweeps the docs, bumps the version and commits —
|
|
9
|
+
then **stops and reports**. It never pushes, opens a PR, merges, tags, or
|
|
10
|
+
publishes: those are yours to authorize by name.
|
|
11
|
+
|
|
12
|
+
It does not re-implement checks, and it does not review code. Review is a
|
|
13
|
+
separate command that must have run first.
|
|
14
|
+
|
|
15
|
+
## Guardrails
|
|
16
|
+
- **Spawn a worker on a mid-tier model, not hardcoded.** The run happens in a
|
|
17
|
+
subagent on your tool's balanced default tier — judgment-capable, cheaper and
|
|
18
|
+
faster than your top reasoning tier. **Not the cheapest/fastest tier**: on
|
|
19
|
+
judgment work it measurably degrades (misclassification rates several times
|
|
20
|
+
higher). Never hardcode a vendor-specific model name. Fall back to running
|
|
21
|
+
inline if your tool has no subagent mechanism.
|
|
22
|
+
- **Escalate, never assume.** Anything you cannot decide, cannot verify, or
|
|
23
|
+
that this spec does not cover → **stop and report it to the orchestrator**
|
|
24
|
+
(the main session). Never improvise, never widen scope, never fix a finding
|
|
25
|
+
you noticed along the way.
|
|
26
|
+
- **Nothing leaves the machine.** No `git push`, no `gh`, no `npm publish`,
|
|
27
|
+
under any circumstance — not even if every gate is green. You report the
|
|
28
|
+
sequence; a human authorizes it.
|
|
29
|
+
|
|
30
|
+
## Phase 0 — Preflight (current branch, always)
|
|
31
|
+
- **Release the branch you are on.** No branch argument, no branch creation.
|
|
32
|
+
- **On `main` → stop and ask** what should be released. `main` is only ever
|
|
33
|
+
the merge target; never release it, never commit to it.
|
|
34
|
+
- If the working tree still has uncommitted feature changes, commit them to
|
|
35
|
+
the branch now — the gate must see a real diff, not a dirty tree.
|
|
36
|
+
- `git fetch origin`; the release diff is `origin/main...HEAD`. Empty →
|
|
37
|
+
**stop**, nothing to release.
|
|
38
|
+
- Print a one-line plan: branch · commit count · files changed · HEAD SHA.
|
|
39
|
+
|
|
40
|
+
## Phase 0.5 — Review precondition (do not skip)
|
|
41
|
+
Ask the orchestrator: **has `/branch-review` or `/code-review` run on this
|
|
42
|
+
branch at the current HEAD SHA?**
|
|
43
|
+
|
|
44
|
+
- **No review** → **stop**: "No review at `<sha>`. Run `/branch-review medium`
|
|
45
|
+
(or `/code-review medium`) first."
|
|
46
|
+
- **Stale** — the review ran at an earlier SHA, i.e. commits landed after it
|
|
47
|
+
(including fix commits) → **stop** and ask for a re-review. This is what
|
|
48
|
+
makes "all findings fixed" checkable instead of promised.
|
|
49
|
+
- **Reviewed at this SHA with findings outstanding** → **stop**. Findings are
|
|
50
|
+
resolved before a release is cut.
|
|
51
|
+
|
|
52
|
+
This is the only thing guaranteeing the branch was reviewed *and* security
|
|
53
|
+
scanned, so treat a missing answer as a **stop**, never as a pass.
|
|
54
|
+
|
|
55
|
+
## Phase 1 — Verify
|
|
56
|
+
**Load the real checklist**: locate and **read** the installed `ship.md` so
|
|
57
|
+
you apply its exact checks, not an approximation. If it cannot be found, run
|
|
58
|
+
what you can from its name and **flag that the full checklist was
|
|
59
|
+
unavailable** — never pretend it passed.
|
|
60
|
+
|
|
61
|
+
- **`/ship`** — mechanical pre-deploy gate (tests, lint, build, debug
|
|
62
|
+
leftovers, secrets grep, migrations, docs/config sync, tree state).
|
|
63
|
+
|
|
64
|
+
Capture **fresh evidence**: the exact command, its exit code, and the result.
|
|
65
|
+
A check you did not actually run is a **FAIL**, never an assumed pass. Emit a
|
|
66
|
+
coverage row: `ran? ✓/✗` · evidence · verdict. A ✗ is **Blocked 🛑**.
|
|
67
|
+
|
|
68
|
+
Security is **not** re-run here — it is stage 2 of the review, already
|
|
69
|
+
confirmed in Phase 0.5.
|
|
50
70
|
|
|
51
71
|
## 🚦 Gate
|
|
52
|
-
- **Any Critical** (failing tests
|
|
53
|
-
finding) → **stop**, report, ask how to proceed. Touch no history.
|
|
72
|
+
- **Any Critical** (failing tests, broken build) → **stop**, report, escalate.
|
|
54
73
|
- **Warnings, or anything you cannot confidently decide** → **stop**,
|
|
55
|
-
summarize,
|
|
56
|
-
- **All clean** → continue
|
|
74
|
+
summarize, escalate. Do not weigh it yourself.
|
|
75
|
+
- **All clean** → continue.
|
|
76
|
+
|
|
77
|
+
## Phase 2 — Docs sweep
|
|
78
|
+
Update what this feature actually changed, wherever those docs live in this
|
|
79
|
+
project — match each file's existing format, touch nothing unrelated. Use
|
|
80
|
+
`docs/index.md` when the project has one to find what exists.
|
|
57
81
|
|
|
58
|
-
## Phase 2 — DOCS (only what the feature changed)
|
|
59
|
-
Update as needed, matching each file's existing format; touch nothing
|
|
60
|
-
unrelated. If a doc needs no change, **say so** rather than editing for its
|
|
61
|
-
own sake.
|
|
62
82
|
- **CHANGELOG.md** — new entry.
|
|
63
|
-
- **PRD** — the feature's PRD entry / status.
|
|
64
|
-
- **context / guide** — the project's context or guide doc.
|
|
65
83
|
- **README.md** — only if user-facing usage changed.
|
|
84
|
+
- **PRD** — the feature's entry / status.
|
|
85
|
+
- **Guide / context docs** — the project's standing context.
|
|
86
|
+
- **Findings / learnings** — where the project keeps them.
|
|
87
|
+
- **Any other frequently-updated doc** this change makes stale.
|
|
88
|
+
|
|
89
|
+
If a doc needs no change, **say so** rather than editing it for its own sake.
|
|
66
90
|
|
|
67
|
-
## Phase 3 —
|
|
91
|
+
## Phase 3 — Cut (local only)
|
|
68
92
|
1. **Version bump** — pick the semver level from the change (patch / minor /
|
|
69
|
-
major; ask if ambiguous) and update `package.json`.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
>
|
|
85
|
-
> `gh
|
|
86
|
-
>
|
|
87
|
-
>
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
major; **ask if ambiguous**) and update `package.json`. The bump must land
|
|
94
|
+
on the branch, before any merge — a version committed to `main` directly,
|
|
95
|
+
or added after the merge, breaks the tag/package match.
|
|
96
|
+
2. **Commit** — `release: vX.Y.Z — <summary>`, including the docs and the
|
|
97
|
+
bump.
|
|
98
|
+
|
|
99
|
+
Then **stop.** Nothing else.
|
|
100
|
+
|
|
101
|
+
## Report — the sequence, for a human to authorize
|
|
102
|
+
Print the evidence, then hand back the exact remaining steps so the
|
|
103
|
+
orchestrator can run them on the user's named go:
|
|
104
|
+
|
|
105
|
+
> **Cut ✅ vX.Y.Z on `<branch>`** — `/ship` green, docs updated, release commit
|
|
106
|
+
> made locally. Reviewed at `<sha>`.
|
|
107
|
+
> Ready when you are:
|
|
108
|
+
> 1. `git push -u origin <branch>`
|
|
109
|
+
> 2. `gh pr create` into `main`
|
|
110
|
+
> 3. `gh pr merge --admin --squash --delete-branch` (main is PR-protected;
|
|
111
|
+
> owner-authorized admin merge on a solo repo)
|
|
112
|
+
> 4. `git tag vX.Y.Z` on `main` and push the tag
|
|
113
|
+
> 5. Publish **if this project has a publish path** (e.g.
|
|
114
|
+
> `gh workflow run publish.yml`) — manual by design
|
|
115
|
+
> 6. Verify it is actually live (`npm view <pkg> version`, and the published
|
|
116
|
+
> tarball's contents), not the working tree
|
|
117
|
+
|
|
118
|
+
Final line: **Cut ✅ (vX.Y.Z — ready to push)** or **Blocked 🛑** with the
|
|
119
|
+
specific reason.
|
|
@@ -10,10 +10,10 @@ Run friction analysis, then consolidate session stashes + friction antigens into
|
|
|
10
10
|
- Favor straightforward, minimal implementations first and add complexity only when requested or clearly required.
|
|
11
11
|
- Keep changes tightly scoped to the requested outcome.
|
|
12
12
|
- **Precision over recall for hot memory.** A false antigen loaded into `@MEMORY.md` steers every future session. When unsure, do not promote — leave it to recurrence (a ledger `observing` entry at 2 sessions, nothing at 1).
|
|
13
|
-
- **Mid-tier model, not hardcoded.** Steps 2/3/4a delegate to
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
vendor-specific model name.
|
|
13
|
+
- **Mid-tier model, not hardcoded.** Steps 2/3/4a delegate to your tool's balanced default
|
|
14
|
+
tier — judgment-capable, cheaper and faster than your top reasoning tier. **Not the
|
|
15
|
+
cheapest/fastest tier**: on judgment work it measurably degrades (misclassification rates
|
|
16
|
+
several times higher). Never hardcode a vendor-specific model name.
|
|
17
17
|
- **Batch stashes, don't fan out.** Step 2 gives each extraction agent **up to 5 stashes**
|
|
18
18
|
and uses as few agents as possible (3 stashes → 1 agent, 7 → 2). One agent reading several
|
|
19
19
|
sessions sees the same lesson recur and writes it once; one agent per stash writes it once
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: security
|
|
3
|
-
description:
|
|
3
|
+
description: Security audit — recurring six, injection, auth, trust boundaries
|
|
4
4
|
usage: /security
|
|
5
5
|
argument-hint: [file, directory, or leave empty for full scan]
|
|
6
|
-
allowed-tools: Read,
|
|
6
|
+
allowed-tools: Read, Grep, Glob, Bash(git log *), Bash(git grep *), Bash(rg *)
|
|
7
7
|
---
|
|
8
|
-
Audit $ARGUMENTS for security vulnerabilities.
|
|
9
|
-
|
|
8
|
+
Audit $ARGUMENTS for security vulnerabilities. **Reports, never edits** — it
|
|
9
|
+
verifies every claim, then hands the findings to whoever asked.
|
|
10
|
+
|
|
11
|
+
**Runs identically standalone or as stage 2 of `/branch-review`.** The only
|
|
12
|
+
difference is where the report goes: to the orchestrator when called as a
|
|
13
|
+
stage, to you when you run it directly. Same checks, same verify pass, same
|
|
14
|
+
escalation. It does **not** spawn a worker of its own — run it inline; when
|
|
15
|
+
`/branch-review` calls it, it is already inside that command's worker.
|
|
16
|
+
|
|
17
|
+
Adapt scope to what the target actually is — a library, CLI, web app, and service won't all have every
|
|
10
18
|
category. Skip what genuinely doesn't apply; never invent findings to fill a
|
|
11
19
|
section.
|
|
12
20
|
|
|
@@ -58,22 +66,23 @@ End with: which of the six classes were checked and found **clean**, and any
|
|
|
58
66
|
marked **N/A** for this target — so the scan's coverage is auditable, not just
|
|
59
67
|
its hits.
|
|
60
68
|
|
|
61
|
-
## After the scan — verify, then
|
|
69
|
+
## After the scan — verify, then escalate
|
|
62
70
|
|
|
63
|
-
Findings are claims, not facts. Validate before
|
|
71
|
+
Findings are claims, not facts. Validate every one before reporting it; an
|
|
72
|
+
unverified finding wastes more time than a missed one.
|
|
64
73
|
|
|
65
|
-
**Verify each claim.** Re-read the cited `file:line` in
|
|
66
|
-
|
|
67
|
-
|
|
74
|
+
**Verify each claim — adversarially.** Re-read the cited `file:line` in full
|
|
75
|
+
context and **try to break the claim, not to confirm it**: is there a gate
|
|
76
|
+
upstream, a framework default, a caller that already validates? A pass that
|
|
77
|
+
sets out to confirm reliably misses what an adversarial pass finds. Mark each
|
|
78
|
+
**confirmed**, **false positive** (with reason), or **uncertain** (with what
|
|
79
|
+
would settle it).
|
|
68
80
|
|
|
69
|
-
**
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
breaking nearby logic. A fix isn't done until you've grounded it the same way
|
|
73
|
-
you grounded the claim.
|
|
81
|
+
**Never fix.** Not even a confirmed, one-line, obvious fix. Describe the
|
|
82
|
+
minimal remediation and hand it back — applying it is a separate, separately
|
|
83
|
+
authorized action.
|
|
74
84
|
|
|
75
|
-
**
|
|
76
|
-
here):
|
|
85
|
+
**Flag these explicitly** — they need a human decision, not a recommendation:
|
|
77
86
|
- the finding is **uncertain** after grounding (you'd need info you don't have),
|
|
78
87
|
- the fix has **multiple reasonable shapes** (e.g. reject-vs-sanitize,
|
|
79
88
|
index-vs-paginate) — present options with tradeoffs, not a chosen path,
|
|
@@ -82,5 +91,12 @@ here):
|
|
|
82
91
|
- it touches **auth / crypto / session / token** primitives — even an "obvious"
|
|
83
92
|
fix here warrants confirmation.
|
|
84
93
|
|
|
85
|
-
Final report: **confirmed
|
|
86
|
-
· **false
|
|
94
|
+
Final report: **confirmed** (with remediation described) · **needs a decision**
|
|
95
|
+
(why + the options and their tradeoffs) · **false positive** (why) ·
|
|
96
|
+
**uncertain** (what is needed to decide).
|
|
97
|
+
|
|
98
|
+
**Escalate, never assume.** Anything you cannot decide, cannot verify, or that
|
|
99
|
+
this spec does not cover → say so plainly in the report rather than guessing.
|
|
100
|
+
When running as a stage of `/branch-review`, that report goes to the
|
|
101
|
+
orchestrator; standalone, it goes to the user. Never widen scope, never fix a
|
|
102
|
+
side issue you noticed along the way.
|