@codacy/verity-cli 0.31.0-experimental.d699160 → 0.31.0-experimental.e1f0a25

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
@@ -3,6 +3,132 @@
3
3
  All notable changes to Verity are documented here. This project follows
4
4
  [Semantic Versioning](https://semver.org/).
5
5
 
6
+ ## [0.31.0] — 2026-08-25
7
+
8
+ **The gate reviews exactly the change you're shipping — and people get the last
9
+ word.** The theme of 0.31 is evidence and disposition. Every claim the gate
10
+ makes is now bound to bytes it actually reviewed: a finding about a file that
11
+ isn't in your change can no longer block it, leftovers from a previous run can
12
+ no longer resurface as fresh criticals, and an old plan file that happens to be
13
+ committed can no longer hijack what a push is judged against. Commits and
14
+ pushes become a first-class review moment — the whole change ships for review,
15
+ to a stronger model, on its own budget. And two new verbs, `verity waive` and
16
+ `verity ignore`, let humans and agents put a disposition on the record that the
17
+ gate *verifies* rather than obeys: every one is reasoned, audited, and voids
18
+ itself the moment the evidence changes.
19
+
20
+ ```bash
21
+ npm install -g @codacy/verity-cli
22
+ verity init # optional — refreshes the installed skill docs
23
+ ```
24
+
25
+ ### 🧾 No finding without the bytes
26
+
27
+ - **A finding about a file that wasn't in the change can no longer block.**
28
+ Findings citing files whose bytes were not under review are downgraded to
29
+ pre-existing — downgraded, never dropped, and counted in the run's metadata.
30
+ This closes a real class of false blocks reproduced from production: stale
31
+ pending items from a previous run re-raised as blocking criticals against a
32
+ clean push — one of them literally labelled *"Not blocking"*.
33
+ - **It reaches every installed CLI on deploy day** — the rule is enforced
34
+ server-side, with a client-side belt on top: the guard refuses to block on a
35
+ finding citing a file it never sent.
36
+ - **What the gate said before is context, never a fresh finding.** Pending
37
+ items inform the review; they are no longer restatable as new findings.
38
+
39
+ ### 🚢 A commit or push is a first-class review moment
40
+
41
+ - **The whole change ships for review.** Budgets at `pre-commit`/`pre-push`
42
+ are raised to **120 files / ~570 KB** (the interactive Stop turn is
43
+ unchanged at 40). A 45-file commit used to arrive as 40 files with 5
44
+ silently dropped — the gate was reviewing a different change than the one
45
+ landing.
46
+ - **A stronger reviewer, when it matters most.** Git moments run on
47
+ **gpt-5.6-sol** at medium reasoning with a 3-minute budget; interactive
48
+ turns stay on the fast model. Overridable per project
49
+ (`process_constraints.git_moment_model` / `git_moment_reasoning_effort`).
50
+ Measured live: a 45-file, 318 KB push reviewed in ~52s.
51
+ - **Intent is what the change contains.** Only documents that are *part of the
52
+ push* ride along as plans. A six-month-old committed plan can no longer gate
53
+ an unrelated push — and "the plan isn't fully implemented" is never a
54
+ finding; it informs intent alignment only.
55
+ - The coverage line now carries the elapsed time — a longer review is fine
56
+ when it says so.
57
+
58
+ ### ✋ `verity waive` — accepted risk, on the record
59
+
60
+ - **A human disposition now actually unblocks the gate.** A finding your
61
+ reviewers had explicitly accepted used to re-block every commit and push,
62
+ forever, with no documented way out.
63
+ - `verity waive <pattern-id> --file <path> --reason "…"` — the reason is
64
+ mandatory (name the review, ADR, or ticket it records). The waive is bound
65
+ to the file's exact bytes: the same bytes pass for everyone, in any session
66
+ — **edit the file and the waive voids itself.** An assertion, not a mute
67
+ switch.
68
+ - Every waive lands in the statements ledger, visible in run reports; at most
69
+ 3 statements per call.
70
+ - **A waive ends a security-pushback round.** The gate resists an *agent*
71
+ arguing a security finding away; a human-attributable disposition is exactly
72
+ the adjudication that round exists to wait for.
73
+
74
+ ### 🤫 `verity ignore` and `.verityignore`
75
+
76
+ - **Declare a housekeeping window** — `verity ignore --turn --reason "…"` (or
77
+ `--for 30m`) for the agent-run `git pull` or dependency surgery that
78
+ shouldn't cost a review turn. **The declaration is checked, never
79
+ believed**: if a single file is authored during it, the whole window voids,
80
+ the review runs anyway, and the broken declaration is reported. Budgeted at
81
+ 3 per session, spent on declaration — a void never refunds the attempt.
82
+ - **`.verityignore`** — a committed, team-shared exclusion file at the repo
83
+ root, gitignore syntax: "is this file worth reviewing, ever?" Every
84
+ exclusion is named in the run's coverage ledger, never silent.
85
+ - **You can't blind the gate in the same move.** If `.verityignore` is part of
86
+ a turn's change, *no* ignore rules apply to that turn at all — writing
87
+ `src/**` into it and the vulnerability into `src/` in one turn doesn't work.
88
+ Patterns that would exclude the whole repository are refused, and a pattern
89
+ that would have hidden a really-detected secret is warned about.
90
+
91
+ ### Migrating
92
+
93
+ 1. Server-side changes — the byte witness, the git-moment profile, waive
94
+ honouring — reach **every** installed client on deploy day with no action.
95
+ 2. `npm install -g @codacy/verity-cli` for the new commands (`verity waive`,
96
+ `verity ignore`, `verity config service-url`) and the raised git-moment
97
+ budget on the client side.
98
+ 3. Optionally re-run `verity init` once per repo to refresh the installed
99
+ skill docs; the CLAUDE.md guidance block updates automatically.
100
+ 4. To use `.verityignore`: create it at the repo root (gitignore syntax) and
101
+ commit it.
102
+
103
+ [0.31.0]: https://github.com/codacy/verity-core/releases/tag/v0.31.0
104
+
105
+ ## [0.30.1] — 2026-08-24
106
+
107
+ **The guard reviews the tree your command targets.** A focused release for
108
+ everyone working with git worktrees — and the first piece of making routine
109
+ turns free.
110
+
111
+ - **Worktrees are reviewed correctly.** `cd ../wt && git push` used to review
112
+ the *main checkout's* push range; pushing from a worktree that had diverged
113
+ from its upstream reviewed drift that wasn't even on disk. The guard now
114
+ resolves *which repo, which tree, which range* from the command itself (cd
115
+ chains, `git -C`, remotes and refspecs), with ranges anchored at the
116
+ merge-base — worktrees can live anywhere.
117
+ - **Named refusals over guesses.** When the command's target can't be resolved
118
+ (e.g. `--git-dir`, `GIT_WORK_TREE=`, or two pushes at two targets in one
119
+ command), the guard allows *without* review and says so loudly — it never
120
+ issues a verdict about a tree it guessed.
121
+ - **Coverage is printed on every run**: the moment, tree, branch, range, the
122
+ files reviewed, and what was excluded and why.
123
+ - **A user-typed `! command` turn no longer costs a Verity turn.** `! git
124
+ pull` used to run the full pipeline and then narrate, in Verity's voice, a
125
+ turn nobody took. It now exits fast and silent — keyed on evidence, never
126
+ the prompt: any authored file or agent tool call defeats the skip, and
127
+ commands that can write code (`! npm install`, redirects, pipes) are still
128
+ reviewed.
129
+
130
+ [0.30.1]: https://github.com/codacy/verity-core/releases/tag/v0.30.1
131
+
6
132
  ## [0.30.0] — 2026-08-13
7
133
 
8
134
  **Verity feels smarter, and tuned to the session you're in.** The theme of 0.30
package/bin/verity.js CHANGED
@@ -14419,6 +14419,7 @@ function reduce(state, events, now) {
14419
14419
  existing.line_sha = ev.line_sha ?? existing.line_sha;
14420
14420
  existing.register = ev.register;
14421
14421
  if (existing.outcome === "fixed") existing.outcome = "recurred";
14422
+ else if (existing.outcome !== "open") existing.outcome = "open";
14422
14423
  break;
14423
14424
  }
14424
14425
  byAnchor.set(ev.anchor_key, {
@@ -17229,7 +17230,8 @@ function registerStatusCommand(program2) {
17229
17230
  printInfo("");
17230
17231
  printInfo("--- Pending Items ---");
17231
17232
  for (const item of mem.pending_items) {
17232
- printInfo(` [${item.priority.toUpperCase()}] ${item.description}`);
17233
+ const priority = typeof item.priority === "string" && item.priority.length > 0 ? item.priority.toUpperCase() : "UNSPECIFIED";
17234
+ printInfo(` [${priority}] ${item.description ?? "(no description)"}`);
17233
17235
  }
17234
17236
  }
17235
17237
  const recentTasks = mem.recent_tasks;
@@ -18452,7 +18454,7 @@ function channelSilence(input) {
18452
18454
  // src/lib/cli-version.ts
18453
18455
  function cliVersion() {
18454
18456
  try {
18455
- return true ? "0.31.0-experimental.d699160" : "dev";
18457
+ return true ? "0.31.0-experimental.e1f0a25" : "dev";
18456
18458
  } catch {
18457
18459
  return "dev";
18458
18460
  }
@@ -18702,9 +18704,10 @@ function describeOpenElsewhere(open) {
18702
18704
  const lines = open.slice(0, 5).map((o) => ` ${o.file}:${o.line} [${o.pattern_id}]`);
18703
18705
  const more = open.length > 5 ? `
18704
18706
  (+${open.length - 5} more)` : "";
18705
- return `STILL OPEN ELSEWHERE. ${open.length} blocking finding(s) Verity raised earlier are still present in files this run did not review:
18707
+ return `STILL OPEN ELSEWHERE. ${open.length} finding(s) Verity raised earlier are still on disk in files this run did not review:
18706
18708
  ${lines.join("\n")}${more}
18707
- This verdict covers the current change only. The tree is not clean.`;
18709
+ They did not gate this run \u2014 this verdict covers the current change only. The tree is not clean.
18710
+ Fix them, or record a disposition: verity waive <pattern-id> --file <path> --reason "\u2026"`;
18708
18711
  }
18709
18712
 
18710
18713
  // src/commands/analyze/exit.ts
@@ -21042,6 +21045,14 @@ async function reconcile(run) {
21042
21045
  })() : [];
21043
21046
  if (memorySession) {
21044
21047
  try {
21048
+ const settledAnchors = response.metadata?.settled_anchors;
21049
+ if (Array.isArray(settledAnchors)) {
21050
+ for (const anchorKey of settledAnchors) {
21051
+ if (typeof anchorKey === "string" && anchorKey.length > 0) {
21052
+ appendEvent(memorySession.d, { k: "outcome", anchor_key: anchorKey, outcome: "answered" });
21053
+ }
21054
+ }
21055
+ }
21045
21056
  recordVerdict(memorySession.d, {
21046
21057
  runId: response.run_id ?? turnId,
21047
21058
  decision,
@@ -23580,8 +23591,8 @@ function registerTelemetryCommands(program2) {
23580
23591
  }
23581
23592
 
23582
23593
  // src/cli.ts
23583
- program.name("verity").description("CLI for Verity quality gate service").version("0.31.0-experimental.d699160").option("--token <token>", "Override authentication token").option("--service-url <url>", "Override service URL").option("--verbose", "Log HTTP requests/responses to stderr").hook("preAction", async (_thisCommand, actionCommand) => {
23584
- installStderrLog(actionCommand.name(), process.argv.slice(2), "0.31.0-experimental.d699160");
23594
+ program.name("verity").description("CLI for Verity quality gate service").version("0.31.0-experimental.e1f0a25").option("--token <token>", "Override authentication token").option("--service-url <url>", "Override service URL").option("--verbose", "Log HTTP requests/responses to stderr").hook("preAction", async (_thisCommand, actionCommand) => {
23595
+ installStderrLog(actionCommand.name(), process.argv.slice(2), "0.31.0-experimental.e1f0a25");
23585
23596
  setUserNamedServiceUrl(program.opts().serviceUrl);
23586
23597
  try {
23587
23598
  await foldLegacyLocalCredential();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codacy/verity-cli",
3
- "version": "0.31.0-experimental.d699160",
3
+ "version": "0.31.0-experimental.e1f0a25",
4
4
  "description": "CLI for Verity quality gate service",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://verity.md",