@codacy/verity-cli 0.32.0-experimental.f0746f7 → 0.32.1-experimental.1371ba8
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 +108 -2
- package/bin/verity.js +1909 -1220
- package/data/skills/verity-analyze/SKILL.md +7 -0
- package/data/skills/verity-feedback/SKILL.md +6 -0
- package/data/skills/verity-insights/SKILL.md +7 -0
- package/data/skills/verity-learn/SKILL.md +6 -0
- package/data/skills/verity-memory/SKILL.md +7 -0
- package/data/skills/verity-reflect/SKILL.md +6 -0
- package/data/skills/verity-setup/SKILL.md +12 -5
- package/data/skills/verity-status/SKILL.md +6 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,49 @@ All notable changes to Verity are documented here. This project follows
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
**Verity ships as a Claude Code plugin.** `/plugin marketplace add codacy/verity`
|
|
9
|
+
then `/plugin install verity@codacy` gives a working gate with nothing else to
|
|
10
|
+
install — the plugin carries the CLI as a pinned dependency, and Claude Code
|
|
11
|
+
installs and updates it for you.
|
|
12
|
+
|
|
13
|
+
### 🔌 The plugin
|
|
14
|
+
|
|
15
|
+
- **Eight skills, namespaced** — `/verity:analyze`, `/verity:status`,
|
|
16
|
+
`/verity:learn`, `/verity:memory`, `/verity:reflect` are available to Claude
|
|
17
|
+
directly; `/verity:setup`, `/verity:insights` and `/verity:feedback` are yours
|
|
18
|
+
to invoke and are not offered to the model at all. The whole plugin adds about
|
|
19
|
+
500 tokens to a session (`claude plugin details verity`).
|
|
20
|
+
- **All six hooks come from the plugin**, so nothing is written to your
|
|
21
|
+
`.claude/settings.json`.
|
|
22
|
+
- **One gate decision per turn.** A project carrying both the plugin and the
|
|
23
|
+
hooks `verity init` used to write no longer reviews each turn twice: when the
|
|
24
|
+
plugin is present it owns the hooks, and the settings.json copy stands down.
|
|
25
|
+
`verity init` detects the plugin and removes the duplicate wiring.
|
|
26
|
+
|
|
27
|
+
### 🚪 A project that was never set up is left alone
|
|
28
|
+
|
|
29
|
+
Every hook now asks the same question the same way. `verity analyze` used to run
|
|
30
|
+
in a project that had never seen `verity init`, create `.verity/` there, and then —
|
|
31
|
+
with no baseline to compare against — review nothing. It now stands down like the
|
|
32
|
+
other hooks always have, so installing Verity no longer scatters state through
|
|
33
|
+
directories you merely opened. On the first session in such a project, Claude is
|
|
34
|
+
told once that the gate is off here and can offer `/verity:setup` (or `verity init`
|
|
35
|
+
on an npm install). Works correctly from linked git worktrees.
|
|
36
|
+
|
|
37
|
+
### ⚙️ Git-moment gating moved into the project
|
|
38
|
+
|
|
39
|
+
`verity guard` now reads `.verity/config.json` instead of taking its moments from
|
|
40
|
+
which hook was wired, because a plugin's hooks are the same for everyone. **The
|
|
41
|
+
default gates nothing** — set it with `verity config git-moments commit,push`, or
|
|
42
|
+
answer the question in `verity init`. An explicit `--on` still wins, so existing
|
|
43
|
+
installs are untouched.
|
|
44
|
+
|
|
45
|
+
Linked git worktrees inherit the setting from the main checkout: `.verity/` is
|
|
46
|
+
gitignored, so a fresh `git worktree add` had no config of its own and the guard
|
|
47
|
+
there gated nothing while `verity hooks check` said "wired but gating nothing".
|
|
48
|
+
A worktree's own `.verity/config.json`, when present, still wins — including an
|
|
49
|
+
explicit `none` — and `hooks check` names the file it inherited from.
|
|
50
|
+
|
|
8
51
|
### 🎯 Setup finishes in one command
|
|
9
52
|
|
|
10
53
|
- **`verity init` now derives the Standard itself.** When the service has nothing
|
|
@@ -97,7 +140,6 @@ those is now an assertion.
|
|
|
97
140
|
before exiting: raw mode left on outlives the process and makes the user's next
|
|
98
141
|
shell prompt unusable.
|
|
99
142
|
|
|
100
|
-
## [Unreleased]
|
|
101
143
|
|
|
102
144
|
### 🤝 Joining a project that already has a Standard
|
|
103
145
|
|
|
@@ -141,7 +183,6 @@ those is now an assertion.
|
|
|
141
183
|
- The setup skill learned the same case — Standard present, analysis config
|
|
142
184
|
missing — and writes only the config rather than re-synthesizing the Standard.
|
|
143
185
|
|
|
144
|
-
## [Unreleased]
|
|
145
186
|
|
|
146
187
|
**Setup is one command.** `verity init` and `/verity-setup` were two half-flows
|
|
147
188
|
that overlapped — and the overlap was not harmless: init wired the Stop hook,
|
|
@@ -218,6 +259,71 @@ with one entry point.
|
|
|
218
259
|
terminal (Ctrl+D, a pty that ends) falls back to the default instead of
|
|
219
260
|
crashing init between copying the skills and wiring the hooks.
|
|
220
261
|
|
|
262
|
+
### 🔒 Fixed — four ways the gate could be off while reporting itself on
|
|
263
|
+
|
|
264
|
+
- **`git add x && git commit` was never reviewed.** A Claude Code hook runs
|
|
265
|
+
*before* the command, so the index it read had not had the `add` applied:
|
|
266
|
+
no files, and the gate's "nothing staged" exit — a silent allow, with no
|
|
267
|
+
trace that a commit had gone unreviewed. It is the shape an agent writes by
|
|
268
|
+
default, so it was most of the pre-commit gate's coverage. The gate now works
|
|
269
|
+
out what the command will stage, using git's own pathspec matching, and
|
|
270
|
+
handles `git commit -a`. Where it cannot — a pathspec the shell expands,
|
|
271
|
+
`git add -p` — it says so and lets the commit through **loudly** rather than
|
|
272
|
+
reviewing a set it guessed at.
|
|
273
|
+
- **Uninstalling the Claude Code plugin left projects with no gate at all.**
|
|
274
|
+
Whether the plugin owned a project's hooks was decided by whether its install
|
|
275
|
+
directory existed — and that directory survives an uninstall. Every project
|
|
276
|
+
the plugin had ever run in went on standing its own hooks down for a plugin
|
|
277
|
+
that was gone. Ownership now comes from Claude Code's install registry, and
|
|
278
|
+
`verity init` clears the stale marker.
|
|
279
|
+
- **`verity init` now says which mode it is in before it acts on it** — the
|
|
280
|
+
plugin's hooks or this project's own — with the install it found and
|
|
281
|
+
`--no-plugin` to overrule it. It does two opposite things depending on that
|
|
282
|
+
answer, and it used to make the choice silently.
|
|
283
|
+
- **A plugin installed from a local marketplace is recognised too.** Claude Code
|
|
284
|
+
runs a marketplace served from a *directory* out of that directory while
|
|
285
|
+
recording the cache copy it made, so the two paths disagree and a live,
|
|
286
|
+
gating install read as unverified — every reporter then said "no analysis
|
|
287
|
+
moment is active" about a project the plugin was gating on every turn.
|
|
288
|
+
- **A repository can no longer switch the gate off by shipping a file.**
|
|
289
|
+
Ownership was claimed by `.verity/.plugin-active`, which is a file inside the
|
|
290
|
+
project. One naming any directory that happened to exist disabled every hook
|
|
291
|
+
in that project. An install Claude Code cannot vouch for is now ignored.
|
|
292
|
+
- **`verity status` and `verity doctor` agree with `verity hooks check`.** Under
|
|
293
|
+
the plugin both used to report "Stop: off" and tell you to install hooks that
|
|
294
|
+
were firing on every turn. All three read one answer now, and it is correct
|
|
295
|
+
from a subdirectory too.
|
|
296
|
+
- **A commit gate on a linked worktree gates what the main checkout gates.**
|
|
297
|
+
`.verity/config.json` is machine-local, so every `git worktree add` started
|
|
298
|
+
with no moments and reviewed nothing.
|
|
299
|
+
- **A verdict the client does not understand is no longer rendered as a pass.**
|
|
300
|
+
An absent or unrecognised gate decision — a truncated response, a proxy error
|
|
301
|
+
page — reached the "✓ PASS" line. It is reported as unreviewed.
|
|
302
|
+
- **`verity hooks install --moments <typo>` no longer removes every gate.**
|
|
303
|
+
Unrecognised moments were dropped, so a misspelling reconciled to nothing and
|
|
304
|
+
reported success. It is an error now; `--moments none` turns them off on
|
|
305
|
+
purpose.
|
|
306
|
+
|
|
307
|
+
## [0.31.3] — 2026-09-03
|
|
308
|
+
|
|
309
|
+
**After a rebase, Verity reviewed the wrong code.** When a branch was rebased
|
|
310
|
+
onto an updated main, the gate could treat all of the upstream changes as the
|
|
311
|
+
session's own work and block the push on findings in code the session never
|
|
312
|
+
touched. The cause was that the review baseline was trusted by whether its commit
|
|
313
|
+
still existed rather than whether it was still part of the current history, so a
|
|
314
|
+
rewritten baseline kept anchoring every diff.
|
|
315
|
+
|
|
316
|
+
- **The push gate reviews exactly what the push publishes** — the commits the
|
|
317
|
+
remote does not yet have — so a rebase, a force-push, a first push, or
|
|
318
|
+
re-pushing an already-published commit each review only their real new work.
|
|
319
|
+
- **The stop-hook baseline is trusted only while it is an ancestor of HEAD.** A
|
|
320
|
+
rewritten baseline is discarded and re-derived from the commits actually made
|
|
321
|
+
since, so upstream changes are never attributed to the session.
|
|
322
|
+
- **A commit made during a merge reviews only the files you resolved**, not the
|
|
323
|
+
whole incoming branch.
|
|
324
|
+
- **A slash command such as `/login` is no longer treated as a task or a goal**,
|
|
325
|
+
so the review is graded against what you were actually working on.
|
|
326
|
+
|
|
221
327
|
## [0.31.1] — 2026-08-27
|
|
222
328
|
|
|
223
329
|
**Verity stops repeating itself.** A finding it had already closed could keep
|