@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 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